Webhooks API
Register outbound webhook endpoints with HMAC signing Base path:/api/v1/webhooks
Endpoint count: 30
Get a platform event-stream sink config
GET /api/v1/developer/event-sinks/{kind}kind. A sink streams the platform event taxonomy (message.*, call.*, … — the same events the per-event HTTP webhooks fan out) to your own Kafka topic or batch HTTP collector. The secret credential (Kafka SASL password or HTTP bearer token) is encrypted at rest and is never returned — the read surfaces only a credentials_configured presence flag. The last_run_* fields are worker-owned run status, read-only. Requires an owner, admin, or developer role.
string (enum: kafka|http_batch)
required
Sink transport. One of
kafka or http_batch.List webhook endpoints
GET /api/v1/webhooks/string
Opaque cursor for the next page (from previous response meta.pagination.cursor)
integer
Number of items per page (1–200, default 25)
Get a webhook endpoint
GET /api/v1/webhooks/{id}string
required
—
List webhook deliveries
GET /api/v1/webhooks/{id}/deliveriesstatus, event_type, event_id, and a from_date/to_date range.
string
required
—
Get a webhook delivery
GET /api/v1/webhooks/{id}/deliveries/{deliveryId}string
required
—
string
required
—
Get webhook endpoint health
GET /api/v1/webhooks/{id}/healthstring
required
—
Get bulk replay job status
GET /api/v1/webhooks/{id}/replay-range/{jobId}string
required
—
string
required
—
Get webhook rotation status
GET /api/v1/webhooks/{id}/rotation/statusstring
required
—
List dead-lettered webhook deliveries
GET /api/v1/webhooks/dlqendpoint_id.
List webhook event schemas
GET /api/v1/webhooks/event-schemastype literal pinned) plus a realistic example payload, for OpenAPI codegen, runtime validation, or type generation without mining the docs by hand.
List webhook events (tenant timeline)
GET /api/v1/webhooks/eventsstatus, event_type, endpoint_id, a free-text search over the event type, and a from_date/to_date range. Scoped to the authenticated tenant — there is no organization_id parameter.
Get webhook reliability rollup
GET /api/v1/webhooks/reliabilitywindow_hours (default 24).
Register a webhook endpoint
POST /api/v1/webhooks/secret is used to compute the X-Orbit-Signature HMAC (canonical header); X-Devotel-Signature carries the same value for back-compat, except during a secret-rotation grace window, when it additionally carries the previous secret’s signature (a second v1=) so verifiers holding either secret keep validating. If omitted, Orbit auto-generates one and returns it in the response (this is the only time the secret is returned in cleartext — it is encrypted at rest after). See Webhook Security for verification instructions.
string
required
HTTPS endpoint URL.
string[]
required
Subscribed event types. See Webhook Events (e.g.
message.delivered, call.completed, verification.approved).string
Optional shared secret. Used to verify the X-Orbit-Signature HMAC (canonical header) on every delivery. X-Devotel-Signature carries the same value for back-compat, except during a secret-rotation grace window, when it additionally carries the previous secret’s signature (a second
v1=). Prefer X-Orbit-Signature in verifier code.boolean
Whether to start dispatching events immediately.
string
—
integer
Per-endpoint HTTP delivery timeout in seconds (1-30). The dispatcher aborts an in-flight delivery once this many seconds elapse. Defaults to 30 (the platform hard ceiling) when omitted.
object
Custom HTTP request headers merged onto every delivery to this endpoint, as a string-to-string map. Up to 20 headers; each value is capped at 2048 characters and may not contain line breaks. Header names reserved by Orbit (the signature, identity, idempotency, and
Content-Type headers) are rejected so you can’t shadow the headers we sign. Omit to send none. On update, pass {} to clear previously-configured headers.object
Per-endpoint payload transform that reshapes or filters the event before it is signed and delivered.
string
Scope this endpoint to a single AI agent. When set, the endpoint only receives events whose payload identifies that agent, rather than the tenant-global event stream. Omit for tenant-global delivery. On update, pass
null to remove the scope.Retry timing is managed by Orbit on a fixed schedule and is not configurable per endpoint. A failed delivery (non-2xx response or timeout) is retried automatically — one initial attempt plus 6 retries at
1m → 5m → 30m → 2h → 8h → 24h (each delay carries +0–20% jitter) — after which the event is moved to the dead-letter queue for replay. See Retry Schedule for the full table and idempotency guidance.Replay a webhook delivery
POST /api/v1/webhooks/{id}/deliveries/{deliveryId}/replayfailed returns 409 CONFLICT. To re-send a delivery that already succeeded, use the bulk POST /webhooks/{id}/replay-range endpoint, which re-dispatches every stored delivery in a from/to window.
string
required
—
string
required
—
Retry a webhook delivery
POST /api/v1/webhooks/{id}/deliveries/{deliveryId}/retrystring
required
—
string
required
—
Pause a webhook endpoint
POST /api/v1/webhooks/{id}/pauseduration_minutes or an explicit until timestamp; deliveries auto-resume once the window passes. Distinct from PUT /:id with active: false, which is an open-ended deactivation.
string
required
—
Start a bulk webhook replay
POST /api/v1/webhooks/{id}/replay-rangestring
required
—
Preview a bulk webhook replay
POST /api/v1/webhooks/{id}/replay-range/previewstring
required
—
Resume a webhook endpoint
POST /api/v1/webhooks/{id}/resumestring
required
—
Rotate a webhook signing secret
POST /api/v1/webhooks/{id}/rotate-secret?force=true to override the 24-hour previous-secret grace window (e.g. after a confirmed leak).
string
required
—
Cancel a webhook secret rotation
POST /api/v1/webhooks/{id}/rotation/cancelstring
required
—
Complete a webhook secret rotation
POST /api/v1/webhooks/{id}/rotation/completestring
required
—
Initiate a webhook secret rotation
POST /api/v1/webhooks/{id}/rotation/initiatestring
required
—
Test a webhook endpoint
POST /api/v1/webhooks/{id}/teststring
required
—
Fire a synthetic test event
POST /api/v1/webhooks/{id}/test-firevariant (success | failure | minimal). Returns a stable event_id you can poll the deliveries list with for the real receiver outcome.
string
required
—
Requeue a dead-lettered delivery
POST /api/v1/webhooks/dlq/{deliveryId}/requeuestring
required
—
Send an ad-hoc test webhook
POST /api/v1/webhooks/testUpdate a webhook endpoint
PUT /api/v1/webhooks/{id}string
required
—
Update a platform event-stream sink config
PATCH /api/v1/developer/event-sinks/{kind}kind. Only the fields you send are written; worker-owned last_run_* run-status fields are never accepted. The request body is discriminated on the path kind: an http_batch sink takes destination.url (https-only, SSRF-checked) and an optional max_batch_size; a kafka sink takes destination.topic plus brokers, sasl_mechanism, and sasl_username. A destination.kind must equal the path kind. Send credentials to store the encrypted secret (Kafka SASL password or HTTP bearer token); send an empty string to clear it. Requires an owner, admin, or developer role; every write is audit-logged (key names only, never the credential).
string (enum: kafka|http_batch)
required
Sink transport to update. One of
kafka or http_batch.Delete a webhook endpoint
DELETE /api/v1/webhooks/{id}string
required
—