REST API v1

Dokumentasi WhatsApp Gateway API

Dokumentasi REST API WACatalyst untuk mengirim pesan WhatsApp dari aplikasi Anda sendiri.

cURLHTMLJavaScriptNode.jsNext.jsPHPPythonGoRustJavaC#Dart

Base URL

https://api.cadinus.com

Semua endpoint memakai format JSON dan berbagi base URL yang sama.

Autentikasi

x-api-key: YOUR_API_KEY

API key dibuat sendiri di dashboard setelah mendaftar, pada menu API Keys. Header Authorization: Bearer juga diterima.

Mulai cepat

Contoh berikut memanggil /api/v1/send/text. Ganti YOUR_API_KEY dengan kunci Anda, lalu jalankan apa adanya โ€” pilih tab bahasa yang Anda pakai.

curl -X POST "https://api.cadinus.com/api/v1/send/text" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "phone": "6289876543210",
  "sender": "6281234567890",
  "message": "Halo, pesanan Anda sudah kami terima."
}'

Autentikasi

1 endpoint
GET/api/v1/

Cek koneksi dan API key

Endpoint paling sederhana untuk memastikan alamat server dan API key sudah benar sebelum menyusun alur otomatisasi. Kirim API key pada header x-api-key. Semua endpoint lain memakai header yang sama.

Request body
{
  "headers": {
    "x-api-key": "API_KEY_ANDA"
  }
}
Contoh response
{
  "status": "online",
  "message": "Welcome to WA API Gateway V1"
}
curl -X GET "https://api.cadinus.com/api/v1/" \
  -H "x-api-key: YOUR_API_KEY"

Perangkat

2 endpoint
GET/api/v1/devices

Daftar perangkat

Menampilkan seluruh nomor WhatsApp yang terhubung pada akun Anda beserta statusnya. Nilai device_id dari sini dipakai sebagai isi field sender saat mengirim pesan.

Contoh response
{
  "data": [
    {
      "name": "Nomor Layanan",
      "status": "connected",
      "device_id": "6281234567890"
    }
  ]
}
curl -X GET "https://api.cadinus.com/api/v1/devices" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/check-number

Periksa nomor terdaftar di WhatsApp

Memeriksa apakah sebuah nomor terdaftar di WhatsApp sebelum pesan dikirim. Berguna untuk menyaring daftar penerima dan menekan risiko pemblokiran. Parameter dikirim lewat query string, bukan body.

Request body
{
  "query": {
    "phone": "6289876543210",
    "device_id": "6281234567890"
  }
}
Contoh response
{
  "data": {
    "phone": "6289876543210",
    "is_registered": true
  }
}
curl -X GET "https://api.cadinus.com/api/v1/check-number" \
  -H "x-api-key: YOUR_API_KEY"

Kirim Pesan

7 endpoint
POST/api/v1/send/text

Kirim pesan teks

Endpoint yang paling sering dipakai. Field sender diisi device_id perangkat pengirim; jika hanya ada satu perangkat, field device_id dapat dipakai sebagai penggantinya. Nomor berawalan 08 otomatis diubah menjadi 62. Respons dikembalikan segera setelah pesan masuk antrean, bukan setelah pesan sampai ke penerima.

Request body
{
  "phone": "6289876543210",
  "sender": "6281234567890",
  "message": "Halo, pesanan Anda sudah kami terima."
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Pesan teks masuk antrean",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/text" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "phone": "6289876543210",
  "sender": "6281234567890",
  "message": "Halo, pesanan Anda sudah kami terima."
}'
POST/api/v1/send/image

Kirim gambar

Gambar dapat dikirim lewat url yang dapat diakses publik, atau lewat base64. Isi salah satu saja. Field caption bersifat opsional.

Request body
{
  "url": "https://contoh.com/gambar.jpg",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Struk pembayaran"
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Media sedang diproses di background (FFmpeg/Upload)",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/image" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://contoh.com/gambar.jpg",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Struk pembayaran"
}'
POST/api/v1/send/document

