Skip to main content
GET
https://api.mindosoftware.com
/
api
/
v1
/
business-accounts
curl -X GET https://api.mindosoftware.com/api/v1/business-accounts/ \
  -H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
{
  "companyName": "Mi Empresa SRL",
  "apiKeyName": "Production API Key",
  "businessAccounts": [
    {
      "businessAccountId": 1,
      "businessName": "Mi Empresa WhatsApp Business",
      "phoneNumbers": [
        {
          "id": 123,
          "phoneNumberId": "813497231850626",
          "displayPhoneNumber": "+54 9 223 675-0780",
          "verifiedName": "Mi Empresa",
          "isPrimary": true,
          "messagingLimitTier": "TIER_1000",
          "quota": {
            "dailyLimit": 1000,
            "uniqueNumbersSent24h": 45,
            "remaining": 955,
            "usagePercentage": 4.5,
            "canSend": true
          }
        }
      ],
      "templates": [
        {
          "name": "welcome_message",
          "language": "es",
          "category": "MARKETING",
          "variables": [
            {
              "name": "customer_name",
              "type": "TEXT",
              "position": 1,
              "isRequired": true,
              "component": "BODY"
            }
          ]
        },
        {
          "name": "order_confirmation",
          "language": "es",
          "category": "TRANSACTIONAL",
          "variables": [
            {
              "name": "order_id",
              "type": "TEXT",
              "position": 1,
              "isRequired": true,
              "component": "BODY"
            },
            {
              "name": "total_amount",
              "type": "CURRENCY",
              "position": 2,
              "isRequired": true,
              "component": "BODY"
            },
            {
              "name": "delivery_date",
              "type": "DATE_TIME",
              "position": 3,
              "isRequired": true,
              "component": "BODY"
            }
          ]
        }
      ]
    }
  ]
}

Descripción

Este endpoint devuelve toda la información asociada a tu API Key: datos de la empresa, cuentas de WhatsApp Business, números de teléfono con su cuota de mensajería y templates aprobados con sus variables.

Header de autenticación

X-API-Key
string
required
Tu API Key de Mindo. Formato: mindo_xxxxxxxxxxxxxxxxxxxxxxxx

Respuesta

companyName
string
Nombre de tu empresa.
apiKeyName
string
Nombre de la API Key utilizada en la solicitud.
businessAccounts
array
Lista de cuentas de WhatsApp Business asociadas.
curl -X GET https://api.mindosoftware.com/api/v1/business-accounts/ \
  -H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
{
  "companyName": "Mi Empresa SRL",
  "apiKeyName": "Production API Key",
  "businessAccounts": [
    {
      "businessAccountId": 1,
      "businessName": "Mi Empresa WhatsApp Business",
      "phoneNumbers": [
        {
          "id": 123,
          "phoneNumberId": "813497231850626",
          "displayPhoneNumber": "+54 9 223 675-0780",
          "verifiedName": "Mi Empresa",
          "isPrimary": true,
          "messagingLimitTier": "TIER_1000",
          "quota": {
            "dailyLimit": 1000,
            "uniqueNumbersSent24h": 45,
            "remaining": 955,
            "usagePercentage": 4.5,
            "canSend": true
          }
        }
      ],
      "templates": [
        {
          "name": "welcome_message",
          "language": "es",
          "category": "MARKETING",
          "variables": [
            {
              "name": "customer_name",
              "type": "TEXT",
              "position": 1,
              "isRequired": true,
              "component": "BODY"
            }
          ]
        },
        {
          "name": "order_confirmation",
          "language": "es",
          "category": "TRANSACTIONAL",
          "variables": [
            {
              "name": "order_id",
              "type": "TEXT",
              "position": 1,
              "isRequired": true,
              "component": "BODY"
            },
            {
              "name": "total_amount",
              "type": "CURRENCY",
              "position": 2,
              "isRequired": true,
              "component": "BODY"
            },
            {
              "name": "delivery_date",
              "type": "DATE_TIME",
              "position": 3,
              "isRequired": true,
              "component": "BODY"
            }
          ]
        }
      ]
    }
  ]
}

Messaging Limit Tiers

