2. Kirim notifikasi
POST /api/v1/notifications — kirim pesan WhatsApp ke satu nomor.
| Field | Wajib | Keterangan |
| to | Ya | Nomor tujuan. Format internasional tanpa +: 62812… (08… juga diterima) |
| message | Ya* | Isi pesan langsung. *Atau kosongkan jika memakai template + event |
| event | Ya* | Nama event template, mis. payment.completed. *Wajib jika message kosong |
| data | Tidak | Object untuk mengisi placeholder template {{amount}}, {{name}}, dll. |
| metadata | Tidak | Data tambahan untuk log (order_id, source, dll.) |
Contoh — pesan langsung
curl -X POST https://retention.id/api/v1/notifications \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"message": "Halo! Pembayaran Anda berhasil.",
"event": "payment.completed",
"metadata": { "order_id": "INV-1001" }
}'
const res = await fetch("https://retention.id/api/v1/notifications", {
method: "POST",
headers: {
"Authorization": "Bearer sk_live_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
to: "628123456789",
message: "Halo! Pembayaran Anda berhasil.",
event: "payment.completed",
metadata: { order_id: "INV-1001" },
}),
});
const data = await res.json();
console.log(data);
$ch = curl_init("https://retention.id/api/v1/notifications");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer sk_live_YOUR_KEY",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"to" => "628123456789",
"message" => "Halo! Pembayaran Anda berhasil.",
"event" => "payment.completed",
"metadata" => ["order_id" => "INV-1001"],
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
import requests
r = requests.post(
"https://retention.id/api/v1/notifications",
headers={
"Authorization": "Bearer sk_live_YOUR_KEY",
"Content-Type": "application/json",
},
json={
"to": "628123456789",
"message": "Halo! Pembayaran Anda berhasil.",
"event": "payment.completed",
"metadata": {"order_id": "INV-1001"},
},
)
print(r.status_code, r.json())
Response sukses (201)
{
"id": "c1a2b3…",
"status": "sent",
"event": "payment.completed",
"to": "628123456789",
"message_preview": "Halo! Pembayaran Anda berhasil.",
"created_at": "2026-07-14T05:00:00Z"
}
3. Template pesan (event-driven)
Buat template di dashboard (Templates), lalu kirim hanya event + data — Retention merender pesan otomatis.
Contoh template untuk event payment.completed:
Halo {{name}}!
Pembayaran sebesar Rp {{amount}} telah berhasil.
No. Invoice: {{invoice}}
{
"to": "628123456789",
"event": "payment.completed",
"data": {
"name": "Budi",
"amount": "150.000",
"invoice": "INV-1001"
}
}
Placeholder memakai sintaks {{key}} sesuai field di data.
4. Webhook inbound (Integrasi)
Cocok untuk n8n, Make, Zapier, Cekrek, kasir, atau sistem yang push HTTP. Buat Integrasi di dashboard — Anda mendapat URL unik:
POST https://retention.id/api/webhooks/inbound/{webhookToken}
Tidak perlu Bearer token — keamanan ada di webhookToken rahasia di URL.
| Field | Wajib | Keterangan |
| event | Ya | Harus ada di allowed events integrasi (atau *) |
| to | Ya | Nomor WhatsApp tujuan |
| data | Tidak | Data untuk merender template event |
curl -X POST "https://retention.id/api/webhooks/inbound/whk_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"event": "payment.completed",
"to": "628123456789",
"data": { "name": "Budi", "amount": "150.000" }
}'
Cara pakai di tools populer
- n8n / Make / Zapier — node HTTP Request, method POST, URL inbound, body JSON di atas.
- Kasir / POS — panggil webhook saat transaksi sukses; isi
to dari nomor pelanggan.
- Laravel / WordPress / WooCommerce — hook setelah order paid, kirim POST ke inbound URL.