P
PUGUH

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

  1. Anda mendaftarkan URL endpoint di PUGUH
  2. Anda berlangganan tipe event tertentu (contoh: user.created)
  3. Saat event terjadi, PUGUH mengirim HTTP POST ke endpoint Anda
  4. 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

  1. Selalu verifikasi tanda tangan untuk mencegah request palsu
  2. Respons dengan cepat menggunakan 200 OK — proses event secara asinkron
  3. Tangani duplikat — gunakan delivery_id untuk idempotency
  4. Gunakan HTTPS untuk URL endpoint Anda

Langkah Selanjutnya