Buat Webhook Pertama Anda
Webhook memungkinkan aplikasi Anda menerima notifikasi real-time saat event terjadi di PUGUH — seperti pendaftaran user, perubahan organisasi, atau event billing.
Cara Kerja Webhook
- Anda mendaftarkan URL endpoint di PUGUH
- Anda berlangganan tipe event tertentu (contoh:
user.created) - Saat event terjadi, PUGUH mengirim HTTP POST ke endpoint Anda
- Server Anda memproses event dan mengembalikan
200 OK
Membuat Webhook Endpoint
Via API
bash
curl -X POST https://api-puguh.arsaka.io/webhooks/endpoints \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Organization-ID: YOUR_ORG_ID" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks/puguh",
"events": ["user.created", "member.invited", "auth.login"],
"description": "My first webhook"
}' Respons:
json
{
"id": "wh-uuid",
"url": "https://your-app.com/webhooks/puguh",
"events": ["user.created", "member.invited", "auth.login"],
"description": "My first webhook",
"secret": "whsec_xxxxxxxxxxxxxxxx",
"is_active": true,
"created_at": "2026-02-20T10:00:00Z"
} Important
secret hanya ditampilkan sekali saat pembuatan. Simpan dengan aman — Anda membutuhkannya untuk memverifikasi tanda tangan webhook.
Event yang Tersedia
| Event | Deskripsi |
|---|---|
user.created | User baru terdaftar |
user.updated | Profil user diperbarui |
member.invited | Anggota diundang ke organisasi |
member.joined | Anggota menerima undangan |
member.removed | Anggota dihapus dari organisasi |
organization.created | Organisasi baru dibuat |
auth.login | User berhasil login |
auth.password_changed | Password diubah |
billing.subscription.created | Langganan baru dimulai |
billing.invoice.paid | Pembayaran invoice diterima |
Menerima Webhook
PUGUH mengirim request POST dengan body JSON:
json
{
"event": "user.created",
"timestamp": "2026-02-20T10:30:00Z",
"data": {
"user_id": "usr-uuid",
"email": "new-user@example.com",
"full_name": "John Doe"
},
"webhook_id": "wh-uuid",
"delivery_id": "del-uuid"
} Memverifikasi Tanda Tangan
Selalu verifikasi header X-Puguh-Signature untuk memastikan request berasal dari PUGUH:
Python
python
import hmac
import hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature) TypeScript
typescript
import { createHmac, timingSafeEqual } from 'crypto';
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
const expected = `sha256=${createHmac('sha256', secret).update(payload).digest('hex')}`;
return timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
} Batas Webhook per Paket
| Paket | Maks Endpoint | Fitur |
|---|---|---|
| Free | 3 | Pengiriman dasar |
| Pro | 10 | + Retry otomatis |
| Business | 25 | + Pengiriman terjamin |
| Enterprise | Unlimited | + Pengiriman terjamin |
Praktik Terbaik
- Selalu verifikasi tanda tangan untuk mencegah request palsu
- Respons dengan cepat menggunakan
200 OK— proses event secara asinkron - Tangani duplikat — gunakan
delivery_iduntuk idempotency - Gunakan HTTPS untuk URL endpoint Anda