API Documentation
Integrasikan WhatsApp ke aplikasimu dengan REST API sederhana. Base URL: https://gateway.embryovault.net
1. Authentication
Semua request ke /api/send/* butuh header Authorization: Bearer <token>. Token didapat dari menu API Tokens di dashboard.
Authorization: Bearer wag_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Token terikat ke user dan (opsional) ke 1 device spesifik. Simpan token seperti password — jangan commit ke git/publish.
2. Kirim Pesan Teks
POST /api/send/text
Request body (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| to | string | ya | Nomor tujuan dengan kode negara tanpa "+". Contoh: 6281234567890 |
| message | string | ya | Isi pesan (max 4096 karakter) |
| device_id | int | tidak | ID device yang dipakai. Opsional jika token sudah terikat ke 1 device. |
Contoh — curl
curl -X POST https://gateway.embryovault.net/api/send/text \
-H "Authorization: Bearer wag_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"to": "6281234567890",
"message": "Halo dari Gateway!"
}'
Contoh — Node.js (fetch)
const res = await fetch('https://gateway.embryovault.net/api/send/text', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + process.env.GATEWAY_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '6281234567890',
message: 'Halo dari Node!'
}),
});
const data = await res.json();
console.log(data);
Contoh — PHP
<?php
$ch = curl_init('https://gateway.embryovault.net/api/send/text');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('GATEWAY_TOKEN'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'to' => '6281234567890',
'message' => 'Halo dari PHP!',
]),
]);
$res = curl_exec($ch);
curl_close($ch);
echo $res;
Contoh — Python
import requests, os
r = requests.post(
'https://gateway.embryovault.net/api/send/text',
headers={'Authorization': 'Bearer ' + os.environ['GATEWAY_TOKEN']},
json={'to': '6281234567890', 'message': 'Halo dari Python!'},
)
print(r.json())
Response sukses (200)
{
"ok": true,
"message_id": 123,
"wa_message_id": "3EB0C431F...4E5"
}
Response error
| HTTP | error | Penyebab |
|---|---|---|
| 400 | invalid_input | Field to / message tidak valid |
| 400 | no_connected_device | Belum ada device terkoneksi di akunmu |
| 401 | missing_token / invalid_token | Bearer token tidak valid / sudah di-revoke |
| 404 | device_not_found | device_id tidak ada / bukan milikmu |
| 409 | device_not_connected | Device ada tapi belum connected (scan QR dulu) |
| 429 | quota_exceeded | Kuota bulanan habis |
| 500 | send_failed | Error dari WhatsApp (lihat field detail) |
3. Format Nomor Tujuan
- Pakai format internasional tanpa
+, tanpa spasi, tanpa strip. - Contoh Indonesia:
6281234567890(bukan081234567890atau+62 812...). - Grup WhatsApp: belum didukung di v0.1 (segera).
4. Rate Limit & Best Practice
- Jeda antar pesan: kasih delay 2–5 detik antar kirim ke nomor berbeda untuk kurangi risiko banned WhatsApp.
- Blast/broadcast: hindari kirim pesan identik ke 100+ nomor dalam waktu singkat — WhatsApp akan flag akun.
- Opt-in: hanya kirim ke nomor yang sudah memberikan consent (UU PDP Indonesia).
- Reconnect: kalau status device jadi
disconnected, buka dashboard → klik Connect. Session biasanya otomatis pulih. - Disclaimer: Gateway menggunakan WhatsApp Web protocol tidak resmi. Ada risiko banned (kecil tapi nyata). Pakai nomor terpisah dari nomor pribadi utama.
5. Webhook Incoming (Segera — v0.3)
Balasan customer akan dikirim ke URL webhook yang kamu daftarkan. Format payload:
POST https://yourapp.com/webhook
X-Gateway-Signature: sha256=...
Content-Type: application/json
{
"event": "message.received",
"device_id": 1,
"from": "6281234567890",
"type": "text",
"body": "Balasan dari customer",
"timestamp": 1777000000
}
6. Kirim Media (Segera — v0.2)
Endpoint POST /api/send/image, /api/send/document, /api/send/audio.