Skip to main content
This page is the reference for what Sequence sends and how. For a step-by-step integration walkthrough, see Set up webhooks.

Request format

Sequence delivers webhooks as POST requests with Content-Type: application/json. Every payload has the same envelope:
The resource field contains the state of the resource that triggered the event.

Example payload

A BILLING_SCHEDULE_CREATED delivery looks like this. The prices and phases arrays are simplified for readability; in real deliveries they contain the full pricing and phase structure for the schedule.

Sequence-Signature header

Every webhook includes a Sequence-Signature header containing a timestamp and an HMAC signature:
  • t is the delivery timestamp, in Unix milliseconds.
  • s is an HMAC-SHA256 signature of ${t}.${rawBody}, computed using the webhook’s signing secret.
The timestamp is part of the signed payload, so receivers can reject deliveries with a stale t to mitigate replay attacks. For working verification code, see Verify the signature in the integration guide.

Delivery

  • Acknowledgment. Sequence considers any 2xx response a successful delivery.
  • Retries. Any non-2xx response causes Sequence to retry. Retries continue for up to 24 hours, with exponential backoff.
New event types may be added over time. Handlers should accept and ignore types they don’t recognize.

Event catalog

Customer alias events

Customer webhooks don’t include the customer’s aliases. To find out when an alias changes, subscribe to the alias events. Each one carries the single alias that changed. These are sent alongside the customer events, not instead of them. For example, updating a customer to add an alias sends both CUSTOMER_UPDATED and CUSTOMER_ALIAS_CREATED. Archiving a customer sends CUSTOMER_ARCHIVED and no alias events. The resource is the alias as the customer alias endpoints return it. label is left out when the alias has none, and deletedAt is only included in CUSTOMER_ALIAS_DELETED. Webhooks can arrive out of order. Use updatedAt to order changes to the same alias: it’s set every time the alias is created, has its label changed, or is deleted.