Creating an endpoint
The response includes the endpoint plus a signing secret (
whsec_…). It is shown once — store it immediately; it can’t be retrieved later, only rotated.
Event types
Scope filtering
Anorganization-scoped endpoint receives every matching event in the org. project, team, and agent scopes deliver only events whose project/team/agent matches one of the endpoint’s scopeIds. Multiple endpoints can coexist — every endpoint whose scope and event types match receives its own delivery.
The delivery request
Each delivery is an HTTPSPOST with these headers:
And a JSON body:
project_id, team_id, agent_id, and agent_name are present on agent-related events; org-level events (billing, funding) omit them.
Verifying signatures
Every delivery is signed with your endpoint’s secret:HMAC-SHA256(secret, "<timestamp>.<raw body>"), hex-encoded, prefixed sha256=. Always verify against the raw request bytes, before any JSON parsing or re-serialization.
During the 24-hour window after a secret rotation, Reinx-Signature carries two comma-separated signatures (one per secret) — accept the delivery if any of them matches yours.
2xx status within 15 seconds to acknowledge. Anything else — including a timeout — counts as a failure and is retried.
Retries and auto-disable
Delivery is at-least-once: a delivery is attempted up to 5 times, backing off after each failure — 5 minutes, 30 minutes, 2 hours, then 8 hours. Retries reuse the sameReinx-Delivery-Id, so deduplicate on it.
After 10 consecutive failed deliveries, the endpoint is automatically disabled (isActive: false) and its queued deliveries are dropped. Check the endpoint’s status and delivery log in Settings → Webhooks; fix your receiver, then re-enable the endpoint there (or via PUT /v1/webhooks/:id), which resets the failure counter.
Rotating the secret
secretPreviousExpiresAt. For the next 24 hours deliveries are signed with both the new and old secrets, so you can deploy the new secret to your receiver without dropping events. After the window only the new secret signs.
Testing an endpoint
data: { "test": true, … }) to your URL and returns the HTTP status and response time. Test sends appear in the delivery log flagged as tests and never count toward the auto-disable failure threshold.