Outgoing
Webhooks
Everything Fictura knows, pushed to a URL you choose — billing, errors, uptime, experiments — one envelope, one signature.
Dashboard → Setup → Connections → Outgoing Webhooks: paste an endpoint URL, optionally set a signing secret, and connecting fires a signed "type": "test" delivery — answer 2xx and you're live.
Every event type
type | Fires when |
|---|---|
billing.purchase .trial_start .conversion .renewal .cancellation .expiration .billing_issue .other | Money moves — from Stripe and RevenueCat, in one identical shape. Field-by-field docs: Billing webhooks. |
error.first_seen / error.regressed / error.escalating | The three error alerts. |
uptime.down / uptime.recovered | Your monitored URL failing three consecutive checks / coming back. |
experiment_winner_shipped / experiment_leader_found | An A/B test resolving. |
test | On connect, to verify the endpoint. |
Envelope — every delivery
{
"type": "billing.renewal",
"app_id": "6b8506b9-2f01-499b-a95a-e64ee67b2d3a",
"sent_at": "2026-08-11T18:22:41.000Z",
"data": { }
}- Signature — with a secret set, each delivery carries
X-Growth-Signature, the hex HMAC-SHA256 of the raw body. Verify before parsing: Signature verification. - Delivery — one attempt, 8-second timeout,
User-Agent: fictura/1.0. No automatic retry today, so respond 200 fast and process after. - Idempotency is yours — upsert rather than insert, and derive access from
expires_at, never from having seen a particular event.