Kirim dokumen

Mengirim berkas seperti PDF atau Excel. Field filename menentukan nama berkas yang terlihat oleh penerima; jika dikosongkan, nama diambil dari URL.

Request body
{
  "url": "https://contoh.com/invoice.pdf",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Invoice bulan ini",
  "filename": "Invoice-2026-001.pdf"
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Media sedang diproses di background (FFmpeg/Upload)",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/document" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://contoh.com/invoice.pdf",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Invoice bulan ini",
  "filename": "Invoice-2026-001.pdf"
}'
POST/api/v1/send/video

Kirim video

Bentuk permintaan sama dengan pengiriman gambar. Video diproses lebih dulu di latar belakang, sehingga jeda sampai pesan terkirim bisa lebih lama daripada pesan teks.

Request body
{
  "url": "https://contoh.com/video.mp4",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Panduan singkat"
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Media sedang diproses di background (FFmpeg/Upload)",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/video" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://contoh.com/video.mp4",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "caption": "Panduan singkat"
}'
POST/api/v1/send/audio

Kirim audio

Mengirim berkas audio. Bentuk permintaan sama dengan pengiriman gambar, dengan url atau base64 sebagai sumber berkas.

Request body
{
  "url": "https://contoh.com/suara.mp3",
  "phone": "6289876543210",
  "sender": "6281234567890"
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Media sedang diproses di background (FFmpeg/Upload)",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/audio" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://contoh.com/suara.mp3",
  "phone": "6289876543210",
  "sender": "6281234567890"
}'
POST/api/v1/send/location

Kirim lokasi

Mengirim titik koordinat yang tampil sebagai peta di WhatsApp. Tersedia mulai paket Basic.

Request body
{
  "name": "Kantor Pusat",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "latitude": -6.2,
  "longitude": 106.816666
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Pesan location masuk antrean",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/location" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Kantor Pusat",
  "phone": "6289876543210",
  "sender": "6281234567890",
  "latitude": -6.2,
  "longitude": 106.816666
}'
POST/api/v1/send/buttons

Kirim pesan dengan tombol

Mengirim pesan berisi tombol pilihan. Jawaban penerima diterima kembali lewat webhook message_received. Tersedia mulai paket Premium.

Request body
{
  "phone": "6289876543210",
  "sender": "6281234567890",
  "buttons": [
    {
      "id": "ya",
      "text": "Setuju"
    },
    {
      "id": "tidak",
      "text": "Batalkan"
    }
  ],
  "message": "Konfirmasi pesanan Anda"
}
Contoh response
{
  "id": "3EB0X1234567890ABCDEF",
  "info": "Pesan buttons masuk antrean",
  "status": "success"
}
curl -X POST "https://api.cadinus.com/api/v1/send/buttons" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "phone": "6289876543210",
  "sender": "6281234567890",
  "buttons": [
    {
      "id": "ya",
      "text": "Setuju"
    },
    {
      "id": "tidak",
      "text": "Batalkan"
    }
  ],
  "message": "Konfirmasi pesanan Anda"
}'

Webhook

3 endpoint
PUT/api/v1/settings/webhooks

Atur URL webhook

Menentukan daftar URL tujuan pengiriman event. Untuk n8n, isi dengan URL Production dari node Webhook. Jumlah URL dibatasi paket: Basic 1, Premium 3, Enterprise 10. Melebihi batas menghasilkan kode 403.

Request body
{
  "webhooks": [
    "https://n8n-anda.com/webhook/wa-masuk"
  ]
}
Contoh response
{
  "status": "success",
  "message": "Webhook berhasil diperbarui"
}
curl -X PUT "https://api.cadinus.com/api/v1/settings/webhooks" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "webhooks": [
    "https://n8n-anda.com/webhook/wa-masuk"
  ]
}'
POST/api/v1/webhooks/test

Uji kiriman webhook

