Skip to main content

Webhook Ingress

The ingress endpoint is the main entry point for receiving webhooks from external services.

POST /hooks/:slug

Receive and process a webhook event.

Path Parameters

ParameterTypeDescription
slugstringThe unique endpoint slug

Headers

HeaderRequiredDescription
Content-TypeYesMust be application/json
X-Hub-Signature-256ConditionalGitHub/Bitbucket HMAC-SHA256 signature (sha256= prefix)
X-Dispatch-SignatureConditionalCustom HMAC-SHA256 signature
X-Slack-SignatureConditionalSlack signature (with X-Slack-Request-Timestamp)
X-Gitlab-TokenConditionalGitLab secret token
Linear-SignatureConditionalLinear HMAC-SHA256 signature
Stripe-SignatureConditionalStripe webhook signature (t= + v1=)
AuthorizationConditionalJira/Confluence JWT Bearer token, or Bearer dsp_<api-key>
X-GitHub-EventNoGitHub event type (auto-detected)
X-Gitlab-EventNoGitLab event type (auto-detected)
X-Event-TypeNoCustom event type header

At least one authentication header is required (signature or API key).

Limits

LimitValue
Maximum payload size10 MiB
Rate limit100 requests/sec per IP

Request Body

Any valid JSON object.

{
"action": "push",
"repository": {
"full_name": "owner/repo"
},
"sender": {
"login": "username"
}
}

Response

202 Accepted — Event received and queued for delivery.

{
"event_id": "550e8400-e29b-41d4-a716-446655440000"
}

Error Responses

StatusDescription
400 Bad RequestInvalid JSON body
401 UnauthorizedInvalid signature or API key
404 Not FoundEndpoint not found or inactive
409 ConflictDuplicate event (idempotency key already used)
429 Too Many RequestsOrganization event limit reached
500 Internal Server ErrorFailed to store event

Processing Pipeline

  1. Endpoint lookup — find active endpoint by slug
  2. Authentication — verify signature or API key
  3. Payload validation — ensure valid JSON
  4. Slack challenge — if Slack URL verification, respond immediately
  5. Event type extraction — from headers or payload path
  6. Header collection — store all request headers
  7. Usage check — verify org hasn't exceeded event limits
  8. Event storage — persist the event
  9. Filter evaluation — if blocked, mark as filtered and stop
  10. Fan-out — create delivery jobs for all active linked destinations
  11. Queue — enqueue jobs for async delivery

Slack URL Verification

When Slack sends a URL verification challenge, Dispatch responds immediately:

// Incoming
{
"type": "url_verification",
"challenge": "abc123"
}

// Response (200 OK)
{
"challenge": "abc123"
}

This is handled before event storage, so no event is created for verification requests.

Response Headers

HeaderDescription
X-Request-IDUnique request ID for tracing