Başlanğıc
Bütün sorğular HTTPS üzərindən JSON formatında göndərilir. API cavabları da JSON formatındadır.
https://api.isend.az
Bu sənədləşdirmə yalnız iSend.az-a qoşulmuş rəsmi Meta WhatsApp Business nömrələri üçündür.
Autentifikasiya
API açarı hər sorğunun JSON body hissəsində apikey sahəsi ilə göndərilir.
{
"apikey": "YOUR_API_KEY"
}
API açarını frontend kodunda, açıq repozitoriyada və ya üçüncü şəxslərlə paylaşmayın.
Endpoint-lər
/get-user-package.json
Aktiv paket və limitləri alın
POST
/numbers-list.json
Qoşulmuş Meta nömrələrini alın
POST
/send-message.json
24 saatlıq pəncərədə mesaj göndərin
POST
/send-bulk-message.json
Təsdiqlənmiş Meta şablonu ilə kampaniya yaradın
POST
/campaign-data.json
Kampaniya və alıcı statuslarını alın
/get-user-package.json
İstifadəçinin aktiv paketini, nömrə limitini, mesaj limitini və API/toplu göndəriş icazələrini qaytarır.
Sorğu nümunəsi
curl -X POST https://api.isend.az/get-user-package.json \
-H "Content-Type: application/json" \
-d '{
"apikey": "YOUR_API_KEY"
}'
Uğurlu cavab
{
"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
İstifadəçinin iSend.az hesabına qoşulmuş aktiv rəsmi Meta WhatsApp nömrələrini qaytarır.
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"
}
}
}
Cavabdakı obyekt açarı, məsələn 205, mesaj sorğularında number_id kimi istifadə olunur.
/send-message.json
Müştərinin son mesajından sonra açıq olan 24 saatlıq xidmət pəncərəsində sərbəst mətn və ya media mesajı göndərir.
apikeystringiSend.az kabinetində yaradılmış API açarı.
number_idintegernumbers-list.json cavabından alınan Meta nömrə ID-si.
number_tostringÖlkə kodu ilə, + işarəsi olmadan 10–15 rəqəmli alıcı nömrəsi.
messagestringGöndəriləcək mətn. Maksimum 4096 simvol.
media_urlstringGöndəriləcək şəkil, video və ya sənədin açıq HTTPS ünvanı. Məcburi deyil.
file_namestringSənəd üçün göstəriləcək fayl adı. Məcburi deyil.
Mətn mesajı nümunəsi
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ı."
}'
Media mesajı nümunəsi
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"
}'
Pəncərə bağlıdırsa sərbəst mesaj qəbul edilmir və META_FREE_TEXT_24H_WINDOW_ERROR qaytarılır. Belə halda təsdiqlənmiş Meta şablonundan istifadə edin.
Uğurlu cavab
{
"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
Təsdiqlənmiş Meta mesaj şablonu ilə bir və ya bir neçə alıcı üçün kampaniya yaradır və göndəriş növbəsinə əlavə edir.
template_name və template_language iSend.az hesabında sinxronlaşdırılmış və Meta tərəfindən APPROVED statusu almış şablonla uyğun olmalıdır.
apikeystringiSend.az kabinetində yaradılmış API açarı.
number_idintegernumbers-list.json cavabından alınan Meta nömrə ID-si.
titlestringKampaniyanın iSend.az daxilində görünəcək adı.
template_namestringMeta şablonunun kiçik hərflərlə adı.
template_languagestringŞablonun Meta dil kodu, məsələn az, en_US və ya ru.
recipientsarrayAlıcı nömrələri və hər alıcıya aid dəyişənlər massivi.
Body dəyişənləri və dinamik URL düyməsi nümunəsi
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"
}
}
]
}'
Növbəyə əlavə olunan kampaniya cavabı
{
"success": true,
"provider": "meta",
"campaign_id": 110,
"queued_count": 1,
"message": "Meta template campaign added to queue."
}
variables, header_value və button_values şablonun real komponentləri ilə tam uyğun olmalıdır. Uyğunsuzluq olduqda recipient_index ilə xəta qaytarılır.
/campaign-data.json
Kampaniyaya daxil olan alıcıların cari Meta statuslarını, xəta məlumatlarını və status tarixlərini qaytarır.
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"
}
}
}
Mesaj statusları
Mesaj qəbul edildikdən sonra statuslar Meta webhook hadisələrinə əsasən yenilənir.
acceptedSorğu Meta tərəfindən qəbul edilib və mesaj ID-si yaradılıb.
sentMesaj Meta tərəfindən göndərilib.
deliveredMesaj alıcının WhatsApp cihazına çatdırılıb.
readMesaj alıcı tərəfindən oxunub.
failedMesaj göndərilməyib; error_code və error_message sahələrini yoxlayın.
Xəta kodları
Xəta cavablarında success false olur və error sahəsində sistem kodu qaytarılır.
META_FREE_TEXT_24H_WINDOW_ERROR24 saatlıq xidmət pəncərəsi bağlıdır.META_TEMPLATE_NOT_APPROVEDŞablon tapılmadı və ya Meta tərəfindən təsdiqlənməyib.META_TEMPLATE_VARIABLES_INVALIDŞablon dəyişənləri komponentlərə uyğun deyil.API_NOT_ALLOWEDİstifadəçinin paketində API istifadəsinə icazə yoxdur.MESSAGE_LIMIT_EXCEEDEDPaketin mesaj limiti kifayət etmir.{
"success": false,
"provider": "meta",
"error": "META_TEMPLATE_VARIABLES_INVALID",
"recipient_index": 0
}