Skip to content
Webhooks

Every mutation is an event. Every event is subscribable.

Odexy emits a typed event for every state change — deal won, invoice paid, employee onboarded, ticket resolved, contract signed. Subscribe your endpoint, receive HMAC-signed callbacks, replay any missed run.

What ships

Delivery you can actually trust in production.

  • Typed event catalogue. Every module publishes its event classes (`sales.invoice.issued`, `crm.deal.won`, `hrm.leave.approved`, ~200 total). Every event has a Zod payload schema; you know the exact shape ahead of time.
  • HMAC-SHA256 signatures. Every callback carries `X-Signature: sha256=<hmac>` computed with your endpoint's shared secret. Verify before parsing; reject unsigned or misauthenticated requests.
  • Timestamp-anchored replay protection. `X-Timestamp` header + a 5-minute skew tolerance means an attacker can't replay a captured payload against you.
  • Retry with exponential backoff. First retry at 1 minute, then 5, 25, 2h, 12h, 24h. Failures beyond that mark the subscription unhealthy + email the owner.
  • Per-event replay. The admin UI shows every delivered + failed callback per subscription. One-click replay any specific event; batch-replay a range if your endpoint was down for hours.
  • Filtering. Subscribe to a single event (`sales.invoice.paid`) or a whole module wildcard (`sales.*`). Additive server-side filters (only events for a specific tenant, only above a specific amount).
  • Delivery observability. Per-subscription dashboard: success rate, p50 / p95 latency, last-delivered timestamp, unhealthy alert threshold.
Sample payload

Deal-won callback.

POST https://your-endpoint.example.com/hooks/helios
X-Signature: sha256=abcd1234...
X-Timestamp: 1735689600
X-Event-Class: crm.deal.won
X-Event-Id: evt_01H...

{
  "id": "evt_01H...",
  "class": "crm.deal.won",
  "occurredAt": "2026-08-29T12:34:56.789Z",
  "orgId": "01H...",
  "actor": { "type": "user", "id": "01H..." },
  "payload": {
    "dealId": "01H...",
    "companyId": "01H...",
    "amountCents": 4800000,
    "currency": "USD",
    "wonAt": "2026-08-29T12:34:56.789Z"
  }
}

Verify: `hmac_sha256(secret, timestamp + '.' + body) === signature`, then check `abs(now - timestamp) < 300` seconds. If either fails, respond `401` — we retry until you fix it or manually disable the subscription.

Webhooks

Subscribe your endpoint.

Signed, retried, replayable. The same event stream the AI and audit log see.

Subscribe to the Odexy changelog.

One email every ~2 weeks. Honest product notes, no marketing pitches.

We email you only when there's something honest to say. Unsubscribe in one click.