Skip to main content

Inbound provider webhooks

These routes receive callbacks from external providers. They are not called by your integration.

Stripe

Stripe webhook routes process platform and connected-account payment events:
These endpoints verify Stripe signatures, record webhook events, update checkout state, and trigger entitlement changes.

Mailgun

Mailgun events update email delivery status:

AssemblyAI

AssemblyAI transcription callbacks update media transcription state:

Outbound webhook nodes (automations)

The automations engine ships a webhook node that POSTs a signed JSON payload to an endpoint you register. This is the current outbound webhook surface for customer integrations. Webhook endpoints are hub-scoped and managed via:
Each endpoint has a signing secret (generated server-side if not supplied, encrypted at rest, never returned). Targets are validated against an SSRF guard — private, loopback, link-local, and cloud-metadata addresses are rejected. Delivery is asynchronous with exponential-backoff retries. When the webhook node fires inside an automation it POSTs a payload containing the automation context and enrollment metadata to your registered URL. Use the signing secret to verify the X-Mio-Signature-V1 header on your receiver, as described below. See the Automations guide for the full node reference and lifecycle.

Delivery headers

Every delivery carries these headers: Each retry is sent with a new X-Mio-Timestamp and a new X-Mio-Signature-V1. Retries happen only on a timeout, a network error or a 5xx response. A 4xx response from your receiver is final, and that delivery is not retried. Request bodies over 1 MiB are truncated to 1 MiB before sending, and both signatures cover the truncated bytes you receive.

Verifying a delivery

On every request:
  1. Read the raw request body as bytes, before any JSON parsing. Re-serialized JSON won’t match.
  2. Check that X-Mio-Timestamp is only ASCII digits, and reject the request if it’s 300 seconds or more away from your clock, in either direction.
  3. Compute HMAC-SHA256(signing_secret, timestamp + "." + raw_body) using the exact X-Mio-Timestamp string you received, and format it as v1= plus lowercase hex.
  4. Compare it with X-Mio-Signature-V1 using a constant-time comparison, never ==.
  5. Deduplicate on X-Mio-Delivery-Id. A byte-for-byte copy of a delivery still verifies inside the 300-second window, and a retry can arrive after an earlier attempt you already processed.
If you verify X-Mio-Signature today, switch to X-Mio-Signature-V1. Both headers are sent during the deprecation window, so you can deploy the new check before the old header goes away.

Team-level outbound webhooks (Zapier-style)

General-purpose team-level outbound webhooks (trigger on any platform event, configurable outside of automations) are a planned feature tracked separately. For today’s integrations, use the automation webhook node described above, API polling, or the checkout inspection endpoints.