CONFIGURING WEBHOOKS
Overview
Roam uses webhooks to send real-time notifications to your application as bookings, charges, and payments progress through their lifecycle.
Webhook notifications allow your systems to respond automatically to operational and financial events without the need for continuous polling. All webhook events are delivered as HTTP POST requests containing a JSON payload representing the latest state of the affected record at the time the event was emitted.
Configuration
To configure webhook notifications, the following information must be provided to Roam:
| Parameter | Description |
|---|---|
| Webhook Endpoint URL | The HTTPS endpoint where Roam should deliver webhook events |
| Webhook Secret Key | A secret key used to generate and verify webhook request signatures |
The webhook secret key is provided by your system and securely stored within the Roam platform for signature generation.
All webhook deliveries are sent to a single configured endpoint.
Webhook Delivery
Webhooks are delivered as HTTP POST requests with a JSON request body.
Your endpoint must:
Accept inbound HTTPS
POSTrequestsReturn an HTTP
200 OKresponse to acknowledge successful receipt
The following headers are included:
| Header | Description |
|---|---|
Content-Type |
Always application/json |
x-timestamp |
Unix timestamp in milliseconds |
x-signature |
Shared secret used to verify the request source |
Deliveries are asynchronous and may be delayed by several minutes while related processing and calculations are completed within the platform. Each webhook also contains a unique event identifier to support idempotent processing and duplicate handling within your application.
Security Verification
Webhook requests include a shared secret in the x-signature header to allow verification that the request originated from Roam.
All webhook requests are delivered over HTTPS and signatures should always be verified before parsing or processing JSON payloads.
Responding to Webhooks
Your endpoint should acknowledge webhook deliveries immediately by returning an HTTP 200 OK response before performing longer-running business logic asynchronously.
This helps prevent delivery delays and unnecessary retries.
Event Types
Roam publishes webhook events for bookings, charges, and payments. All event types are delivered to the same configured webhook endpoint.
| Event Type | Description |
|---|---|
booking.updated |
Emitted when a booking record is updated |
charge.updated |
Emitted when a charge record is updated |
payment.created |
Emitted when a payment record is created |
payment.updated |
Emitted when a payment record is updated |
Event Payloads
Webhook payloads contain the latest state of the affected record at the time the event was emitted.
Payloads are delivered as JSON within the request body. It is recommended treating webhook payloads as the source of truth for the event at the time it was published.
The following examples show representative payloads for each event type.
Booking Event Example
{
"Record_Link": "https://partner.roam.global/booking/BKG-10248",
"Itinerary_Link": null,
"Travel_End_Date": "2026-09-18",
"Travel_Start_Date": "2026-09-05",
"Passengers": 2,
"Client_Last_Name": "Walker",
"Client_First_Name": "Emma",
"Client_Email": "emma.walker@example.com",
"Quote_Reference": "Q-20260905",
"Booking_Summary_Link": "https://partner.roam.global/summary/SMRY-10248",
"Funds_Outstanding": 1850.50,
"Funds_Received": 549.50,
"Payment_Suggestion": 100,
"Balance_Due_Date": "2026-08-15",
"Deposit_Due_Date": "2026-06-01",
"Balance_Total": 1850,
"Deposit_Total": 550,
"Booking_Total": 2400,
"Confirmed": true,
"Proceeding": true,
"TXN_Currency": "USD",
"Validity_Date": "2026-06-01",
"Booking_Id": "BKG-10248",
"message": "Booking has successfully been updated.",
"success": true
}
Charge Event Example
{
"Paid_Out": false,
"Completed": false,
"Booked": true,
"Supplier_3_Amount": 0,
"Supplier_2_Amount": 0,
"Supplier_1_Amount": 8200,
"Beneficiary_3_Id": null,
"Beneficiary_2_Id": null,
"Beneficiary_1_Id": "SUPPLIER-ZAR-001",
"Due_Date": "2026-06-01",
"Type": "Deposit",
"BSE_Currency": "ZAR",
"BSE_Total": 8200,
"TXN_Total": 550,
"Charge_Id": "CHG-20814",
"Booking_Id": "BKG-10248",
"message": "Charge has successfully been updated.",
"success": true
}
Payment Event Example
{
"Amount": 550,
"Currency": "USD",
"Type": "Deposit",
"Method": "Bank Transfer",
"Received_Date": "2026-06-02",
"Payment_Id": "PMT-48372",
"Booking_Id": "BKG-10248",
"message": "Payment has successfully been created.",
"success": true
}