The end-to-end flow
What you’ll work with
The envelope
Every webhook has the same outer shape — six top-level fields. The variable bit is the
data object.Delivery semantics
At-least-once delivery with retries. You must dedupe by EventId.
Signature verification
Every request is signed with HMAC-SHA256. Verify before you process.
Managing subscriptions
Create, edit, rotate keys, and delete subscriptions from the FPT admin.
Design principles
These shape how the system behaves — partners that work with them get a smooth experience.At-least-once delivery, never exactly-once
At-least-once delivery, never exactly-once
We may deliver the same event more than once. This happens when your endpoint times out before responding 200, when we redeploy mid-delivery, or when a transient network blip causes a retry. Every event has a unique
eventId — use it to dedupe on your end.The envelope is stable; the data is event-specific
The envelope is stable; the data is event-specific
Top-level fields (
eventId, eventType, eventTimestamp, locationId, organizationId, apiVersion, data) are guaranteed across every event we ever ship. The data object varies by event type — see the event catalog for the shape per event.No ordering guarantees across events
No ordering guarantees across events
Two events fired close together might land at your endpoint in either order. If your business logic depends on order, use
eventTimestamp to sort. Within a single subscription we send sequentially; across subscriptions, deliveries happen in parallel.HTTPS required, IP ranges are not stable
HTTPS required, IP ranges are not stable
Your endpoint must be HTTPS-accessible from the public internet. We won’t deliver to HTTP URLs or private/internal addresses. We don’t publish a stable IP allowlist — outbound calls originate from Azure infrastructure and can come from a range of addresses. Authenticate by verifying the signature, not by IP filtering.
Retry on failure, with exponential backoff
Retry on failure, with exponential backoff
Non-2xx responses or timeouts trigger a retry. The schedule backs off over hours, not minutes — short outages won’t disable your subscription. See delivery semantics for the exact schedule.