Начало работы
Все запросы отправляются по HTTPS в формате JSON. Ответы API также возвращаются в формате JSON.
https://api.isend.az
Эта документация относится только к официальным номерам Meta WhatsApp Business, подключённым к iSend.az.
Аутентификация
API-ключ передаётся в JSON-теле каждого запроса в поле apikey.
{
"apikey": "YOUR_API_KEY"
}
Не размещайте API-ключ во frontend-коде, открытых репозиториях и не передавайте его третьим лицам.
Эндпоинты
/get-user-package.json
Получить активный тариф и лимиты
POST
/numbers-list.json
Получить подключённые номера Meta
POST
/send-message.json
Отправить сообщение в 24-часовом окне
POST
/send-bulk-message.json
Создать кампанию с одобренным шаблоном Meta
POST
/campaign-data.json
Получить статусы кампании и получателей
/get-user-package.json
Возвращает активный тариф пользователя, лимит номеров, лимит сообщений и разрешения API/массовой отправки.
Пример запроса
curl -X POST https://api.isend.az/get-user-package.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY"
}'
Успешный ответ
{
"success": true,
"package": {
"id": 4,
"num_limit": 3,
"num_used": 2,
"msg_limit": 5000,
"msg_used": 318,
"allow_bulk": true,
"allow_api": true,
"is_unlimited": 0
}
}
/numbers-list.json
Возвращает активные официальные номера Meta WhatsApp, подключённые к аккаунту пользователя iSend.az.
curl -X POST https://api.isend.az/numbers-list.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY"
}'
{
"success": true,
"numbers": {
"205": {
"number": "994501234567",
"provider": "meta",
"status": "active",
"meta_status": "connected",
"verified_name": "ERAsoft"
}
}
}
Ключ объекта в ответе, например 205, используется как number_id в запросах отправки сообщений.
/send-message.json
Отправляет свободный текст или медиа в 24-часовом окне обслуживания, открытом после последнего сообщения клиента.
apikeystringAPI-ключ, созданный в панели iSend.az.
number_idintegerID номера Meta, полученный из ответа numbers-list.json.
number_tostringНомер получателя с кодом страны, 10–15 цифр, без знака +.
messagestringТекст сообщения. Максимум 4096 символов.
media_urlstringПубличный HTTPS-адрес изображения, видео или документа. Необязательно.
file_namestringИмя файла, отображаемое для документа. Необязательно.
Пример текстового сообщения
curl -X POST https://api.isend.az/send-message.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY",
"number_id": 205,
"number_to": "994771234567",
"message": "Salam, müraciətiniz qeydə alındı."
}'
Пример медиа-сообщения
curl -X POST https://api.isend.az/send-message.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY",
"number_id": 205,
"number_to": "994771234567",
"message": "Fayl əlavə olunur.",
"media_url": "https://example.com/files/document.pdf",
"file_name": "document.pdf"
}'
Если окно закрыто, свободное сообщение отклоняется с ошибкой META_FREE_TEXT_24H_WINDOW_ERROR. Используйте одобренный шаблон Meta.
Успешный ответ
{
"success": true,
"provider": "meta",
"campaign_id": 102,
"recipient_id": 5001,
"message_id": 8001,
"meta_message_id": "wamid.HBgL...",
"status": "accepted",
"message": "Your message was accepted by Meta."
}
/send-bulk-message.json
Создаёт кампанию для одного или нескольких получателей с использованием одобренного шаблона Meta и добавляет её в очередь отправки.
template_name и template_language должны соответствовать шаблону, синхронизированному в iSend.az и одобренному Meta.
apikeystringAPI-ключ, созданный в панели iSend.az.
number_idintegerID номера Meta, полученный из ответа numbers-list.json.
titlestringНазвание кампании, отображаемое в iSend.az.
template_namestringИмя шаблона Meta в нижнем регистре.
template_languagestringКод языка шаблона Meta, например az, en_US или ru.
recipientsarrayМассив номеров получателей и индивидуальных переменных.
Пример переменных body и динамической URL-кнопки
curl -X POST https://api.isend.az/send-bulk-message.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY",
"number_id": 205,
"title": "Sifariş məlumatları",
"template_name": "sifaris_melumati",
"template_language": "az",
"recipients": [
{
"number_to": "994771234567",
"variables": {
"{{1}}": "Elvin",
"{{2}}": "TS-310111",
"{{3}}": "Təsdiqləndi"
},
"button_values": {
"0": "TS-310111"
}
}
]
}'
Ответ кампании, добавленной в очередь
{
"success": true,
"provider": "meta",
"campaign_id": 110,
"queued_count": 1,
"message": "Meta template campaign added to queue."
}
variables, header_value и button_values должны точно соответствовать компонентам шаблона. При несоответствии возвращается ошибка с recipient_index.
/campaign-data.json
Возвращает текущие статусы Meta, сведения об ошибках и время изменения статусов получателей кампании.
curl -X POST https://api.isend.az/campaign-data.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY",
"campaign_id": 110
}'
{
"success": true,
"data": {
"5001": {
"provider": "meta",
"number_from": "994501234567",
"number_to": "994771234567",
"message": "Template preview",
"meta_status": "delivered",
"error_code": "",
"error_message": "",
"is_sent": 1,
"sent_at": "2026-07-18 11:10:07",
"delivered_at": "2026-07-18 11:10:10",
"read_at": null,
"failed_at": null,
"created_at": "2026-07-18 11:10:05"
}
}
}
Статусы сообщений
После принятия сообщения статусы обновляются на основе webhook-событий Meta.
acceptedЗапрос принят Meta, и создан ID сообщения.
sentСообщение отправлено Meta.
deliveredСообщение доставлено на WhatsApp-устройство получателя.
readСообщение прочитано получателем.
failedСообщение не отправлено; проверьте error_code и error_message.
Коды ошибок
В ответах с ошибкой success имеет значение false, а системный код возвращается в поле error.
META_FREE_TEXT_24H_WINDOW_ERROR24-часовое окно обслуживания закрыто.META_TEMPLATE_NOT_APPROVEDШаблон не найден или не одобрен Meta.META_TEMPLATE_VARIABLES_INVALIDПеременные шаблона не соответствуют компонентам.API_NOT_ALLOWEDВ тарифе пользователя не разрешён доступ к API.MESSAGE_LIMIT_EXCEEDEDВ тарифе недостаточно доступного лимита сообщений.{
"success": false,
"provider": "meta",
"error": "META_TEMPLATE_VARIABLES_INVALID",
"recipient_index": 0
}