API Documentation
Management endpoints live under /api (Bearer auth, or a dashboard session). Ingest endpoints live under /ingest (signature-verified for supported providers).
Sinks
POST
/api/sinks Bearer or session
Create a new sink, owned by the authenticated account. Body:
{"name":"...","provider":"stripe|github|shopify|linear|pagerduty|clerk|generic"}. All non-generic providers require webhook_secret. See per-provider setup at /providers/shopify, /providers/linear, /providers/pagerduty, /providers/clerk.GET
/api/sinks Bearer
List sinks for the authenticated API key.
GET
/api/sinks/:id/events Bearer
Last 50 events with delivery attempts.
Routes
POST
/api/sinks/:id/routes Bearer
Add a destination URL. Body:
{"url":"https://..."}DELETE
/api/sinks/:id/routes/:routeId Bearer
Remove a route. Returns 204.
Billing
GET
/api/billing/status Bearer
Current tier, events used this month, and limit.
POST
/api/billing/checkout Bearer
Create a Polar checkout to upgrade to Starter ($9/mo). Returns
{"url":"..."}.Ingest
POST
/ingest/:sinkId Signature
Receive a webhook. FanHook verifies the provider signature (generic sinks are verified only when a
webhook_secret is set) and fans out to all routes. Returns 429 when monthly limit is reached.Response Codes
200
OK
201
Created
204
No Content
400
Bad Request
401
Unauthorized
429
Rate Limited