Before You Start
- Use a sandbox API key while developing and a production API key for live bookings.
- Create endpoints separately in each environment. Sandbox events are never delivered to production endpoints, or vice versa.
- Your destination must be a public HTTPS URL. URLs containing credentials, fragments, or private/internal hosts are rejected.
- Return a
2xxresponse within 10 seconds. Process longer-running work asynchronously after acknowledging the request.
1. Create an Endpoint
signing_secret. Store it in your secret manager when
it is returned; it cannot be retrieved later.
2. Verify Every Request
Unifystays signs the exact request body with HMAC-SHA256. Verify the signature before parsing or processing the event, and reject stale timestamps to reduce replay risk. Implement signature verification3. Send a Test Event
ACTIVE. The API returns 202 Accepted with an event_id
and delivery_id. Use the delivery ID to inspect the receiver’s HTTP response.
Event Types
Subscribe to individual event names or use
booking.* for every booking event.
Test deliveries use webhook.test and are sent only when you explicitly request
a test.
Event Payload
booking.cancellation_failed, data.cancellation_error contains the
failure message. Treat payloads as forward-compatible: ignore fields you do not
recognize and use schema_version when introducing version-specific handling.
Delivery Guarantees
Webhook delivery is at least once. A successful request may be delivered again, and events can arrive out of order.- Deduplicate using the top-level event
id. - For booking state, apply only a payload whose
data.object.versionis newer than the version you have already processed. - Return any
2xxstatus after safely persisting or enqueueing the event. - Do not depend on delivery order.
Retries and Automatic Disabling
Failed deliveries are attempted up to eight times. Default delays after each failure are 1 minute, 5 minutes, 30 minutes, 2 hours, 8 hours, 24 hours, and 48 hours. A validRetry-After response header is honored, capped at 48 hours.
Re-activate a disabled endpoint by updating its status to
ACTIVE, then replay
any delivery you still need.