Available events
Eighteen event types, across six entity families. Subscribe to any subset.Step 1 — Subscribe
Pick the events you care about and an HTTPS endpoint you control.secret is yours to choose — a 32-byte random string is standard. Orgo uses it to sign each delivery so you can verify the payload came from Orgo.
Response includes the subscription ID — store it; you’ll need it for delivery-log lookups.
Step 2 — Receive the delivery
Each event is delivered as an HTTPSPOST with a JSON body and these headers:
Body shape (Stripe-inspired):
*.updated events, previous_attributes carries the diff — fields not mentioned didn’t change. This is enough to detect specific transitions (“user just unsubscribed”, “payment just succeeded”) without comparing to a stored snapshot.
Step 3 — Be idempotent
Orgo may deliver the same event twice — retries on transient failures, network races on at-least-once delivery. Your handler must be safe to call repeatedly with the same payload. The simplest pattern: aprocessed_deliveries table keyed by id (the top-level event ID, e.g. wh_evt_67aa128c2f4a):
Step 4 — Respond fast
Orgo waits up to 30 seconds for a response before treating the delivery as failed. Long-running work (sending a follow-up email, querying a slow downstream API) should go into a background queue. The webhook handler’s job is to acknowledge receipt and durably queue the work — not perform it.Step 5 — Test before going live
The test endpoint fires a synthetic event of your chosen type to the subscription URL:Step 6 — Replay failed deliveries
Every delivery attempt — success or failure — is logged. To list:Retry behavior
The subscription itself is not automatically deactivated on repeated failures — your monitoring should watch for high failure rates and either auto-pause or page on-call.
Common gotchas
Deliveries are arriving out of order
Deliveries are arriving out of order
Orgo doesn’t guarantee delivery order across event types. The
created timestamp on each event lets you reconstruct order — sort by created before processing if order matters. For per-resource ordering (“two updates to the same user”), use previous_attributes to detect skipped transitions.The same event fired twice — but for different tenants in my multi-tenant CRM
The same event fired twice — but for different tenants in my multi-tenant CRM
Always route by
tenant_id in the payload, not by the subscription ID. If a single CRM serves multiple Orgo tenants, each tenant should create its own subscription, and your receiver should route incoming events to the right CRM tenant based on payload['tenant_id'].Can I subscribe to all events with a wildcard?
Can I subscribe to all events with a wildcard?
Not currently — list explicit event types in the
events array. The full list is in the Webhooks concept page. Subscribing to events that don’t yet exist is harmless but won’t catch new types if Orgo adds them — patch your subscription when new events ship.What to do next
- Webhooks (concept) — the high-level reference
- Sync your CRM with Orgo — webhooks in context of a full CRM sync
- Process payments — using
product_payment.updatedto drive payment reconciliation

