Inbound webhook from incident.io
Dedicated ingest endpoint for incident.io webhooks. Streams the exact provider-signed bytes under a hard 1 MiB cap before strictly decoding UTF-8. Validates the Svix `webhook-id`, `webhook-timestamp`, and `webhook-signature` headers, including a five-minute replay window, and routes only when exactly one connected per-org encrypted signing secret matches. Handles `incident.created`, `incident.updated`, and `incident.resolved` events. Unknown event types return `{ ok: true, skipped: true }`. Missing, stale, malformed, duplicate, undecryptable, or over-cap candidate state fails closed with 401. `WEBHOOK_SECRET_INCIDENT_IO` is a bounded legacy fallback for exactly one connected env-only row and is never an alternate key for connected per-org rows.
incidentIoSvixwebhook-signature<token>incident.io/Svix signature. Verification also requires the webhook-id and webhook-timestamp headers.
webhook-id*stringwebhook-timestamp*string^[0-9]+$webhook-signature*stringapplication/json- body
event_type*string"incident.created""incident.updated""incident.resolved"data*incident.io incident payload.
Webhook processed, or an unsupported event type acknowledged and skipped.
application/json- response
ok*truetrueevent_type*stringcreated?booleanupdated?booleanresolved?booleanincidentId?stringcurl -X POST 'https://app.rensei.ai/api/webhooks/ingest/incident-io' \ -H 'webhook-id: string' \ -H 'webhook-timestamp: string' \ -H 'webhook-signature: string' \ -H 'Content-Type: application/json' \ -d '{ "event_type": "incident.created", "data": {}}'{ "ok": true, "event_type": "string", "created": true, "updated": true, "resolved": true, "incidentId": "string"}Inbound webhook from a provider
Unified ingest endpoint for Linear, GitHub, GitHub Actions, and Vercel webhooks. Validates HMAC signature, checks idempotency, and immediately returns 200. All routing/execution is deferred via `after()`. Duplicate deliveries are detected via the gateway's idempotency layer and return `{ ok: true, duplicate: true }`. Providers register at: `POST /api/integrations/{provider}/oauth/authorize`.
Deliver a signed payload to one workflow.
Send webhook-id (1-256 URL-safe characters), webhook-timestamp (Unix seconds), and webhook-signature (lowercase hex HMAC-SHA256). Sign exact bytes: deliveryId + "." + timestamp + "." + raw body. Timestamps must be within five minutes; delivery IDs are single-use for the endpoint, including after secret rotation.