Mulai dari sini untuk menghubungkan nomor WhatsApp dan mendapatkan token.
Dokumentasi API
Format request/response API ini mengikuti gaya Fonnte: token dikirim lewat header
Authorization (tanpa awalan "Bearer"), dan tiap nomor WhatsApp punya token
sendiri.
Kirim pesan teks ke satu atau beberapa nomor tujuan.
POSTsend
curl -X POST send \
-H "Authorization: TOKEN_NOMOR_ANDA" \
-H "Content-Type: application/json" \
-d '{
"target": "6285226061579,6281234567890",
"message": "Halo, ini pesan tes"
}'
Header Authorization |
Required | Token milik nomor pengirim (didapat dari halaman /device setelah scan QR) |
|---|---|---|
| target | Required | Nomor tujuan, gunakan kode negara. Beberapa nomor dipisah koma. Contoh: 6281223xxxx,6281223yyyy |
| message | Required | Isi pesan teks |
| inboxid | Optional | Id pesan masuk yang sedang dibalas (field inboxid dari
payload webhook, lihat bagian Webhook di bawah). Kalau dikirim dan masih dikenali
gateway, balasan dikirim langsung ke chat asal pesan itu — lebih tahan terhadap
migrasi identitas @lid WhatsApp dibanding hanya
mengandalkan target. Tidak dikenali/kedaluwarsa? otomatis
jatuh kembali ke target, tanpa error. |
Contoh response sukses:
{
"status": true,
"detail": "success! message sent",
"device": "6285640431181",
"results": [
{ "target": "6285226061579", "status": true, "id": "3EB0XXXXXXXXXXXXXXXX" }
]
}
Contoh response gagal (token salah):
{
"status": false,
"reason": "invalid token"
}
Kirim gambar/video/audio/dokumen ke satu atau beberapa nomor tujuan — dari URL publik, atau upload file langsung.
POSTsend-media
Cara 1 — dari URL:
curl -X POST send-media \
-H "Authorization: TOKEN_NOMOR_ANDA" \
-H "Content-Type: application/json" \
-d '{
"target": "6285226061579",
"url": "https://situs-anda.com/gambar.jpg",
"caption": "Ini fotonya",
"type": "image"
}'
Cara 2 — upload file langsung (multipart/form-data):
curl -X POST send-media \
-H "Authorization: TOKEN_NOMOR_ANDA" \
-F "target=6285226061579" \
-F "caption=Ini fotonya" \
-F "type=image" \
-F "file=@/path/ke/gambar.jpg"
Header Authorization |
Required | Token milik nomor pengirim |
|---|---|---|
| target | Required | Nomor tujuan, beberapa nomor dipisah koma |
| url | Required jika file tidak dikirim |
Link media publik, akan diunduh dulu oleh server |
| file | Required jika url tidak dikirim |
File media, dikirim langsung sebagai multipart/form-data
(field name file). Kalau keduanya dikirim, file yang dipakai. |
| type | Optional | image, video,
audio, atau document —
kalau tidak diisi, dideteksi otomatis dari Content-Type
|
| filename | Optional | Nama file, dipakai untuk dokumen (upload langsung memakai nama file asli kalau tidak diisi) |
| caption | Optional | Tidak berlaku untuk audio |
| inboxid | Optional | Sama seperti pada /send di atas — balas langsung ke chat
asal pesan, tahan terhadap migrasi @lid. |
Tidak ada batasan ukuran file secara default (bisa diatur lewat env
MAX_MEDIA_MB di server kalau perlu).
Setiap kali nomor ini menerima pesan baru dari orang lain, aplikasi akan mem-forward (POST) data pesan tersebut ke URL webhook yang Anda daftarkan.
POSTwebhook
curl -X POST webhook \
-H "Authorization: TOKEN_NOMOR_ANDA" \
-H "Content-Type: application/json" \
-d '{ "url": "https://situs-anda.com/endpoint-webhook" }'
Kirim "url": "" (string kosong) untuk menonaktifkan webhook.
Cek konfigurasi webhook saat ini:
GETwebhook
curl webhook \
-H "Authorization: TOKEN_NOMOR_ANDA"
{
"device": "6285640431181",
"sender": "6281234567890",
"message": "isi pesan dari lawan chat",
"text": null,
"member": null,
"name": "Nama Pengirim",
"location": null,
"pollname": null,
"choices": null,
"timestamp": 1700000000,
"inboxid": "3EB0XXXXXXXXXXXXXXXX",
"url": null,
"filename": null,
"extension": null
}
Catatan field, sama seperti dokumentasi Fonnte:
sender — nomor lawan chat untuk chat pribadi, atau id
grup untuk pesan grup (isi target dengan nilai ini kalau membalas lewat
/send).member — hanya terisi kalau pesan berasal dari grup: nomor
pengirim di dalam grup tersebut.text — teks tombol/list yang dipilih (kalau pesan adalah balasan
tombol/list).location — "latitude,longitude" kalau
pesan berupa share lokasi.pollname / choices — nama polling dan
pilihannya (dipisah koma) kalau pesan berupa polling.inboxid — id pesan masuk ini. Kirim balik sebagai field
opsional inboxid di /send atau
/send-media untuk membalas langsung ke chat asal pesan ini,
alih-alih membangun ulang alamat dari nomor telepon di target —
lebih tahan terhadap migrasi identitas @lid WhatsApp. Kalau
inboxid tidak dikirim, tidak dikenali, atau sudah kedaluwarsa
dari log internal gateway, permintaan otomatis jatuh kembali memakai
target seperti biasa — tidak ada error, tidak perlu retry
manual.url / filename / extension — attachment (gambar/video/audio/dokumen/stiker) pesan
masuk. Hanya terisi kalau env PUBLIC_BASE_URL diset di server;
kalau tidak, selalu null (attachment tidak diunduh sama sekali).
Pesan dari grup WhatsApp diabaikan secara default —
tidak diteruskan ke webhook sama sekali (bisa diaktifkan lewat env
IGNORE_GROUP_MESSAGES=false di server).