API Meta-compatible

API ini menerima payload WhatsApp Cloud API yang sama. Ganti base URL, kirim API key Nala, dan token Meta akan diinject dari vault berdasarkan phone_number_id di path.

Kirim satu pesan

curl -X POST https://api.nalasend.id/meta/v20.0/109384756201/messages \
  -H "Authorization: Bearer nala_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "628123456789",
    "type": "text",
    "text": { "body": "Halo" }
  }'

Body diteruskan byte-for-byte. Response sukses adalah response Meta; Nala menambahkan X-Request-Id dan peringatan bila relevan.

Gunakan Authorization: Bearer nala_... untuk SDK Meta dan integrasi server-to-server.

Broadcast lewat API

Kirim X-Nala-Broadcast: true, ganti to dengan recipients, dan tambahkan nala_options:

{
  "messaging_product": "whatsapp",
  "recipients": ["+628123456789", "+628133456789"],
  "type": "template",
  "template": { "name": "promo_lebaran", "language": { "code": "id" } },
  "nala_options": {
    "name": "Promo Lebaran",
    "idempotency_key": "promo-2026"
  }
}

Header X-Nala-Broadcast-Name menang atas nala_options.name, dan Idempotency-Key menang atas nala_options.idempotency_key. Hanya type: text dan type: template yang diterima di mode ini.

Urutan validasi

  1. Ownership nomor — 403 PHONE_NOT_OWNED
  2. Subscription — 402 SUBSCRIPTION_EXPIRED
  3. Entitlement broadcast — 403 ADDON_NOT_ENABLED
  4. Tier 24 jam — 403 MESSAGING_LIMIT_EXCEEDED
  5. Rate limit per nomor — 429 RATE_LIMITED
  6. Kuota pool — 429 QUOTA_EXCEEDED

Single send tetap mengikuti customer service window untuk pesan text. Nala mengirim header peringatan, bukan menebak niat campaign.