Event asinkron yang tak perlu Anda poll.
POST bertanda tangan HMAC untuk penyelesaian batch, deteksi anomali, dan ambang saldo. Pengiriman at-least-once dengan retry eksponensial.
Daftarkan endpoint
- Buka dashboard → Settings → Webhooks.
- Tambahkan URL endpoint Anda (harus HTTPS).
- Pilih tipe event mana yang ingin dilanggan (atau semua).
- Salin webhook signing secret yang dihasilkan — disimpan sekali, ditampilkan sekali. Gunakan untuk memverifikasi signature.
- Anoman langsung mengirim event uji sehingga Anda bisa memastikan endpoint Anda dapat dijangkau.
Anda dapat mendaftarkan hingga 3 endpoint per pelanggan. Beberapa endpoint menerima event yang sama secara paralel — berguna untuk memisahkan produksi dari mirror staging.
Yang kami kirim saat ini
| Tipe event | Kapan |
|---|---|
batch.completed | Batch job yang diantrekan selesai. Payload menyertakan biaya + penghematan. |
batch.failed | Batch job kehabisan percobaan retry dan tak akan pulih. |
batch.escalated | Job dipromosikan dari batch ke realtime untuk memenuhi SLA. Biaya lebih tinggi. |
anomaly.detected | Z-score atau model ML menandai perilaku tak biasa. Severity ∈ {low, medium, high}. |
balance.threshold | Saldo prabayar melewati ambang saldo rendah yang dikonfigurasi. |
key.budget_warning | Anggaran per key melewati 80% / 90% / 100%. |
guardrail.spike | Ledakan blokir melampaui baseline — kemungkinan serangan atau agent salah konfigurasi. |
Contoh body
Setiap body webhook adalah satu objek JSON dengan key tingkat-atas berikut: event_id, event_type, occurred_at, data, meta.
POST {your-url} — batch.completed
POST {your-url} — anomaly.detected
POST {your-url} — balance.threshold
Selalu verifikasi sebelum memproses
Setiap request webhook membawa dua header:
x-anoman-timestamp— timestamp Unix saat event dikirim.x-anoman-signature— HMAC-SHA256 terenkode hex dari{timestamp}.{raw_body}memakai signing secret Anda.
Selalu: (1) pastikan timestamp berada dalam 5 menit (proteksi replay), (2) hitung ulang HMAC atas body request mentah, (3) bandingkan secara constant-time.
Python — verifikasi signature (FastAPI)
TypeScript — verifikasi (Express)
Node — pengecekan signature minimal
Jangan parse sebelum memverifikasi. Mem-parse JSON lalu men-serialisasi ulang merusak keakuratan byte yang diandalkan HMAC. Verifikasi terhadap byte body mentah; parse hanya setelah signature lolos.
At-least-once
Kami menganggap response 2xx apa pun sebagai sukses. Selain itu (termasuk timeout > 10s) memicu retry dengan jadwal ini:
- Percobaan 1: langsung
- Percobaan 2: 30 detik kemudian
- Percobaan 3: 5 menit kemudian
- Percobaan 4: 1 jam kemudian
- Percobaan 5: 6 jam kemudian (terakhir)
Setelah percobaan ke-5, event dipindahkan ke antrean failed-deliveries (terlihat di dashboard) dan notifikasi webhook.delivery_exhausted terpisah dikirim via email ke admin akun Anda.
Setiap percobaan pengiriman menambah meta.delivery_attempt di payload. Gunakan untuk logging + debug. Karena kami retry pada setiap non-2xx, endpoint Anda harus idempoten:
Python — idempotensi via event_id
Replay + pengiriman manual
- Halaman webhook di dashboard punya tombol “Send test event” yang mengirim payload sintetis untuk tiap tipe event.
- Log pengiriman menampilkan setiap percobaan dengan kode status + body response. Replay percobaan individual mana pun dengan satu klik.
- Untuk pengembangan lokal, gunakan tunnel seperti
ngrokataucloudflared tunneluntuk mengeksposlocalhost:3000lewat HTTPS. Signing secret tetap sama.
Siapkan webhook pertama Anda.
Butuh 60 detik. Event uji gratis untuk memverifikasi koneksi.