Webhook payload explorer
What actually arrives at your endpoint. Copy any example as a
signed curl command to test your handler right now, or
open it in the signature verifier.
purchase
purchase Fires on any event named exactly "purchase" — the most common webhook use case (Slack ping on every sale, sync to a CRM).
{
"eventId": "3fae1c9e-3b7a-4b0e-9a1e-8e6b9c9d4a11",
"eventType": "purchase",
"time": "2026-08-02T14:03:11.000Z",
"path": "/checkout/success",
"userHash": "a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f9",
"metadata": {
"value": 49.99,
"currency": "USD",
"plan": "growth_engine"
},
"siteId": "3f9a2b7c-1234-4a5b-8c9d-0e1f2a3b4c5d",
"workspaceId": "9c8b7a6f-5e4d-3c2b-1a09-f8e7d6c5b4a3"
} signup
signup Fires on a signup event — forward to a serverless function to create the lead in your CRM instead of exporting CSVs.
{
"eventId": "7b2e9f1a-8c3d-4e5f-a6b7-c8d9e0f1a2b3",
"eventType": "signup",
"time": "2026-08-02T09:12:47.000Z",
"path": "/signup",
"userHash": "f9e8d7c6b5a4039281706f5e4d3c2b1a0908f7e6d5c4b3a29180706f5e4d3c2",
"metadata": {
"source": "organic",
"plan": "free"
},
"siteId": "3f9a2b7c-1234-4a5b-8c9d-0e1f2a3b4c5d",
"workspaceId": "9c8b7a6f-5e4d-3c2b-1a09-f8e7d6c5b4a3"
} trial_started
any custom event eventType isn't a fixed enum — it's whatever you named the event in your track() call. metadata carries whatever custom properties you sent.
{
"eventId": "c4d5e6f7-a8b9-4c0d-8e1f-2a3b4c5d6e7f",
"eventType": "trial_started",
"time": "2026-08-02T18:41:03.000Z",
"path": "/onboarding/step-3",
"userHash": "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
"metadata": {
"trial_days": 14,
"referral_code": "FOUNDING25"
},
"siteId": "3f9a2b7c-1234-4a5b-8c9d-0e1f2a3b4c5d",
"workspaceId": "9c8b7a6f-5e4d-3c2b-1a09-f8e7d6c5b4a3"
}
Every field is documented in full at /docs/webhooks.
The curl commands above sign with the demo secret demo_webhook_secret —
swap in your real signing secret from your webhook's dashboard settings.