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"
}
Business accounts
Get business accounts
Get information about your WhatsApp Business accounts, phone numbers, and available templates
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"
}
Description
This endpoint returns all information associated with your API Key: company data, phone numbers with their messaging quota, and approved templates with their variables.Authentication header
string
required
Your Mindo API Key. Format:
mindo_xxxxxxxxxxxxxxxxxxxxxxxxResponse
string
Your company name.
string
Name of the API Key used in the request.
array
WhatsApp phone numbers associated with your account.
Show phoneNumbers properties
Show phoneNumbers properties
integer
Internal phone number ID.
string
Meta’s WhatsApp phone number ID. Use this value to send messages.
string
Formatted phone number for display.
string
Meta-verified name for this number.
string
Name of the WhatsApp Business account this number belongs to.
boolean
Whether this is the primary number of the account.
string
Messaging limit tier assigned by Meta. See tier table.
object
array
Approved templates available for sending on this number.
Show templates properties
Show templates properties
string
Template name. Use this value to send messages.
string
Template language (
es, en, etc.).string
Template category (
MARKETING, UTILITY, etc.).array
array
Template buttons (empty array if the template has no buttons).
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
Messaging tiers are assigned by Meta and determine how many unique conversations you can initiate per day.| Tier | Daily limit | Recommended speed | Estimated time (1000 msgs) |
|---|---|---|---|
TIER_50 | 50 conversations | 1.2s between messages | 20 minutes |
TIER_250 | 250 conversations | 0.24s between messages | 4 minutes |
TIER_1000 | 1,000 conversations | 0.06s between messages | 1 minute |
TIER_10000 | 10,000 conversations | 0.006s between messages | 6 seconds |
TIER_100000 | 100,000 conversations | 0.0006s between messages | < 1 second |
TIER_UNLIMITED | No limit | No delay | Instant |
The tier increases automatically based on usage and number quality.
Variable types
Template variables can be of the following types:| Type | Description | Example |
|---|---|---|
TEXT | Plain text | "Juan Perez" |
CURRENCY | Amount with currency | "$1,250.00" |
DATE_TIME | Date and/or time | "November 25", "18:30" |
IMAGE | Image URL | "https://..." |
VIDEO | Video URL | "https://..." |
DOCUMENT | Document URL | "https://..." |
Use cases
Get phone_number_id to send messages
Get phone_number_id to send messages
The
phoneNumberId field is the Meta ID you need to send messages through the API.const data = await getBusinessAccounts();
// Get the first WhatsApp number
const firstPhone = data.phoneNumbers[0];
const phoneNumberId = firstPhone.phoneNumberId;
console.log('Phone Number ID:', phoneNumberId);
// Output: "813497231850626"
// Use this ID to send messages
await sendTemplate({
phone_number_id: phoneNumberId,
template_name: 'welcome_message',
recipient_phone: '+5491112345678',
variables: { customer_name: 'Juan' }
});
Check available quota before sending
Check available quota before sending
Before sending messages, verify that the number has available quota.
const data = await getBusinessAccounts();
const phone = data.phoneNumbers[0];
if (!phone.quota.canSend) {
console.error('Cannot send: limit reached');
console.log(`Used: ${phone.quota.uniqueNumbersSent24h}/${phone.quota.dailyLimit}`);
return;
}
if (phone.quota.usagePercentage > 80) {
console.warn('Alert: Usage at ' + phone.quota.usagePercentage + '%');
}
console.log('Available quota:', phone.quota.remaining);
List templates with their variables
List templates with their variables
Get the list of available templates and their variables to build sends.
const data = await getBusinessAccounts();
const phone = data.phoneNumbers[0];
console.log('Available templates:');
phone.templates.forEach(template => {
console.log(`\n${template.name} (${template.language})`);
console.log(` Category: ${template.category}`);
console.log(` Variables:`);
template.variables.forEach(variable => {
const required = variable.isRequired ? '(required)' : '(optional)';
console.log(` - ${variable.name} [${variable.type}] ${required}`);
});
});
Build payload dynamically from template variables
Build payload dynamically from template variables
Use variable information to build the send payload automatically.
const data = await getBusinessAccounts();
const template = data.phoneNumbers[0].templates
.find(t => t.name === 'order_confirmation');
// Build variables automatically
const variables = {};
template.variables.forEach(variable => {
switch (variable.type) {
case 'TEXT':
variables[variable.name] = 'Text value';
break;
case 'CURRENCY':
variables[variable.name] = '$1,250.00';
break;
case 'DATE_TIME':
variables[variable.name] = new Date().toLocaleDateString('en-US');
break;
}
});
console.log('Built variables:', variables);
// Output: { order_id: 'Text value', total_amount: '$1,250.00', delivery_date: '11/16/2025' }
Select number by quota availability
Select number by quota availability
If you have multiple numbers, automatically select the one with the most available quota.
const data = await getBusinessAccounts();
const phones = data.phoneNumbers;
// Sort by remaining quota (highest first)
const sortedPhones = phones.sort((a, b) => b.quota.remaining - a.quota.remaining);
// Select the one with the most available quota
const bestPhone = sortedPhones.find(phone => phone.quota.canSend);
if (!bestPhone) {
console.error('No numbers have available quota');
return;
}
console.log(`Using number: ${bestPhone.displayPhoneNumber}`);
console.log(` Remaining quota: ${bestPhone.quota.remaining}`);
console.log(` Phone Number ID: ${bestPhone.phoneNumberId}`);

