Rensei docs

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`.

POST
/api/webhooks/ingest/{provider}

Authorization

webhookHmac
x-hub-signature-256<token>

HMAC-SHA256 signature of the raw request body. Header name varies by provider: x-linear-signature (Linear), x-hub-signature-256 (GitHub/GitHub Actions), x-vercel-signature (Vercel). Secret resolved from WEBHOOK_SECRET_<PROVIDER> env var or per-org workspace integration override.

In: header

Path Parameters

provider*string
Value in"linear" | "github" | "github-actions" | "vercel"

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

[key: string]?any

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/webhooks/ingest/linear" \  -H "Content-Type: application/json" \  -d '{}'
{
  "ok": true,
  "eventId": "string",
  "correlationId": "string",
  "duplicate": true
}
{
  "error": "Session not found"
}
{
  "error": "Session not found"
}
{
  "error": "Session not found"
}