Skip to content

Outgoing Webhooks

Outgoing webhooks notify external applications whenever records are created, updated, or deleted in your PocketBase collections.


Event Dispatch & Verification Sequence

sequenceDiagram
    autonumber
    actor Client as Client / Mobile App
    participant PB as PocketBase Database
    participant Hook as Webhook Engine
    participant Ext as External Webhook (Slack / Discord / n8n)

    Client->>PB: POST /api/records/orders
    PB->>PB: Insert record in SQLite (WAL)
    PB->>Hook: Trigger record.create event
    Hook->>Hook: Compute HMAC-SHA256 signature with secret
    Hook->>Ext: POST JSON payload (X-Fuko-Signature header)
    Ext-->>Hook: 200 OK Delivery Acknowledgment
    PB-->>Client: 201 Created Order Confirmation

Webhook Payload Structure

{
"event": "record.create",
"timestamp": "2026-08-18T06:00:00.000Z",
"instance_id": "inst_99x87a1",
"collection": "orders",
"data": {
"id": "rec_01h8q54",
"customer_email": "jane@example.com",
"amount": 149.00,
"status": "paid"
}
}

Verifying HMAC-SHA256 Signatures

Every webhook includes an X-Fuko-Signature header computed using HMAC-SHA256 and your signing secret:

import crypto from 'crypto';
function verifyWebhook(payloadString, signatureHeader, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payloadString)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
}