Los tiers de mensajería son asignados por Meta y determinan cuántas conversaciones únicas puedes iniciar por día.
TierLímite diarioVelocidad recomendadaTiempo estimado (1000 msgs)
TIER_5050 conversaciones1.2s entre mensajes20 minutos
TIER_250250 conversaciones0.24s entre mensajes4 minutos
TIER_10001,000 conversaciones0.06s entre mensajes1 minuto
TIER_1000010,000 conversaciones0.006s entre mensajes6 segundos
TIER_100000100,000 conversaciones0.0006s entre mensajes< 1 segundo
TIER_UNLIMITEDSin límiteSin delayInstantáneo
El tier aumenta automáticamente según el uso y la calidad del número.

Tipos de variables

Las variables en los templates pueden ser de los siguientes tipos:
TipoDescripciónEjemplo
TEXTTexto simple"Juan Pérez"
CURRENCYMonto con moneda"$1,250.00"
DATE_TIMEFecha y/o hora"25 de Noviembre", "18:30"
IMAGEURL de imagen"https://..."
VIDEOURL de video"https://..."
DOCUMENTURL de documento"https://..."

Casos de uso

El campo phoneNumberId es el ID de Meta que necesitas para enviar mensajes a través de la API.
const data = await getBusinessAccounts();

// Obtener el primer número de WhatsApp
const firstPhone = data.businessAccounts[0].phoneNumbers[0];
const phoneNumberId = firstPhone.phoneNumberId;

console.log('Phone Number ID:', phoneNumberId);
// Output: "813497231850626"

// Usar este ID para enviar mensajes
await sendTemplate({
  phone_number_id: phoneNumberId,
  template_name: 'welcome_message',
  recipient_phone: '+5491112345678',
  variables: { customer_name: 'Juan' }
});
Antes de enviar mensajes, verifica que el número tenga cuota disponible.
const data = await getBusinessAccounts();
const phone = data.businessAccounts[0].phoneNumbers[0];

if (!phone.quota.canSend) {
  console.error('No se puede enviar: límite alcanzado');
  console.log(`Usado: ${phone.quota.uniqueNumbersSent24h}/${phone.quota.dailyLimit}`);
  return;
}

if (phone.quota.usagePercentage > 80) {
  console.warn('Alerta: Uso al ' + phone.quota.usagePercentage + '%');
}

console.log('Cuota disponible:', phone.quota.remaining);
Obtén la lista de templates disponibles y sus variables para construir los envíos.
const data = await getBusinessAccounts();
const templates = data.businessAccounts[0].templates;

console.log('Templates disponibles:');
templates.forEach(template => {
  console.log(`\n${template.name} (${template.language})`);
  console.log(`  Categoría: ${template.category}`);
  console.log(`  Variables:`);

  template.variables.forEach(variable => {
    const required = variable.isRequired ? '(requerida)' : '(opcional)';
    console.log(`  - ${variable.name} [${variable.type}] ${required}`);
  });
});
Usa la información de variables para construir el payload de envío automáticamente.
const data = await getBusinessAccounts();
const template = data.businessAccounts[0].templates
  .find(t => t.name === 'order_confirmation');

// Construir variables automáticamente
const variables = {};
template.variables.forEach(variable => {
  switch (variable.type) {
    case 'TEXT':
      variables[variable.name] = 'Valor de texto';
      break;
    case 'CURRENCY':
      variables[variable.name] = '$1,250.00';
      break;
    case 'DATE_TIME':
      variables[variable.name] = new Date().toLocaleDateString('es-AR');
      break;
  }
});

console.log('Variables construidas:', variables);
// Output: { order_id: 'Valor de texto', total_amount: '$1,250.00', delivery_date: '16/11/2025' }
Si tienes múltiples números, selecciona automáticamente el que tenga más cuota disponible.
const data = await getBusinessAccounts();
const phones = data.businessAccounts[0].phoneNumbers;

// Ordenar por cuota restante (mayor primero)
const sortedPhones = phones.sort((a, b) => b.quota.remaining - a.quota.remaining);

// Seleccionar el que tiene más cuota disponible
const bestPhone = sortedPhones.find(phone => phone.quota.canSend);

if (!bestPhone) {
  console.error('Ningún número tiene cuota disponible');
  return;
}

console.log(`Usando número: ${bestPhone.displayPhoneNumber}`);
console.log(`  Cuota restante: ${bestPhone.quota.remaining}`);
console.log(`  Phone Number ID: ${bestPhone.phoneNumberId}`);