Fictura
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

typeFires when
billing.purchase .trial_start .conversion .renewal .cancellation .expiration .billing_issue .otherMoney moves — from Stripe and RevenueCat, in one identical shape. Field-by-field docs: Billing webhooks.
error.first_seen / error.regressed / error.escalatingThe three error alerts.
uptime.down / uptime.recoveredYour monitored URL failing three consecutive checks / coming back.
experiment_winner_shipped / experiment_leader_foundAn A/B test resolving.
testOn 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.

On this page