GETTING STARTED WITH THE ROAM API
Introduction
Welcome to the Roam API.
This is built on modern REST principles and designed to give developers a clear, consistent, and flexible way to embed payment and financial workflows directly into their applications.
The unified API provides access to a broad suite of capabilities, including booking management, multi-currency invoicing, and payment reconciliation—all through a single integration layer. A secure sandbox environment is available so you can build and test confidently using test data before going live in production.
API Endpoints
Two APIs are provided to support your booking and payment flows. These must be used in conjunction and form part of a single integration.
Booking API
Create and manage bookings and their associated metadata.
| Environment | API Endpoint |
|---|---|
| Sandbox | https://rest.synatic.com/roamdev/booking |
| Production | https://rest.synatic.com/roamprod/booking |
Charge API
Create and manage invoices and payment schedules related to a booking.
| Environment | API Endpoint |
|---|---|
| Sandbox | https://rest.synatic.com/roamdev/charge |
| Production | https://rest.synatic.com/roamprod/charge |
Authentication
Access to Roam endpoints is authenticated using API keys. Each endpoint is accessed independently and uses its own key. Keys are issued per environment and are managed by the Roam technical support team.
Request Header
Include your key in the request headers:
X-API-KEY: <your-key> |
|---|
Choosing the Right Endpoint
Roam separates booking management from financial transaction management. While both APIs are typically used together, each serves a distinct purpose within the booking lifecycle.
Use the Booking API to create and manage the operational context of a booking. This includes traveller information, travel dates, quote references, consultants, itinerary links, booking status, and payment visibility. Booking services also provide access to related charges and payments within a booking.
CreateBooking— Create a new booking with the provided details.UpdateBooking— Update an existing booking with the provided details.GetBookingDetails— Retrieve details for a specific booking.GetCharges— Retrieve all charges related to a specific booking.GetPayments— Retrieve all payments related to a specific booking.
Use the Charge API to manage the financial structure of a booking. This includes creating and updating deposits, balances, refunds, payment schedules, due dates, currencies, FX conversion details, and supplier payout information.
CreateCharge— Create a new charge for the specified booking.UpdateCharge— Update an existing charge with the provided details.GetChargeDetails— Retrieve details for a specific charge.
In a typical integration flow, a booking is created first through the Booking API. One or more charges are then created against that booking through the Charge API. Travellers can then view and pay against the consolidated booking through a single booking summary link.
This separation allows your booking and financial data to evolve independently while remaining linked as part of a single flow.
Event Monitoring
Roam uses webhook notifications to provide real-time updates as bookings, charges, and payments progress through their lifecycle. These allow your application to respond automatically to operational and financial changes without the need for continuous polling. Use the Events documentation to configure and manage event notifications within your integration.
Typical Booking Lifecycle
This section describes a common end-to-end flow for a booking within Roam. Use it as a how-to guide to get started.
Create a Booking
Create a booking record with CreateBooking to capture key information such as passenger details, travel dates, consultant name, and quote reference. This is the parent object that all subsequent charge and payment records within the booking will relate to.
Choose the transaction currency that the traveller will pay in by setting the TXN_Currency parameter. Add a link to a digital itinerary, which will display as a clickable button to travellers, through Itinerary_Link.
Create Charges for the Booking
Use CreateCharge to define the payment schedule within a booking. The schedule is loaded through individual charges, which can be likened to invoices raised from an accounting system. Charges are represented as deposits or balances for an amount on a given date in a given base currency.
Once a charge has been added, the BSE_Amount is converted to a TXN_Total at a set exchange rate, and this amount rolls up to the booking.
Presenting the Booking for Payment
Share details and costs of a booking with a traveller through the Booking_Summary_Link. This single link will remain the same for the lifetime of a booking, and from here travellers can view quotes, make payments, and track their transaction history.
When ready to take payment, use UpdateBooking to set Proceeding from false to true. This updates the booking status from “Quote” to “Proceeding” and opens the payment gateway.
Once the first payment has been received, the Booking will be “Confirmed”. This guarantees the exchange rates for all charges that have already been created, essentially locking in the amount that a traveller will pay in their TXN_Currency irrespective of market movement.
Understanding Validity Dates
When a booking is created, the Validity_Date parameter will be set in the future, dependent on account settings, but is typically 7 days from the creation date. This is the period during which quoted exchange rates in a booking are valid. Rates are left unchanged for this extended period to give travellers time to review a quote without it changing day-to-day due to market movements. A booking will only be “Confirmed” if a payment is received against it while rates are valid.
In order to take this payment, Proceeding can only be set to true if a booking has a Validity_Date greater than or equal to today. If not, use UpdateBooking to set a combination of Refresh_Rates and Force_Rate_Refresh. This will refresh the underlying exchange rates in all unbooked charges and move the date into the future.
Refer to potential refresh options below. Note that in all cases Proceeding can be set to true at the same time as these fields in a single call.
| Validity Date | Refresh_Rates | Force_Rate_Refresh | Description |
|---|---|---|---|
| In past | true |
false |
Rates refreshed and validity date moved to the future |
| In future | true |
false |
Rates will not refresh and validity date will not update as booking is already valid |
| In future | true |
true |
Even though booking is valid, rates will be forced to refresh and validity date updated to the latest possible date. Use this if wanting to give a traveller more time to consider a quote. |
| Either | false |
true |
No action taken as rate refresh trigger not set |
Adding an Amendment Charge
To add an amendment charge, set Proceeding to false. If the booking is invalid, this will automatically refresh rates, but will not affect the exchange rate for charges that already have “Booked” status.
Once your changes have been made, set Proceeding to true to confirm the details and reopen the gateway.
Booking Statuses
As a booking progresses through its lifecycle, the values of the Proceeding and Confirmed parameters determine its status.
| Status | Proceeding | Confirmed | Description |
|---|---|---|---|
| Quote | false |
false |
Charges can be added and details updated. Travellers cannot make payment as the gateway is closed. |
| Proceeding | true |
false |
No charges can be added or updated. Travellers can make payment through the gateway. |
| Confirmed | true |
true |
Payment has been received and the transaction currency cannot be changed. Charge exchange rates have been guaranteed. Travellers can make payments through the gateway. |
| Amending | false |
true |
The confirmed booking has been reopened for amendments. Travellers cannot make payment as the gateway is closed. |
Charge Statuses
As a charge progresses through its lifecycle, the values of the Booked, Completed, and Paid_Out parameters determine its status. To make any changes to a charge, Proceeding must be set to false at the booking level.
| Status | Booked | Completed | Paid_Out | Description |
|---|---|---|---|---|
| Open | false |
false |
false |
Any charge details can be updated. |
| Booked | true |
false |
false |
Exchange rates have been booked in. Due date cannot be updated, but all other details can. |
| Completed | true |
true |
false |
The FX conversion from transaction to base currency has been completed. Only supplier payment details can be updated. |
Monitoring Bookings & Charges
Once created, field values on bookings and charges can be updated by Roam as your booking progresses.
Configure webhook notifications for booking and charge events to be notified when this occurs.
Reconciling Payments
Payments are allocated to a booking as they are received. Note that payments are always denominated in the transaction currency of a booking and will be applied to a charge based on the due date of that charge.
Configure webhook notifications for payment events to be notified when this occurs.
Key Parameters
Understanding these parameters is central to managing bookings through Roam.
Booking Parameters
TXN_Currency— The currency, set at booking level, that a traveller will use to make inward payment to Roam. If available, this should be set to the preferred currency of the traveller’s region. Supported values: USD, AUD, GBP, EUR, CAD, SGD, AED.Quote_Reference— The internal reference number of the booking from your CRM. This must be unique across the Roam platform and will be used in payout reports for ease of tracking.Consultant_Email— The email address of the sales consultant managing this booking. This is used in authentication flows and must match the value stored on the Roam platform.
Charge Parameters
BSE_Currency— The currency, set at charge level, that your business raises invoices in. These typically align to the underlying currencies of the services being sold. Roam will pay out in this currency to your nominated bank account. Supported values: ZAR, USD, EUR, GBP.Due_Date— The due date displayed to travellers for when a charge is due to be paid. If funds are received before this date, the charge will only be completed on the due date.
Making a Test Payment
The following flow can be used to test traveller payments within the sandbox environment.
-
Create a test booking and add a charge
Use
CreateBookingto create a booking using dummy details.Then use
CreateChargeto add at least one charge with a near-term due date to the booking. This creates the payable amount presented to the traveller during checkout. -
Run
UpdateBookingand setProceeding = trueThis changes the booking status from “Quote” to “Proceeding” and opens the payment gateway. Until this update is made, travellers will not be able to access payment functionality.
-
Open the
Booking_Summary_LinkThis is the traveller-facing booking summary page returned from the booking response and is the same link shared with travellers or embedded within your application.
-
Click the “Pay Now” button
This will redirect the traveller to the payment gateway where payment can be made by card or bank transfer.
For testing, only card payments will be reconciled to a booking.
-
Complete the checkout flow
The email address displayed during checkout is taken from
Client_Email.For testing purposes, this should be set to an internal email address before initiating payment. We recommend populating
Client_EmailduringCreateBookingorUpdateBooking. -
Use the following test card details
Field Value Card Number 4242 4242 4242 4242Expiry Date Any future date CVC Any 3 digits -
Confirm successful payment
Once payment is complete:
A success screen will be shown in the checkout flow
A confirmation email will be sent to the
Client_EmailA payment event notification will be sent to your webhook endpoint
The booking will be confirmed and a payment will be reconciled against the booking
The
Booking_Summary_Linkwill reflect the reconciled payment after page refresh
Error Codes
All API errors returned include a standardised error code, message and description to help identify and resolve issues consistently across all services.
| Code | Message | Description |
|---|---|---|
| ERR001 | Account not found | The account id listed as a parameter in the request is not related to an account in Roam. |
| ERR002 | Consultant not found | The consultant email address listed as a parameter in the request is not related to this account in Roam. |
| ERR003 | Booking not found | The booking id listed as a parameter in the request is not related to this account in Roam. |
| ERR004 | Charge not found | The charge id listed as a parameter in the request is not related to this account in Roam. |
| ERR005 | Booking already exists | The booking Quote Reference listed as a parameter in the request needs to be unique and is already related to another booking in Roam. |
| ERR006 | TXN currency update with confirmed booking | The TXN currency cannot be changed as booking has been confirmed. |
| ERR007 | Travel start date in the past | The travel start date cannot be in the past when ticking proceeding. |
| ERR008 | Travel end date before travel start date | The travel end date must be later than travel start date when ticking proceeding. |
| ERR009 | Client name incomplete | At least client first or last name must be completed when ticking proceeding. |
| ERR010 | Passengers incomplete | At least one passenger must be added to the booking. |
| ERR011 | Itinerary link format | The itinerary link is not a valid URL. |
| ERR012 | TXN currency selected is not available to this account | The transaction currency listed as a parameter in the request is not supported for this account in Roam. |
| ERR013 | Refresh rates with proceeding | The booking FX rates cannot be refreshed as it is marked as proceeding. |
| ERR014 | Proceeding with invalid rates | The booking cannot be marked as proceeding as FX rates are invalid. |
| ERR015 | Charge due date in the past | The charge due date cannot be set in the past. |
| ERR016 | Negative charge type mismatch | The charge type can only be Refund or Credit when the amount is negative. |
| ERR017 | Refund without spot contract | The refund due date cannot be set more than 7 days in the future. |
| ERR018 | Forward contracts are not available to this account | The charge due date cannot be set more than 7 days in the future as this feature is not supported for this account in Roam. |
| ERR019 | Charge amount zero | The charge amount cannot be zero when creating a charge. |
| ERR020 | Supplier payment without beneficiary | The beneficiary id listed as a parameter in the request is not related to this account in Roam or does not match the BSE currency of the charge. |
| ERR021 | BSE currency selected is not available to this account | The base currency listed as a parameter in the request is not supported for this account in Roam. |
| ERR022 | Charge edit with proceeding | The charge cannot be edited as the booking is marked as proceeding. |
| ERR023 | Charge edit with invalid rates | The charge cannot be edited as booking rates are invalid. |
| ERR024 | Charge booked | The charge due date cannot be edited as it has already been booked in. |
| ERR025 | Supplier assigned | The charge supplier cannot be edited as it has already been assigned for payout. |
| ERR026 | Charge completed | The charge cannot be edited as it has been completed. |
| ERR027 | Charge type not available | The charge type is not available to this account. |