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"
}
Contas de negócio
Obter contas de negócio
Obter informações sobre suas contas do WhatsApp Business, números de telefone e templates disponíveis
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"
}
Descrição
Este endpoint retorna todas as informações associadas à sua API Key: dados da empresa, números de telefone com suas cotas de envio e templates aprovados com suas variáveis.Header de autenticação
string
obrigatório
Sua API Key da Mindo. Formato:
mindo_xxxxxxxxxxxxxxxxxxxxxxxxResposta
string
Nome da sua empresa.
string
Nome da API Key usada na requisição.
array
Números de telefone do WhatsApp associados à sua conta.
Mostrar Propriedades de phoneNumbers
Mostrar Propriedades de phoneNumbers
integer
ID interno do número de telefone.
string
ID do número de telefone do WhatsApp na Meta. Use este valor para enviar mensagens.
string
Número de telefone formatado para exibição.
string
Nome verificado pela Meta para este número.
string
Nome da conta do WhatsApp Business à qual este número pertence.
boolean
Se este é o número principal da conta.
string
Nível de limite de envio atribuído pela Meta. Consulte a tabela de níveis.
object
array
Templates aprovados disponíveis para envio neste número.
Mostrar Propriedades de templates
Mostrar Propriedades de templates
string
Nome do template. Use este valor para enviar mensagens.
string
Idioma do template (
es, en, etc.).string
Categoria do template (
MARKETING, UTILITY, etc.).array
array
Botões do template (array vazio se não possui botões).
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"
}
Níveis de limite de envio
Os níveis de envio são atribuídos pela Meta e determinam quantas conversas únicas você pode iniciar por dia.| Nível | Limite diário | Velocidade recomendada | Tempo estimado (1000 msgs) |
|---|---|---|---|
TIER_50 | 50 conversas | 1,2s entre mensagens | 20 minutos |
TIER_250 | 250 conversas | 0,24s entre mensagens | 4 minutos |
TIER_1000 | 1.000 conversas | 0,06s entre mensagens | 1 minuto |
TIER_10000 | 10.000 conversas | 0,006s entre mensagens | 6 segundos |
TIER_100000 | 100.000 conversas | 0,0006s entre mensagens | < 1 segundo |
TIER_UNLIMITED | Sem limite | Sem atraso | Instantâneo |
O nível aumenta automaticamente com base no uso e na qualidade do número.
Tipos de variáveis
As variáveis do template podem ser dos seguintes tipos:| Tipo | Descrição | Exemplo |
|---|---|---|
TEXT | Texto simples | "Juan Perez" |
CURRENCY | Valor com moeda | "$1.250,00" |
DATE_TIME | Data e/ou hora | "25 de novembro", "18:30" |
IMAGE | URL de imagem | "https://..." |
VIDEO | URL de vídeo | "https://..." |
DOCUMENT | URL de documento | "https://..." |
Casos de uso
Obter phone_number_id para enviar mensagens
Obter phone_number_id para enviar mensagens
O campo
phoneNumberId é o ID da Meta que você precisa para enviar mensagens pela API.const data = await getBusinessAccounts();
// Obter o primeiro número do WhatsApp
const firstPhone = data.phoneNumbers[0];
const phoneNumberId = firstPhone.phoneNumberId;
console.log('Phone Number ID:', phoneNumberId);
// Output: "813497231850626"
// Usar este ID para enviar mensagens
await sendTemplate({
phone_number_id: phoneNumberId,
template_name: 'welcome_message',
recipient_phone: '+5491112345678',
variables: { customer_name: 'Juan' }
});
Verificar cota disponível antes de enviar
Verificar cota disponível antes de enviar
Antes de enviar mensagens, verifique se o número tem cota disponível.
const data = await getBusinessAccounts();
const phone = data.phoneNumbers[0];
if (!phone.quota.canSend) {
console.error('Não é possível enviar: limite atingido');
console.log(`Usado: ${phone.quota.uniqueNumbersSent24h}/${phone.quota.dailyLimit}`);
return;
}
if (phone.quota.usagePercentage > 80) {
console.warn('Alerta: Uso em ' + phone.quota.usagePercentage + '%');
}
console.log('Cota disponível:', phone.quota.remaining);
Listar templates com suas variáveis
Listar templates com suas variáveis
Obtenha a lista de templates disponíveis e suas variáveis para construir envios.
const data = await getBusinessAccounts();
const phone = data.phoneNumbers[0];
console.log('Templates disponíveis:');
phone.templates.forEach(template => {
console.log(`\n${template.name} (${template.language})`);
console.log(` Categoria: ${template.category}`);
console.log(` Variáveis:`);
template.variables.forEach(variable => {
const required = variable.isRequired ? '(obrigatório)' : '(opcional)';
console.log(` - ${variable.name} [${variable.type}] ${required}`);
});
});
Construir payload dinamicamente a partir das variáveis do template
Construir payload dinamicamente a partir das variáveis do template
Use as informações das variáveis para construir o payload de envio automaticamente.
const data = await getBusinessAccounts();
const template = data.phoneNumbers[0].templates
.find(t => t.name === 'order_confirmation');
// Construir variáveis automaticamente
const variables = {};
template.variables.forEach(variable => {
switch (variable.type) {
case 'TEXT':
variables[variable.name] = 'Valor de texto';
break;
case 'CURRENCY':
variables[variable.name] = 'R$1.250,00';
break;
case 'DATE_TIME':
variables[variable.name] = new Date().toLocaleDateString('pt-BR');
break;
}
});
console.log('Variáveis construídas:', variables);
// Output: { order_id: 'Valor de texto', total_amount: 'R$1.250,00', delivery_date: '16/11/2025' }
Selecionar número por disponibilidade de cota
Selecionar número por disponibilidade de cota
Se você tem múltiplos números, selecione automaticamente aquele com mais cota disponível.
const data = await getBusinessAccounts();
const phones = data.phoneNumbers;
// Ordenar por cota restante (maior primeiro)
const sortedPhones = phones.sort((a, b) => b.quota.remaining - a.quota.remaining);
// Selecionar o que tem mais cota disponível
const bestPhone = sortedPhones.find(phone => phone.quota.canSend);
if (!bestPhone) {
console.error('Nenhum número tem cota disponível');
return;
}
console.log(`Usando número: ${bestPhone.displayPhoneNumber}`);
console.log(` Cota restante: ${bestPhone.quota.remaining}`);
console.log(` Phone Number ID: ${bestPhone.phoneNumberId}`);

