O2C Webhooks

Your other systems shouldn't poll the books to find out a deal closed or a payment landed. O2C webhooks push order-to-cash events to any HTTPS endpoint you register, with signed payloads and a full delivery log.

Key capabilities

  • Seven subscribable event types: order.countersigned, contract.activated, drawdown.approved, invoice.drafted, invoice.sent, contract.completed, and payment.received
  • Per-endpoint event subscriptions — each endpoint receives only the events it opted into
  • HMAC-signed payloads: each endpoint gets a signing secret so receivers can verify authenticity
  • The plaintext signing secret is shown once, at creation — store it when you see it
  • Delivery log per endpoint: status, attempt count, HTTP response code, and the next retry time while retrying
  • Failed deliveries retry automatically with backoff
  • Delete an endpoint to stop deliveries (its delivery history is removed with it)

How it works

flowchart LR
  event["O2C event (e.g. payment.received)"] --> match["Subscribed endpoints"]
  match --> sign["HMAC-sign payload"]
  sign --> post["POST to endpoint"]
  post -->|"2xx"| done["Delivered"]
  post -->|"failure"| retry["Retry with backoff"]
  retry --> post

How to use it

  1. Open Order to Cash → Webhooks and add an endpoint URL.
  2. Check the event types it should receive and save — then copy the signing secret from the confirmation (it won't be shown again).
  3. Verify the HMAC signature on each delivery in your receiver before trusting the payload.
  4. Use the per-endpoint deliveries view to debug: status, attempts, response codes, and when the next retry fires.

Pro tips

  • Subscribe narrowly — an endpoint that only cares about payment.received shouldn't have to ignore six other event types.
  • If you lose a signing secret, delete the endpoint and re-create it to mint a new one.