Webhooks & Real-time Events
Arsitektur B2B Crevir sangat tidak merekomendasikan klien melakukan penarikan data berulang (long polling) secara konstan. Sebaliknya, kami menyediakan sistem Webhooks tangguh yang akan secara proaktif mendorong (push) data seketika (real-time) ke sistem server Anda manakala terjadi perubahan event yang kritikal.
Webhooks sangat esensial untuk melacak status kampanye dan memantau rilis dana Escrow tanpa menabrak batas Rate Limit.
Pendaftaran Webhook
Untuk saat ini, URL Webhook Endpoint (sistem tujuan) harus Anda daftarkan secara manual pada Console > Settings > Developer.
- Sistem Anda harus mampu merespons panggilan kami dengan HTTP
200 OKdalam kurun waktu 3 detik. - Apabila gagal (Timeout atau menerima kode HTTP 4xx/5xx), infrastruktur Crevir akan mencoba ulang (Retry) pengiriman payload dengan jeda eksponensial maksimal hingga 3 kali.
Payload Event Standar
Setiap HTTP POST yang dikirimkan Crevir ke server Anda akan memiliki skema JSON seragam yang dibungkus oleh meta type:
{
"id": "evt_9bA2z8Xq",
"type": "campaign.matched",
"created_at": "2026-07-21T10:05:22Z",
"data": {
"campaign_id": "cmp_8z7XbQwe",
"creator_id": "cre_9x8B2jKl"
}
}
Daftar Event yang Didukung
| Nama Event | Keterangan |
|---|---|
campaign.matched | Algoritma (atau konfirmasi manual) telah mengunci kreator ke kampanye Anda. |
draft.submitted | Kreator telah mengunggah pratinjau tautan konten sebelum tayang publik. |
escrow.released | Dana kampanye di rekening penampungan telah otomatis dicairkan ke kreator. |
Memvalidasi Keamanan Webhook
Mengingat infrastruktur Anda akan terekspos ke publik, sangat berbahaya apabila URL Webhook Anda dieksekusi oleh peretas (Bad Actor) yang berpura-pura menjadi server Crevir.
Untuk mencegah eksploitasi, setiap pengiriman Webhook dari Crevir selalu ditandatangani (Signed) menggunakan kriptografi berbasis HMAC-SHA256.
Tanda tangan ini dilekatkan pada Header HTTP bernama: Crevir-Signature.
Verifikasi Signature (Contoh Node.js)
Gunakan Webhook Secret Key yang diberikan pada Console untuk memverifikasi integritas payload mentah (Raw Body).
const crypto = require('crypto');
function verifyCrevirWebhook(rawBody, signatureHeader, secretKey) {
// 1. Ekstrak timestamp (t=) dan signature (v1=) dari header
// Header contoh: "t=1784617489,v1=a1b2c3d4..."
const elements = signatureHeader.split(',');
const timestamp = elements[0].split('=')[1];
const signature = elements[1].split('=')[1];
// 2. Cegah Replay Attacks (Tolak request yang usianya > 5 menit)
const currentTimestamp = Math.floor(Date.now() / 1000);
if (currentTimestamp - timestamp > 300) {
throw new Error("Webhook Kadaluarsa (Kemungkinan Replay Attack)");
}
// 3. Susun data payload yang ditandatangani
const signedPayload = `${timestamp}.${rawBody}`;
// 4. Hitung HMAC-SHA256
const expectedSignature = crypto
.createHmac('sha256', secretKey)
.update(signedPayload)
.digest('hex');
// 5. Bandingkan dengan aman
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature))) {
throw new Error("Signature Webhook Tidak Valid");
}
return true; // Webhook Aman untuk Diproses
}
[!WARNING] Pastikan Anda menggunakan Raw Body Text (buffer asli HTTP) saat melakukan perhitungan hash, bukan hasil JSON yang sudah di-parse (misal: bukan dari
req.bodyjika Anda menggunakanbody-parserotomatis di Express). Menggunakan objek yang di-parse akan menyebabkan kegagalan pencocokan hash akibat perubahan whitespace.