Mengirim satu contoh event ke URL webhook Anda tanpa menunggu pesan sungguhan masuk. Berguna untuk memastikan node Webhook n8n sudah menerima data dengan benar.

Request body
{
  "url": "https://n8n-anda.com/webhook/wa-masuk"
}
Contoh response
{
  "status": "success",
  "duration_ms": 143,
  "status_code": 200
}
curl -X POST "https://api.cadinus.com/api/v1/webhooks/test" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://n8n-anda.com/webhook/wa-masuk"
}'
POSTPayload dikirim ke URL Anda

Bentuk data pesan masuk

Ini BUKAN endpoint yang Anda panggil, melainkan bentuk JSON yang dikirim sistem ke URL webhook Anda sebagai HTTP POST. Di n8n, data ini muncul pada keluaran node Webhook di dalam properti body. Nilai event dapat berupa message_received, message_status, device_disconnected, atau device_logout. Field device_id berisi nomor perangkat Anda, sedangkan contact berisi nomor lawan bicara.

Contoh response
{
  "data": {
    "id": "3EB0X1234567890ABCDEF",
    "type": "text",
    "message": "Halo, apakah masih tersedia?"
  },
  "event": "message_received",
  "contact": "6289876543210",
  "device_id": "6281234567890",
  "timestamp": "2026-08-15T10:30:00+07:00"
}
curl -X POST "https://api.cadinus.com/Payload dikirim ke URL Anda" \
  -H "x-api-key: YOUR_API_KEY"

Riwayat

2 endpoint
GET/api/v1/messages

Riwayat pesan

Menampilkan riwayat pesan masuk dan keluar. Lama penyimpanan mengikuti paket, dari 3 hari pada Free sampai 90 hari pada Enterprise.

Request body
{
  "query": {
    "limit": 50,
    "device_id": "6281234567890"
  }
}
Contoh response
{
  "data": [
    {
      "id": "3EB0X1234567890ABCDEF",
      "type": "text",
      "status": "delivered",
      "contact": "6289876543210",
      "message": "Halo",
      "device_id": "6281234567890",
      "direction": "in",
      "created_at": "2026-08-15T10:30:00+07:00"
    }
  ]
}
curl -X GET "https://api.cadinus.com/api/v1/messages" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/messages/stats

Ringkasan pemakaian

Menampilkan jumlah pesan terkirim dan sisa kuota pada periode langganan berjalan. Berguna untuk memantau kuota secara otomatis sebelum menjalankan pengiriman massal.

Contoh response
{
  "data": {
    "sent": 128,
    "limit": 1000,
    "remaining": 872
  }
}
curl -X GET "https://api.cadinus.com/api/v1/messages/stats" \
  -H "x-api-key: YOUR_API_KEY"

Publik

2 endpoint
GET/api/v1/company

Profil layanan

Endpoint publik tanpa API key. Dipakai landing page untuk menampilkan profil layanan.

Contoh response
{
  "data": {
    "description": "WhatsApp API Gateway untuk mengirim dan menerima pesan lewat REST API dan webhook.",
    "company_name": "WACatalyst"
  }
}
curl -X GET "https://api.cadinus.com/api/v1/company" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/plans

Daftar paket

Endpoint publik tanpa API key. Menampilkan seluruh paket aktif beserta batas dan fitur masing-masing.

Contoh response
{
  "data": [
    {
      "code": "free",
      "name": "Free",
      "price": 0,
      "max_devices": 1,
      "duration_days": 7,
      "message_limit": 50
    }
  ]
}
curl -X GET "https://api.cadinus.com/api/v1/plans" \
  -H "x-api-key: YOUR_API_KEY"

Siap mengintegrasikan WhatsApp ke aplikasi Anda?

Buat akun, hubungkan perangkat lewat QR, terbitkan API key, dan kirim pesan pertama Anda dalam hitungan menit. Butuh kebutuhan khusus? Tim kami menyusun paket sesuai volume dan fitur yang Anda pakai.