curl -X GET https://api.mindosoftware.com/api/v1/business-accounts/ \
-H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://api.mindosoftware.com/api/v1/business-accounts/",
headers={"X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx"}
)
data = response.json()
print(data)
const response = await fetch(
"https://api.mindosoftware.com/api/v1/business-accounts/",
{
headers: { "X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx" }
}
);
const data = await response.json();
console.log(data);
{
"companyName": "Mi Empresa SRL",
"apiKeyName": "Production API Key",
"phoneNumbers": [
{
"id": 123,
"phoneNumberId": "813497231850626",
"displayPhoneNumber": "+54 9 223 675-0780",
"verifiedName": "Mi Empresa",
"businessName": "Mi Empresa SRL",
"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"
}
],
"buttons": []
},
{
"name": "order_confirmation",
"language": "es",
"category": "UTILITY",
"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"
}
],
"buttons": []
}
]
}
]
}
{
"error": "Este endpoint requiere autenticacion con API Key (header X-API-Key)"
}
{
"error": "API Key expirada"
}
{
"error": "API Key no tiene acceso a este recurso"
}
Cuentas de negocio
Obtener cuentas de negocio
Obtiene la información de tus cuentas de WhatsApp Business, números de teléfono y templates disponibles
GET
/
api
/
v1
/
business-accounts
/
curl -X GET https://api.mindosoftware.com/api/v1/business-accounts/ \
-H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://api.mindosoftware.com/api/v1/business-accounts/",
headers={"X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx"}
)
data = response.json()
print(data)
const response = await fetch(
"https://api.mindosoftware.com/api/v1/business-accounts/",
{
headers: { "X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx" }
}
);
const data = await response.json();
console.log(data);
{
"companyName": "Mi Empresa SRL",
"apiKeyName": "Production API Key",
"phoneNumbers": [
{
"id": 123,
"phoneNumberId": "813497231850626",
"displayPhoneNumber": "+54 9 223 675-0780",
"verifiedName": "Mi Empresa",
"businessName": "Mi Empresa SRL",
"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"
}
],
"buttons": []
},
{
"name": "order_confirmation",
"language": "es",
"category": "UTILITY",
"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"
}
],
"buttons": []
}
]
}
]
}
{
"error": "Este endpoint requiere autenticacion con API Key (header X-API-Key)"
}
{
"error": "API Key expirada"
}
{
"error": "API Key no tiene acceso a este recurso"
}
Descripción
Este endpoint devuelve toda la información asociada a tu API Key: datos de la empresa, números de teléfono con su cuota de mensajería y templates aprobados con sus variables.Header de autenticación
string
requerido
Tu API Key de Mindo. Formato:
mindo_xxxxxxxxxxxxxxxxxxxxxxxxRespuesta
string
Nombre de tu empresa.
string
Nombre de la API Key utilizada en la solicitud.
array
Números de WhatsApp asociados a tu cuenta.
Mostrar Propiedades de phoneNumbers
Mostrar Propiedades de phoneNumbers
integer
ID interno del número.
string
ID de Meta del número de WhatsApp. Usar este valor para enviar mensajes.
string
Número de teléfono formateado para mostrar al usuario.
string
Nombre verificado por Meta para este número.
string
Nombre de la cuenta de WhatsApp Business a la que pertenece este número.
boolean
Indica si es el número principal de la cuenta.
string
Tier de límite de mensajería asignado por Meta. Ver tabla de tiers.
object
Información de cuota de mensajería actual.
array
Templates aprobados disponibles para envío en este número.
Mostrar Propiedades de templates
Mostrar Propiedades de templates
string
Nombre del template. Usar este valor para enviar mensajes.
string
Idioma del template (
es, en, etc.).string
Categoría del template (
MARKETING, UTILITY, etc.).array
Variables dinámicas del template.
array
Botones del template (array vacío si no tiene botones).
curl -X GET https://api.mindosoftware.com/api/v1/business-accounts/ \
-H "X-API-Key: mindo_xxxxxxxxxxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://api.mindosoftware.com/api/v1/business-accounts/",
headers={"X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx"}
)
data = response.json()
print(data)
const response = await fetch(
"https://api.mindosoftware.com/api/v1/business-accounts/",
{
headers: { "X-API-Key": "mindo_xxxxxxxxxxxxxxxxxxxxxxxx" }
}
);
const data = await response.json();
console.log(data);
{
"companyName": "Mi Empresa SRL",
"apiKeyName": "Production API Key",
"phoneNumbers": [
{
"id": 123,
"phoneNumberId": "813497231850626",
"displayPhoneNumber": "+54 9 223 675-0780",
"verifiedName": "Mi Empresa",
"businessName": "Mi Empresa SRL",
"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"
}
],
"buttons": []
},
{
"name": "order_confirmation",
"language": "es",
"category": "UTILITY",
"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"
}
],
"buttons": []
}
]
}
]
}
{
"error": "Este endpoint requiere autenticacion con API Key (header X-API-Key)"
}
{
"error": "API Key expirada"
}
{
"error": "API Key no tiene acceso a este recurso"
}
Messaging Limit Tiers
Los tiers de mensajería son asignados por Meta y determinan cuántas conversaciones únicas puedes iniciar por día.| Tier | Límite diario | Velocidad recomendada | Tiempo estimado (1000 msgs) |
|---|---|---|---|
TIER_50 | 50 conversaciones | 1.2s entre mensajes | 20 minutos |
TIER_250 | 250 conversaciones | 0.24s entre mensajes | 4 minutos |
TIER_1000 | 1,000 conversaciones | 0.06s entre mensajes | 1 minuto |
TIER_10000 | 10,000 conversaciones | 0.006s entre mensajes | 6 segundos |
TIER_100000 | 100,000 conversaciones | 0.0006s entre mensajes | < 1 segundo |
TIER_UNLIMITED | Sin límite | Sin delay | Instantá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:| Tipo | Descripción | Ejemplo |
|---|---|---|
TEXT | Texto simple | "Juan Pérez" |
CURRENCY | Monto con moneda | "$1,250.00" |
DATE_TIME | Fecha y/o hora | "25 de Noviembre", "18:30" |
IMAGE | URL de imagen | "https://..." |
VIDEO | URL de video | "https://..." |
DOCUMENT | URL de documento | "https://..." |
Casos de uso
Obtener phone_number_id para enviar mensajes
Obtener phone_number_id para enviar mensajes
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.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' }
});
Verificar cuota disponible antes de enviar
Verificar cuota disponible antes de enviar
Antes de enviar mensajes, verifica que el número tenga cuota disponible.
const data = await getBusinessAccounts();
const phone = data.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);
Listar templates con sus variables
Listar templates con sus variables
Obtén la lista de templates disponibles y sus variables para construir los envíos.
const data = await getBusinessAccounts();
const phone = data.phoneNumbers[0];
console.log('Templates disponibles:');
phone.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}`);
});
});
Construir payload dinámicamente según variables del template
Construir payload dinámicamente según variables del template
Usa la información de variables para construir el payload de envío automáticamente.
const data = await getBusinessAccounts();
const template = data.phoneNumbers[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' }
Seleccionar número según disponibilidad de cuota
Seleccionar número según disponibilidad de cuota
Si tienes múltiples números, selecciona automáticamente el que tenga más cuota disponible.
const data = await getBusinessAccounts();
const phones = data.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}`);

