Skip to main content
Subscribe an HTTPS endpoint to the events you care about and stop polling. Every delivery is a thin event: what happened and to which object, never the object itself. Fetch the current state from related_object.url, or the full event (with data and changes) from GET /v2/events/{id}.

Event destinations

POST /v2/event_destinations (scope events:write):
The signing secret is returned on create and on rotate only; store it then (it is null on every other read). event_payload is thin today; snapshot is reserved and currently rejected with 400 parameter_invalid (full transaction payloads stay on webhook destinations). enabled_events accepts exact types, families (sync_run.*) or *. Up to 10 destinations per account.

The delivered payload

Headers: Redbark-Signature, Redbark-Delivery-Id, Redbark-Event-Id, User-Agent: Redbark-Events/1.0. Payloads are unversioned. Respond with any 2xx within 30 seconds.

Verifying signatures

Redbark-Signature: t=1755741609,v1=5257a869e7… where each v1 is HMAC-SHA256 of "{t}.{raw_body}" with a signing secret. During the 24 hours after a rotate there are two v1 values; accept the delivery if any matches. Reject deliveries whose t is more than 5 minutes old.

Delivery and retries

Deliveries are at-least-once and unordered; deduplicate on id. A non-2xx or a timeout is retried with exponential backoff (1 minute, 5, 30, 2 hours, 6, 12, then daily) for up to 3 days, after which the delivery is abandoned. A destination that has failed continuously for 3 days is disabled (status_details.reason = "delivery_failures") and event_destination.disabled is emitted; fix the endpoint and POST …/enable.

The event log

GET /v2/events?type[]=sync_run.* (scope events:read) lists the last 30 days of events for resources your key can read. GET /v2/events/{id} returns the full event with data, changes and every delivery attempt. POST /v2/events/{id}/redeliver (events:write) queues a fresh delivery to every subscribed destination, or one with { "event_destination": "ed_…" }.

Event types