Download OpenAPI specification:Download
The Rezdy Agent API allows querying products, availability, and make bookings for suppliers who have agreed to be distributed.
Since the API is based on REST principles, it's very easy to write and test applications. You can use your browser to access URLs, and you can use pretty much any HTTP client in any programming language to interact with the API. Features
APIs are designed for programmers, so if you don't speak any computer language, we have solutions that should be easier for you to use. Rezdy provides a range of plugins for you to integrate on your website, that don't involve using our API directly. To learn more, check the integration plugins available in your Rezdy account, or read this overview of our iframe plugins
If you'd like to build a new service around Rezdy's software, require additional APIs, or would like Rezdy to directly integrate with your company's software, get in touch with our team so we can review your project and discuss its feasibility.
Rezdy offers different API products for different types of businesses. Make sure to choose the right one for your needs.
Rezdy API for agents
REST API for Rezdy agents and OTAs (online travel agents), providing functionality to resell suppliers products, including pulling shared products, availability and pricing from Rezdy, and pushing bookings and cancellations to Rezdy.
Rezdy API for agents specification
Rezdy API for suppliers
REST API for suppliers using Rezdy Booking Software provides functionality to manage their Rezdy inventory and booking capabilities.
Rezdy API for suppliers specification
RezdyConnect (RC)
The RezdyConnect API powers the supply side of the Rezdy Channel Manager tool. The API is designed for suppliers using other ticketing systems, allowing them to import and resell their products through Rezdy’s connected channels. Rezdy pulls availability and pricing, and pushes bookings and cancellations to the supplier’s booking system.
Rezdy Webhooks
Webhooks allow 3rd party applications to be notified or updated when certain events happen on Rezdy, by sending data to configured URLs.
This specification is built upon OpenAPI Specification version 3.0.x.
The examples in the text as well as request and response payloads, use preset data in Rezdy staging environment, and demo accounts with special read-only API Keys:
API specification demo supplier
with API key 5f4b36ff169047a4a5682cba7e07fea4
API specification demo agent
with API key 69f708868ddc45eaa1f9b9fad1ddeba5
You can use the accounts to try any GET calls, however, POST, PUT and DELETE methods are blocked for this API key to preserve the data and will result in the following error
{
"requestStatus": {
"success": false,
"error": {
"errorCode": "6",
"errorMessage": "Client not authorised"
}
}
}
Rezdy API is versioned and you must include the version in the URL you're calling. Our API is actively updated within the same version, but these are non-breaking changes and therefore the version will not be updated. We will increase the version for any major breaking change.
Please check the changelog for details of changes.
We are currently on v1 of the Rezdy API. If, for example, you were accessing the Products endpoint, the URl should be structured as:
https://api.rezdy.com/v1/products
You can also use /latest/ to automatically use the latest available version:
https://api.rezdy.com/latest/products
We have Staging and Production environment. Use the Staging environment to test your integration to make sure it is ready before connecting to the Production environment. Calls to the Rezdy Staging environment include payment processing through payment gateways are done against third-party sandbox environments.
Production and Staging environments are currently completely disconnected, accounts and other data are not replicated, thus you need to create a new account and generate a new API key for each environment.
Environment | Application URL | API URL | API Documentation URL |
---|---|---|---|
Staging | https://app.rezdy-staging.com | https://api.rezdy-staging.com | https://developers.rezdy-staging.com |
Production | https://app.rezdy.com | https://api.rezdy.com | https://developers.rezdy.com |
We release new updates to the Staging environment approximately one week before they are released to production, so there may be differences. These differences will be represented in the documentation available for each environment as outlined above. Check the changelog for details.
For simple integrations, it is easier to test using the production environment, booking only Test products from our Rezdy Agent Certification
supplier.
On the Staging environment, you can activate our test supplier account with credit card number 4242424242424242 which will prevent the account from expiring due to the trial ending.
All requests must use HTTPS, the API is not available on non-SSL/TLS ports.
We do not allow Cross-Origin Resource Sharing (CORS), REST calls to Rezdy API should not be made directly from a browser.
All API calls require a valid API Key. It must be passed as a query parameter or HTTP header, with all requests, using the following format:
GET https://api.rezdy.com/v1/products?apiKey=XXXXXXXXXXXXXXXXXXXX
or
GET https://api.rezdy.com/v1/products
HTTP headers:
apiKey: XXXXXXXXXXXXXXXXXXXX
To obtain your API Key, please log in to your Rezdy Booking Software and send a request by going to the menu item Integrations > Rezdy API > Request API Key. If you do not see this menu item, please contact support@rezdy.com
Keep API key confidential and do not publish it to any publicly available repository in a version control system. Malicious bots are frequently scanning for such vulnerabilities.
The Rezdy API supports UTF-8 encoded JSON payload. You must include both Accept and Content-Type headers to your requests as follows:
Content-Type: application/json; charset=UTF-8
Accept: application/json
All responses will contain a "requestStatus" element. That element will tell you if your request was successful and may contain error or warning messages.
Successful request:
{
"requestStatus": {
"success": true,
"version": "v1"
}
}
Request with error:
{
"requestStatus": {
"success": false,
"error": {
"errorCode": "6",
"errorMessage": "Invalid API Key"
}
}
}
Requests that return multiple items are paginated to 100 items by default. You can control pagination by using the offset
(default:0
) and limit
(default: 100
) query parameters. The custom limit may not exceed 100, except for specific endpoints if mentioned in their description.
For example:
GET /products?offset=0&limit=100
GET /products?offset=100&limit=100
GET /products?offset=200&limit=100
There are 2 date formats in our API model.
The first one is ISO8601 format, and typically fields such as startTime, endTime, dateCreated, dateUpdated are formatted this way.
The other one is a supplier's localized date format, which is based on a supplier's timezone setup on Rezdy. Typically, used by fields startTimeLocal/endTimeLocal.
How to use them in API requests
These two types are mostly exposed in pairs in the payloads or query parameters as startTime & startTimeLocal or endTime & endTimeLocal. For better convenience, you can choose which format to use. General rules of thumb are:
Local format does not contain timezone information, the format is yyyy-MM-dd HH:mm:ss, e.g.:
2014-10-30 09:00:00
Using local date format is recommended, as there is no need to do any timezone conversions when displaying data such as local tour start time to an end user.
If you use ISO8601 format, you have to convert times to the supplier’s timezone when you want to display dates and times for a tour. For example, if a supplier runs a tour on 30 Oct 2014 at 9:00 AM in the “Sydney/Australia” timezone, time in ISO8601 format returned by the API will be:
2014-10-29T22:00:00Z
That’s because 2014-10-29T22:00:00Z is the same time as 2014-10-30T09:00:00+11:00. You can send any of these formats in your API calls and they’re both valid and both represent the same timestamp.
You can retrieve the supplier’s timezone in GET /products
calls (Product.timezone
). Please be mindful of Daylight Savings Time when converting timestamps. You should always use the proper timezone (i.e. Australia/Sydney
) instead of the time offset (+10:00
) because the latter can vary during the year (i.e. Sydney is +10:00
in winter and +11:00
in summer)
API use is restricted to 100 calls per minute, per API Key. We may alter this limit based on usage patterns. If you reach your limit, you will receive an HTTP Status 406 response with message "Too Many Requests".
To provide the best experience to your customers and to avoid hitting the rate limits, you should implement some form of caching on your end rather than calling the Rezdy API for each request. For example, a typical browsing + booking process could follow this caching strategy:
Customer action on your website | Rezdy API Call | Caching recommendation |
---|---|---|
Browse product 1 | GET /products/{product1} | Cache for 24+ hours |
Check product 1 availability | GET /availability | Cache for 24 hours |
Browse product 2 | GET /products/{product2} | Cache for 24+ hours |
Check product 2 availability | GET /availability | Cache for 24 hours |
Add product 2 to shopping cart – Starts checkout | GET /availability | No Cache – confirms product is still available |
Completes checkout | POST /bookings | No Cache |
The following error codes can be returned in the requestStatus object
Error code Meaning | Details |
---|---|
1 UNKNOWN | Indicates an unknown error. |
2 NO_IMPLEMENTATION | Indicates that the target API has no implementation for the request. |
3 BIZ_RULE | Indicates that the message has passed a low-level validation check, but that the business rules for the request message were not met. |
4 AUTHENTICATION | Indicates that credentials are invalid |
5 AUTHENTICATION_TIMEOUT | Indicates that the security credentials in the message have expired |
6 AUTHORIZATION | Indicates that credentials are valid but not enough permissions to execute that call |
7 PROTOCOL_VIOLATION | Indicates that a request was sent within a message exchange that does not align to the message |
8 TRANSACTION_MODEL | Indicates that the target business system does not support the intended transaction-oriented operation |
9 AUTHENTICAL_MODEL | Indicates the type of authentication requested is not recognized |
10 MISSING_FIELD | Indicates that an element or attribute that is required in by the schema (or required by agreement between trading partners) is missing from the message |
11 AUTOMATED_PAYMENTS_PRICE_ TOO_LOW_TO_COVER_FEES |
Indicate that automated payment booking failed |
12 AUTOMATED_PAYMENTS_PRICE_ TOO_LOW_FOR_AGENT_COMMISSION |
Indicate that automated payment booking failed |
13 PAYMENT_CARD_TYPE_DECLINED | Indicate that the card type is invalid |
14 PAYMENT_CARD_TYPE_REJECTED | Indicate that the card type is invalid |
15 PAYMENT_ERROR | Indicate that payment information is invalid |
16 SINGLE_ORDER_LINE_ITEM_ ALLOWED |
Indicate that only a single item per order can be booked for this supplier |
17 PAYMENT_REQUIRED_SCA_ ACTION |
Indicates that the payment should be completed performing strong customer authentication (SCA) |
18 MINIMUM_QUANTITY_REQUIRED | Indicate that quantities are less than the minimal requirement |
19 MAXIMUM_QUANTITY_REACHED | Indicate that quantities are higher than the maximum requirement |
20 DOWNSTREAM_ERROR | Indicate downstream error |
21 NOT_ENOUGH_SEATS_AVAILABLE | Indicate that there are not enough seats available for this session |
22 SESSION_NOT_FOUND | indicate that session doesn't find in our system |
23 PRODUCT_NOT_FOUND | Indicate that product doesn't find in our system |
24 ORDER_NOT_FOUND | Indicate that order doesn't find in our system |
25 ORDER_LINE_ITEM_NOT_FOUND | Indicate that order line item doesn't find in our system |
26 MIN_BOOK_AHEAD_START_TIME | Indicate that the date of booking must be booked {n} duration before tour start |
27 MIN_BOOK_AHEAD_END_TIME | Indicate that the date of booking must be booked {n} duration before tour end |
28 INVALID_CUSTOMER_EMAIL | Indicate that the customer email address is not in a valid format |
29 BLOCKED_EMAIL | Indicate that the customer email address has been blocked |
30 DOWNSTREAM_TIMEOUT | Indicate that the source of the error is a timeout in communication with downstream services. You could retry this call later. |
31 INTERNAL_ERROR | Indicate that Rezdy failed to process a request because of an internal error |
32 INVALID_PRICE_OPTION | Indicate that the price option used for a booking does not exist on the product |
33 REZDYCONNECT_EXTERNAL_SYSTEM | Indicate that external RezdyConnect system did not return mandatory data to finish operation. |
34 OTHER_OPERATION_IN_PROGRESS | Indicate that currently there is a session update process running for received product code. You can retry this call shortly. |
API real-time and historical uptime/availability details are available here.
We use a highly available architecture and hosting resources with Amazon Web Services. Our standard releases are transparent, therefore causing no downtime, and are backwards-compatible unless it is a major version release (see versioning above). In case a maintenance period is required we will alert users via in-app messages and announcements on our support forum and our Rezdy Ops Twitter account.
Our API is in active development with regular new endpoints and features being added to support more use cases. There are, however, some current limitations:
Supplier (Tour Operator)
A business supplying products for resale to agents channels or Rezdy marketplace (B2B) or using Rezdy booking software to sell them to end customers (B2C).
A supplier can also act as an agent and resell other suppliers' products. In that case, refer to Rezdy API specification for Agents
Agent (Reseller)
A business reselling supplier products.
Product (Tour, Activity)
An experience that a supplier is selling on Rezdy.
Booking (Order)
Transaction of selling a product or multiple products belonging to the same Rezdy supplier. Booking and order might be used interchangeably, but refer to the same entity across the specification.
Booking item (Order item)
A booking consist of a single or multiple items. Each item is linked to a single product, a single or no session (depending on product booking mode), and can have different quantities and tour participants.
Reservation
An un-confirmed booking (A booking with orderStatus == PROCESSING
) that temporarily holds availability.
At the moment reservations are not available in agent API.
Session (Tour session)
A time slot when a product (tour or activity) is scheduled to run at. A session provides information such as start and end time, total capacity (seats
), remaining capacity (seatsAvailable
) and pricing (priceOptions
).
Customer
An entity representing information about an end customer who booked a product. A booking can have multiple items and each can have a list of participants based on the booked quantities, but only a single main customer per booking.
Participant
An entity representing information about additional tour participants. A booking item is associated with a list of participants.
The first participant always represents the main customer. For your convenience Rezdy automatically copies information from customer entity into the booking first participant in booking requests
Extra (Product extra)
An additional item or service that can be booked together with a product. Extras do not have their own availability.
Booking field
A booking questions or information provided during a booking process. Booking fields can be stored on order level (a booking field per booking) or participant level (a booking field per participant). Booking fields can be mandatory or optional and may require a certain format.
See Using Booking Fields for details.
Pickup
A list of pickup locations and additional pickup instructions that are associated with a product, that customers can choose from during booking.
See Providing customer with pickups for details.
Resource
An entity such as tour guide, car, boat, etc. that can be associated with sessions. A resource limits session availability and can be shared across multiple sessions.
Coupon (Voucher, Promocode)
A discount that suppliers can offer for customers to apply for their product bookings.
At the moment coupons are not available in agent API.
Manual payment
A booking payment that requires manual reconciliation between agent and supplier outside of Rezdy.
See Automated and Manual payments for details.
Automated payment
A full booking payment that is required at the time of booking, and is automatically split and paid to supplier and agent.
See Automated and Manual payments for details.
Marketplace
The two-sided B2B platform provided by Rezdy where suppliers and resellers can search, connect and trade with one another. Only marketplace rate products are available on Rezdy marketplace and only automated payments can be used for marketplace bookings.
Marketplace rate
Marketplace rate allows suppliers to select products available for Rezdy marketplace and set up their commission amount.
Negotiated rate
Negotiated rate allows agents and suppliers to agree on a specific commission amount to be used for selected products for their bookings.
Category
Product categorisation, which allows agents or suppliers to assign Rezdy products to logical groups.
Manifest
A functionality around tour participant manifest, such as check-in, no show flags.
Question: Do I still need to send my agent booking confirmations to suppliers.
No, Rezdy will send booking confirmation notification emails to suppliers. All bookings will automatically drop into the Orders section for the Tour Operator which is one of the major benefits of Rezdy.
Question: Do we need to send a booking confirmation to customers when we make a reservation.
Rezdy will send booking confirmations directly to customers when a booking is made. You can disable this email when sending bookings through the API.
Question: Sometimes we agree on discounts with operators. These discounts are often exclusive and other times they may apply across the board for all agents. How do we process these reservations in Rezdy when the discounted prices are not set up by the operator in Rezdy.
We have an agent option that allows you to override the supplier’s prices.
Question: Is it possible to search the products by address, including country, region, city, etc.
You can only search products by geolocation (latitude and longitude). In such case we will return products up to 500 km away, ordered by distance from that point. We expect a client system to have some caching or database layer, where you store products you are reselling. You should not make an API query for each end-user request
You need to follow these steps to use the Agent API:
You have to request to obtain an initial API Key from our support team. Requests to generate an API key may take up to "48" hours to process. Once generated, the key will automatically appear on the Rezdy API page on the Integrations menu for immediate use. You can request your API key by logging into Rezdy and clicking:
The most typical use case for agent integration with Rezdy API, is to facilitate Rezdy API data to build a booking site. These examples show the API requests and responses for a typical booking flow. It helps you understand the process to replicate the Rezdy booking form through the API.
That typically consists of the following steps:
Agents do not own any product. You can use the GET /products/marketplace endpoint to load products that suppliers have shared. Product details include general pricing, description and photos. There are many attributes available on the service, allowing you to filter products by location, supplier, category, rate type, etc.
To optimise the performance it is better to call search products and cache the retrieved products for at least 24 hours. Products do not tend to be updated by suppliers often.
Search filters should be rather implemented on client side to avoid round-trips to Rezdy API for each user query. Search marketplace is a resource intensive query and depending on the search filters used, it can take up to several seconds to get a response.
Example request:
GET https://api.rezdy-staging.com/v1/products/marketplace?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
Example response:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"products": [
{
"productType": "ACTIVITY",
"name": "Double dive with sharks",
"shortDescription": "Double dive with grey nurse or leopard sharks, depending on the season.",
"description": "Double dive with grey nurse or leopard sharks, depending on the season. Boat dive with a snack provided during the break between the dives. The dive site is suitable for open water divers.",
"productCode": "PWQF1Y",
"internalCode": "DIVING",
"supplierId": 13398,
"supplierAlias": "apispecificationdemosupplierdonotedit",
"supplierName": "API specification demo supplier (DO NOT EDIT)",
"timezone": "Australia/Sydney",
"advertisedPrice": 200.0,
"priceOptions": [
{
"price": 250.0,
"label": "Adult",
"id": 929159,
"seatsUsed": 1,
"productCode": "PWQF1Y"
},
{
"price": 200.0,
"label": "Student",
"id": 929160,
"seatsUsed": 1,
"productCode": "PWQF1Y"
}
],
"currency": "AUD",
"unitLabel": "Participant",
"unitLabelPlural": "Participants",
"quantityRequired": true,
"quantityRequiredMin": 1,
"quantityRequiredMax": 50,
"images": [
{
"id": 22650,
"itemUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8351.jpg",
"thumbnailUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8351_tb.jpg",
"mediumSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8351_med.jpg",
"largeSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8351_lg.jpg"
},
{
"id": 22651,
"itemUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8378.jpg",
"thumbnailUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8378_tb.jpg",
"mediumSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8378_med.jpg",
"largeSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN8378_lg.jpg"
},
{
"id": 22652,
"itemUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1387.jpg",
"thumbnailUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1387_tb.jpg",
"mediumSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1387_med.jpg",
"largeSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1387_lg.jpg"
},
{
"id": 22653,
"itemUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1402.jpg",
"thumbnailUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1402_tb.jpg",
"mediumSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1402_med.jpg",
"largeSizeUrl": "https://img.rezdy-staging.com/PRODUCT_IMAGE/13398/DSCN1402_lg.jpg"
}
],
"bookingMode": "INVENTORY",
"charter": false,
"terms": "",
"bookingFields": [
{
"label": "First Name",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": true,
"visiblePerBooking": true,
"fieldType": "String"
},
{
"label": "Last Name",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": true,
"visiblePerBooking": true,
"fieldType": "String"
},
{
"label": "Mobile",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": true,
"fieldType": "Phone"
},
{
"label": "Email",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": true,
"fieldType": "String"
},
{
"label": "Special Requirements",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": true,
"fieldType": "String"
},
{
"label": "Certification level",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": true,
"visiblePerBooking": false,
"fieldType": "String"
},
{
"label": "Certification number",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": true,
"visiblePerBooking": false,
"fieldType": "String"
},
{
"label": "Certification agency",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": true,
"visiblePerBooking": false,
"listOptions": "PADI\r\nSSI\r\nSDI",
"fieldType": "List"
}
],
"latitude": -28.6113488,
"longitude": 153.629085,
"confirmMode": "AUTOCONFIRM",
"confirmModeMinParticipants": 0,
"agentPaymentType": "FULL_AGENT",
"maxCommissionPercent": 10.0,
"commissionIncludesExtras": true,
"dateCreated": "2025-08-30T23:49:55Z",
"minimumNoticeMinutes": 1440,
"durationMinutes": 180,
"dateUpdated": "2025-08-31T00:12:33Z",
"pickupId": 475,
"locationAddress": {
"addressLine": "Julien rocks",
"postCode": "",
"city": "Byron Bay",
"state": "",
"countryCode": "au",
"latitude": -28.6113488,
"longitude": 153.629085
},
"languages": [
"en_au"
],
"tags": [
"TYPE:Activity"
],
"waitListingEnabled": false,
"isApiBookingSupported": true
},
...
]
}
The response includes a few important attributes that you will need to make a booking:
PAYOUTS
means an automated payment, where Rezdy automatically split the customer’s payment between supplier and agent, based on commission settings. Other types require manual reconciliation between agent and supplier outside of Rezdy. The agentPaymentType value can be one of these:PAYOUTS
– Rezdy Automated payment: Full payment is required at time of booking and it is automatically split and paid to supplier and agent. This requires a Stripe token to be sent alongside the booking, see RezdyPay and Automated payments processing.FULL_AGENT
– Full payment to an agent at the time of booking. Manual reconciliation between agent and supplier outside of Rezdy.DOWNPAYMENT
– Commission payment to an agent at the time of booking. The balance is usually paid by the customer to the supplier on the day of the tourFULL_SUPPLIER
– Full payment to a supplier at the time of booking. Manual reconciliation between supplier and agent outside of Rezdy.NONE
– No payment required at time of booking, no payment tracked on Rezdy.Once you have product details, the next step is to retrieve and cache products availability GET /availability endpoint to load availability.
Example Request
GET https://api.rezdy-staging.com/v1/availability?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&productCode=PWQF1Y&startTimeLocal=2025-10-01 00:00:00&endTimeLocal=2025-11-01 00:00:00
This loads all the available sessions for product with code PWQF1Y for the whole month of October in the supplier’s local timezone.
It is possible to load availability for multiple products in a single request. Simply add multiple productCode attributes to the request:
GET https://api.rezdy-staging.com/v1/availability?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&productCode=P00TNX&productCode=PWQF1Y&startTimeLocal=2025-10-01 00:00:00&endTimeLocal=2025-10-03 00:00:00
We recommend using startTimeLocal and endTimeLocal attributes, instead of startTime and endTime. These older attributes required you to send the timezone as part of your request.
GET https://api.rezdy-staging.com/v1/availability?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&productCode=P00TNX&productCode=PWQF1Y&startTime=2025-10-01T00:00:00%2B11:00&endTime=2025-10-03T00:00:00%2B11:00
Example Response
{
"requestStatus": {
"success": true,
"version": "v1"
},
"sessions": [
{
"id": 2788381,
"productCode": "PWQF1Y",
"startTime": "2021-10-01T23:00:00Z",
"endTime": "2021-10-02T02:00:00Z",
"startTimeLocal": "2021-10-02 09:00:00",
"endTimeLocal": "2021-10-02 12:00:00",
"allDay": false,
"seats": 50,
"seatsAvailable": 50,
"priceOptions": [
{
"price": 250.0,
"label": "Adult",
"id": 929159,
"seatsUsed": 1,
"productCode": "PWQF1Y"
},
{
"price": 200.0,
"label": "Student",
"id": 929160,
"seatsUsed": 1,
"productCode": "PWQF1Y"
}
]
}
]
}
Important information here is:
Now when you built and cached products and availability with a price that you are interested in reselling, the next step is a checkout flow.
When a customer selects a specific time and checks out, you should verify real-time availability of the chosen session. Similarly, as the step above, except startTimeLocal and endTimeLocal will be set as the customer's chosen time. In the example we assume customer selecting a tour starting at 9:00 am local time on the 1st of October.
GET https://api.rezdy-staging.com/v1/availability?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&productCode=PWQF1Y&startTimeLocal=2025-10-01 09:00:00&endTimeLocal=2025-10-01 09:00:00
If the seats are still available, you can create a booking in Rezdy by calling the POST /bookings endpoint.
The following request creates a simple booking for 1 Adult for the product we previously loaded. It’s a $250 booking for November 3rd at 9:00AM in Sydney, with a full payment to agent recorded. That means you charged the customer outside Rezdy, on your own website/gateway. You record that payment in the booking for a record keeping purpose only, but Rezdy will not process any payment in this case.
When a product is set up with agentPaymentType=PAYOUTS
, follow the booking flow and payload described in RezdyPay and Automated payments processing
For the sake of simplicity, the example does not cover participant booking fields, order booking fields, pickups and other booking features, but make sure to support them in a real case scenario too as they might be an essential part for many suppliers.
Example Request
POST https://api.rezdy-staging.com/v1/bookings?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{
"customer": {
"firstName": "Rick",
"lastName": "Sanchez",
"phone": "+61484123456"
},
"items": [
{
"productCode": "PWQF1Y",
"startTimeLocal": "2025-10-01 09:00:00",
"quantities": [
{
"optionLabel": "Adult",
"value": 1
}
]
}
],
"payments": [
{
"amount": 250,
"type": "CASH",
"recipient": "AGENT",
"label": "Paid in cash to API specification demo company"
}
]
}
PUT /bookings endpoint allows you to amend or provide additional information to an existing booking.
The example below updates the reseller booking reference, comments, customer pickup location and participant booking fields.
Example Request
PUT: https://api.rezdy-staging.com/v1/bookings/RKQ0687?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{
"resellerReference ": "123456789",
"resellerComments": "Here come agent comments that are visible to both booking agent and supplier",
"orderNumber": "RKQ0687",
"status": "CONFIRMED",
"supplierId": 13398,
"supplierName": "API specification demo supplier (DO NOT EDIT)",
"supplierAlias": "apispecificationdemosupplierdonotedit",
"resellerId": 13399,
"resellerName": "API specification demo agent (DO NOT EDIT)",
"resellerAlias": "apispecificationdemoagentdonotedit",
"customer": {
"id": 29665,
"firstName": "Rick",
"lastName": "Sanchez",
"name": "Rick Sanchez",
"phone": "+61484123456"
},
"items": [
{
"pickupLocation":
{
"locationName": "Divers hotel"
},
"productName": "Double dive with sharks",
"productCode": "PWQF1Y",
"startTime": "2025-09-30T23:00:00Z",
"endTime": "2025-10-01T02:00:00Z",
"startTimeLocal": "2025-10-01 09:00:00",
"endTimeLocal": "2025-10-01 12:00:00",
"quantities": [
{
"optionLabel": "Adult",
"optionPrice": 250.0,
"value": 1
}
],
"totalQuantity": 1,
"amount": 250.0,
"extras": [],
"participants": [
{
"fields": [
{
"label": "First Name",
"value": "Rick"
},
{
"label": "Last Name",
"value": "Sanchez"
},
{
"label": "Certification level",
"value":"Open Water"
},
{
"label": "Certification number",
"value":"123456798"
},
{
"label": "Certification agency",
"value":"PADI"
}
]
}
],
"subtotal": 250.0
}
],
"totalAmount": 250.0,
"totalCurrency": "AUD",
"totalPaid": 250.0,
"totalDue": 0.0,
"dateCreated": "2025-09-07T00:21:22Z",
"dateConfirmed": "2025-09-07T00:21:22.107Z",
"datePaid": "2025-09-07T00:21:22.098Z",
"payments": [
{
"type": "CASH",
"amount": 250.0,
"currency": "AUD",
"date": "2025-09-07T00:21:22.224Z",
"label": "Paid in cash to API specification demo company",
"recipient": "RESELLER"
}
],
"fields": [
{
"label": "Barcode",
"value": "RKQ0687"
}
],
"source": "MARKETPLACE_PREF_RATE",
"resellerSource": "API",
"sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
"commission": 25.0,
"vouchers": [],
"barcodeType": "QR_CODE"
}
To cancel a booking use DELETE /bookings endpoint as in example below with an empty request body.
Example Request
DELETE https://api.rezdy-staging.com/v1/bookings/RKQ0687?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
Note: This feature is disabled by default. Please contact Rezdy Support if you want to enable it.
Two steps booking flow is useful for minimising availability errors during a customer checkout, thereby achieving a better customer experience.
Typical flow with 2 steps booking process follow these steps:
PROCESSING
status) upon a customer cart checkout. This will create an order, which holds reserved product's session's availability for at least 60 minutes or until cancelled. CONFIRMED
). Alternatively, cancel the reservation to free the availability when checkout process was abandoned or failed. If it's not done manually, Rezdy will do so after 60 minutes.Example requests to do a 2 steps booking are similar to a standard create and update booking, the only difference is how we set a field status
Create a reservation - a booking in the PROCESSING
status:
POST https://api.rezdy.com/v1/bookings/?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{
"status": "PROCESSING",
"customer": {
...
}
Confirm a reservation - update the booking RKM1ULT
to CONFIRMED
status:
PUT https://api.rezdy.com/v1/bookings/RKM1ULT/?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{
"status": "CONFIRMED",
"customer": {
...
}
Note: If a product confirmMode
is not set as AUTOCONFIRM
the resulting order status might not be CONFIRMED
. An order can end up with a PENDING_SUPPLIER
status. Another case is, if the used payment option requires customer to process a payment in a third party provider, such as PayPal. In such case the status will be PENDING_CUSTOMER
Alternatively, to free up the reserved availability, update a booking RKM1ULT
to CANCELLED
or ABANDONED_CART
status, the later option will cause the order to be hidden from UI screens:
PUT https://api.rezdy.com/v1/bookings/RKM1ULT/?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{
"status": "CANCELLED",
"customer": {
...
}
A booking request is slightly different when using manual versus automated payment.
Automated payment must be used for booking a product without having any negotiated rate with the product's supplier, or when the supplier has explicitly chosen to use automated payments with a negotiated rate. For more details about the payment types see the articles about Rezdy Marketplace. Similar booking flow and payload is used to charge a customer credit card using RezdyPay payment gateway (or deprecated StripeConnect payment gateway).
For manual payments (payment taken by the agent, not processed through Rezdy), you must send a "payments" field with details of the payment, for the booking to be marked as fully paid:
{
"payments": [
{
"type": "CASH",
"amount": "200",
"currency": "USD",
"date": "2025-10-01T10:26:00Z",
"label": "Payment processed by Rezdy Demo account"
}
]
}
To process a credit card payment using RezdyPay gateway or automated payment bookings. Which are essentially the following configurations:
agentPaymentType=PAYOUTS
. Full payment must be processed through Rezdy.RezdyPay payment gateway uses Stripe as an underlying payment provider to process payments though Rezdy platform account, using your Stripe account as a charge destination using Stripe Charge API. Therefore, you will need to implement an extra call directly to Stripe, before calling Rezdy Booking API.
Use the following 2 calls booking flow:
1. Request a Stripe card token, by sending the customer’s credit card details directly from the customer's browser to Stripe.
You must use a client-side library (Checkout, Elements, or mobile libraries) to perform this process, client-side. You must NOT use the Stripe API. Use Rezdy’s Stripe publishable key (see below) in your request, for the token to be generated on Rezdy’s account. The card is not charged at this stage.
Rezdy’s Stripe publishable keys are:
Staging environment: pk_test_51KW8A8ItvA6u4On8YM6AE95ytcqBr0LeRBEEFw4f5MDQPTDBWVt2TAWXhfynCn7NUVwaGc2eP431DNCkmfMaB0AF00firEVJ58
Production environment: pk_live_51H4gSPHO6p5n6bFnuGRLb84FCiptIUAwmgYaBubvp5A09HujFx54ExvLkXOufEcqrHsaCWvnmZfO33efkIFVbpIv00PkoJDRDA
Staging environment keys are usable on api.rezdy-staging.com. Production environment key must be used on api.rezdy.com.
2. Call POST /bookings service, but do not include any booking payments data. You must instead send a creditCard.cardToken parameter that is Stripe’s generated token (id field from Stripe’s API response). Rezdy will confirm the booking, consume the token by processing the payment and record payment on the booking object.
{
...
"creditCard": {
"cardToken": "tok_1234zczx9xyzbkBzxcNoabcdef"
}
...
}
Any payment passed in the "payments" field in this case, are considered as payments processed by the agent. E.g. agent discounts given to a customer, and only reduce the agent's commission. This can result in an error "The selling price is too low to cover agent commission.", if the amount after discount/external payment is lower than the supplier's net price + automatic payment booking fee.
Details about the agent discounts.
Call service GET bookings/quote
to obtain a quote for an order. You can pass the same booking object in the quote request as for the POST booking. The service calculates the order amount, commission, etc. the same way as the booking service. See a sample service response with an explanation below (some unrelated fields were omitted in this booking object)
The commission calculation depends on a couple of things.
Firstly, we look for negotiated rates a supplier sent to the agent. If no rates were shared, the supplier's marketplace rates will be used.
For each product, the commission rate can either be a Percentage, or a Net rate.
The total commission for the booking is a sum of the commissions calculated for each booked item (different commission calculation can be applied on each item)
If supplier specified Net Rate commission for the booked item product, the commission is calculated as a difference between the price and the net rate. E.g.
item amount = $100,
net rate = $85
item commission = $15
If supplier specified Percentage commission, the commission is the specified percentage of the amount.
item amount = $100,
percentage = 20%
item commission = $20
Supplier can choose, if the Percentage commission includes extras, in such case, the calculation is:
items amount = $100,
item extras amount = $50
percentage = 20%
item commission = $30
Item commission is the real commission amount, which agent receives, if the automated payments were used, the Rezdy booking fee is not included in the item commission. The item commission will calculated as follow:
item amount = $100,
Rezdy fee = 5%
percentage = 20%
item commission (calculated commission - Rezdy fee) = $15
Commission with custom price
Supplier can allow agents to override item amount. In that case, an agent can specify an amount for each booked item, in the booking request.
If the booking is made by an agent, the commission is adjusted by the price difference:
item catalog price= $100,
item amount (overridden by agent) = $105,
net rate = $85
item commission (item amount - net rate) = $20
In the case of percentage commission:
item catalog price= $100,
item amount (overridden by agent) = $105,
percentage = 20%
item commission (percentage commission - (item amount - item catalog price)) = $25
Price override can be used to provide agent discounts for a product as well, same formulas apply:
item catalog price= $100,
item amount (overridden by agent, $5 discount) = $95,
net rate = $85
item commission (item amount - net rate) = $10
There are a few additional rules which apply for the overridden amount:
If manual payments are used, agent can specify arbitrary amount, but the total commission will be adjusted, so the amount will never be less then 0.
If automated payments are used, the amount as has to be at least as high, that the calculated agent commission amount (commission minus Rezdy Fee) will not be negative. A booking request will lower amount will fail.
(applicable for bookings using automated payments only)
There might be situations when you as an agent would like to provide a discount for a booking. E.g. to make a promotion by issuing agent vouchers. Agent discounts will not affect the amount of money, the supplier receive from the booking, they will only lower the commission - similar as lowering the price with the custom price. Advantage is, it's working with the all products with automated payment, the supplier does not need to allow agents to override item amount.
To do a booking with the agent discount, specify all discount payments in the "payments" section.
Sample booking request with $5 agent discount:
Commission with the agent discount
item catalog price= $100,
discount payments = $5,
net rate = $85
item commission (item amount - net rate - discount payments) = $10
There are 3 modes how a product tours can be scheduled in Rezdy, they are called booking modes. It's necessary to take into account the differences between them, for displaying a product availability and making a booking using public API.
These 3 booking modes are:
NO_DATE
Do not ask for any date (I.e. open tickets valid 6 months from purchase date) DATE_ENQUIRY
Require a date but the customer can choose any. There's no availability check. INVENTORY
Require pre-populated availability (date+time)In case of the NO_DATE products, there is no need to specify booking date and time in a booking request. (However there won't be an error if the startTime or startTimeLocal is specified in a booking request, it just won't be used)
We generate a fake session for the NO_DATE products into GET /availability
response, the session startTimeLocal will be midnight and there will be always 999 seats available:
"startTimeLocal": "2016-07-01 00:00:00",
"seats": 999,
For the DATE_ENQUIRY products, the booking date and time is required, however there can be any booking date specified. For a booking time, it's a bit more tricky. Those products can be configured to accept any time
or just predefined
times. How to recognize, if any time
is accepted?
We generate a session for DATE_ENQUIRY products into GET /availability
response. If the product accept the any time
booking, the session startTimeLocal will be a midnight - 00:00:00 time. Otherwise there will be a session for each predefined time.
Availability response - the DATE_ENQUIRY product, which accepts any time booking:
"startTimeLocal": "2016-06-01 00:00:00",
"seats": 999,
Availability response - the DATE_ENQUIRY product with predefined list of booking times (7:00 and 9:00 a.m.):
{
"startTimeLocal": "2016-05-31 07:00:00",
"seats": 999,
...
},
{
"startTimeLocal": "2016-05-31 09:00:00",
"seats": 999,
...
}
This mode is used by most of the products. It means the availability is defined by scheduled sessions. The booking date and time have to match a session startTime.
GET /availability
response of INVENTORY mode products, will contain the list of scheduled sessions with a start time and seats available as the supplier scheduled:
"startTimeLocal": "2016-07-01 09:00:00",
"seats": 20,
Once a pickup is configured for a certain product, the product detail will contain a field pickupId. The Id value is not required for further use in other API calls (it's for the future purpose), for now on it just means the pickups are configured for this product.
For example:
https://api.rezdy-staging.com/v1/products/marketplace?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&search=PWQF1Y
RESPONSE:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"products": [
{
"productCode": "PWQF1Y",
"pickupId": 475,
...
To retrieve configured pickup for the product, with a list of all pickup location, call the service method below:
https://api.rezdy-staging.com/v1/products/PWQF1Y/pickups?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
RESPONSE:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"pickupLocations": [
{
"locationName": "Divers hotel",
"address": "Cape Byron, Byron Bay NSW, Australia",
"latitude": -28.6473671,
"longitude": 153.601977,
"minutesPrior": 30,
"additionalInstructions": "Please be ready 15 minute before the pickup time in the hotel lobby area."
},
{
"locationName": "Seaside hostel",
"address": "Main Beach, Byron Bay NSW, Australia",
"latitude": -28.6412831,
"longitude": 153.6166691,
"minutesPrior": 20,
"additionalInstructions": "Please be ready 15 minute before the pickup time in front of the hostel."
}
]
}
To specify a pickup location for a booking, you just need to send one locationName field value of one of the locations from pickupLocations list.
POST https://api.rezdy-staging.com/v1/bookings?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
REQUEST:
{
"items":
[
{
"productCode": "PWQF1Y",
"startTimeLocal": "2025-08-11 14:00:00",
"quantities":
[
{
"optionLabel": "Adult",
"value": "1"
}
],
"pickupLocation":
{
"locationName": "Divers hotel"
}
}
]
...
}
System will store the pickup location, calculate pickup time and return the pickup instructions.
RESPONSE:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"booking": {
"orderNumber": "R3MPR7Z",
...
"items": [
{
"productName": "DEMO - One day SCUBA diving",
"productCode": "PKVT0E",
"startTime": "2016-07-11T04:00:00Z",
....
"pickupLocation": {
"locationName": "Maroubra Beach",
"address": "Maroubra Beach, New South Wales, Australia",
"pickupTime": "2016-07-11 13:05:00",
"pickupInstructions": "In front of the Maroubra seal surfing club building.\r\nPlease be ready 15 minutes before pickup time."
}
}
],
....
It is also possible to specify a custom pickup location (should be discussed with the product supplier if this option is feasible):
REQUEST:
{
"items":
[
{
"productCode": "PWQF1Y",
"startTimeLocal": "2025-08-11 14:00:00",
"quantities":
[
{
"optionLabel": "Adult",
"value": "1"
}
],
"pickupLocation":
{
"locationName": "Hotel by the sea"
}
}
]
...
}
In this case system stores the pickup location (naturally, it can't calculate the other fields like pickup time or address) and returns the custom pickup location instructions (if specified by the supplier).
RESPONSE:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"booking": {
"orderNumber": "R3MPR7Z",
...
"items": [
{
"productName": "DEMO - One day SCUBA diving",
"productCode": "PKVT0E",
"startTime": "2016-07-11T04:00:00Z",
....
"pickupLocation": {
"locationName": "Hotel by the sea",
"pickupInstructions": "Call us on +61123456 to arrange a pickup from a custom pickup request not listed among the pickup locations.\r\nPlease be ready 15 minute before the pickup time."
}
}
],
....
Please note that we are now enforcing validations on Booking Fields that are being sent through our API. Not only the mandatory fields, but also the format matching their type.
Every booking field has a certain type (see bookingFields.fieldType
) and their value has to be formatted accordingly.
An exception is a string, when the booking field value is a free text.
The bookingFields.fieldType is one of:
The following booking field types need to have specific values.
This field must contain a boolean value. Accepted values are 1, 0, TRUE, FALSE, YES, NO (case insensitive matching)
{
"label": "I agree to receive marketing emails",
"value": "true"
}
This field must be a ISO-8601 date only format yyyy-MM-dd e.g. 1991-01-01
{
"label": "Date of Birth",
"value": "1991-01-01"
}
This field must be in an international format +41 44 668 18 00, or E164 format +41446681800
{
"label": "Mobile",
"value": "+61484123456"
}
List types need to match one of the predefined values, common list types are the following:
This field must be in ISO 3166-1 alpha-2 codes format e.g. Australia -> au, United States -> us (case insensitive matching)
{
"label": "Country",
"value": "AU"
}
Valid genders that are accepted through our API will be: MALE and FEMALE. (case insensitive matching)
{
"label": "Gender",
"value": "MALE"
}
Valid titles that are accepted through our API will be: MR, MS, MRS, MISS. (case insensitive matching)
{
"label": "Title",
"value": "MISS"
}
You are able to suppress Rezdy's notifications to customers when creating or cancelling a booking. You can then send emails & SMS from your own system instead.
To disable them, send the flag "sendNotifications" = "false"
in the booking object in POST /bookings
e.g.:
{
"customer": {},
"items": [],
"sendNotifications": false
}
The flag is only used per request and is not stored.
To suppress notifications when cancelling a booking, you must set it as query parameter in the cancellation request:
DELETE /bookings/{orderNumber}?sendNotifications=false
It is not possible to disable Rezdy's notifications to suppliers and agents. Only the customer notifications can be disabled.
Note: Rezdy emails may include QR codes (if enabled by supplier), which suppliers can use to check-in participants using our mobile apps, see (QR Code Scanner ). If you decide to use your own emails, the booking QR code should be included in the e-mails. The QR code is the Rezdy orderNumber.
The Rezdy API does not expose internal product Ids. You can only use Rezdy-generated product codes, which always start with P, e.g. PVGNQX. However, booking forms use internal product Ids in booking page URLs and widgets, e.g. https://demo-booking-form.rezdy.com/124318/amazing-day-tour
If you need to load product data from the API and then link to the booking form for checkout, you can use the product codes. These 2 URLs will load the same page:
https://demo-booking-form.rezdy.com/124318/amazing-day-tour
https://demo-booking-form.rezdy.com/view/PVGNQX
You can therefore use API product codes for booking form product pages, by using this url:
https://{alias}.rezdy.com/view/{productCode}
Added new error codes
In order to support automated commissions payout via Stripe recipient only account, RezdyPay on staging environment has switched to a new US-based Stripe test account, and the Stripe publishable key for staging environment has changed. The key for production environment remains the same.
Staging environment: pk_test_51KW8A8ItvA6u4On8YM6AE95ytcqBr0LeRBEEFw4f5MDQPTDBWVt2TAWXhfynCn7NUVwaGc2eP431DNCkmfMaB0AF00firEVJ58
A new flag isMultiProductBookingSupported
has been exposed in product endpoint responses. This will allow agents to distinguish if they can allow multiple product checkout, or just do a single product per booking calls.
Rezdy API specification split into agent and supplier portal.
RezdyPay payment gateway has been upgraded and Rezdy uses a new Stripe platform account, to process automated payment bookings, or manual payment bookings with credit card charged though RezdyPay. As a result, new publishable keys need to be used to create a Stripe token.
Staging environment: pk_test_5nODbTMiGQCMOHg0Nt5LzQUV00CcWuIksX
Production environment: pk_live_51H4gSPHO6p5n6bFnuGRLb84FCiptIUAwmgYaBubvp5A09HujFx54ExvLkXOufEcqrHsaCWvnmZfO33efkIFVbpIv00PkoJDRDA
More details are in RezdyPay and Automated payments processing article
isApiBookingSupported
field has been added to Product response model.It provides a convenient way to find out if a product booking is supported via API. Some product types or pricing types or their combinations are not supported in API. If you are planning to implement a booking flow via API, you should filter out the products, if the value of this field is set as false
.
fields
attribute of the Booking model.{
"orderNumber": "R12345",
...
"fields": [
{
"label": "Barcode",
"value": "6000125341"
}
]
}
barcodeOutputType
field. Current values support are:PARTICIPANT
: Barcodes will be generated per participant when the product has been bookedORDER
: Barcodes will be generated only for the order when the product has been bookedbarcodeType
which specifies the format in which the booking barcodes are in. Rezdy supports "TEXT", "QR_CODE", "CODE_39", "CODE_128", "EAN_8", "EAN_13", "ITF"
.apiKey: abcd123
We are introducing a new Staging environment and deprecating our Test environment api.rezdy-test.com. We encourage usage of the new Staging environment which will be more stable than the old test environment and will soon support data replication from our Production environment.
See Environments section in API overview for details
You should now use the same Stripe publishable key for all currencies, when generating tokens for automated payments. We will accept old keys until at least until 30 November 2018, but please migrate to the new keys below:
TEST: pk_test_wGcSehTxQDTLoMRVl6Gv45zy
PROD: pk_live_zKs28ywqmpH5K6Vz9moNGwiM
Added services to create and update products:
More details in this article.
Added information about visible – optional product booking fields: "visiblePerParticipant": true|false, "visiblePerBooking": true|false to BookingFields model
Booking update, for manual payment bookings. Currently, these fields can be updated using the API:
More details in this article.
Added new Resources endpoint with services:
New service methods in Manifest endpoint:
Added duration fields to Product data model
Support of orderStatus field in supplier’s Booking request (Check Supplier API Portal)
##2014-12-01
Load products from the Rezdy Marketplace. Use this service to find products that are available for you to book.
marketplaceRates | boolean set to true to only return products with a marketplace rate. |
negotiatedRates | boolean set to true to only return products with a negotiated rate. If both marketplaceRates and negotiatedRates are true, all products with a rate will be returned |
category | Array of integers <int64> unique [ items <int64 > ] Example: category=1 category ids of categories you'd like to get products from. Multiple values allowed |
language | Array of strings unique Example: language=en_au if set filters only products suitable for the specified languages. Multiple values are allowed |
latitude | number <double> Latitude to sort results from. When sending a center point lat/lng, we will return products up to 500km away, ordered by distance from that point. |
longitude | number <double> Longitude to sort results from. |
minQuantity | integer <int32> Minimum availability for the returned products, this will only return INVENTORY bookingMode products, which have any available session with the specified minimum quantity. |
startDate | string Example: startDate=2014-03-01T00:00:00Z Optional date in |
startDateLocal | string startDate time in supplier's local timezone, format is |
automatedPayment | boolean If true, this will only return products with an automated commission payment; if false, return products of non automated commission payment |
updatedSince | string Example: updatedSince=2014-03-01T00:00:00Z date in |
updatedSinceLocal | string updatedSince time in supplier's local timezone, format is |
search | string String to search for. It will be searched in product name, product code and supplier company name. |
supplierId | integer <int64> supplier id to limit results to a single supplier's products. |
supplierAlias | string supplier alias to limit results to a single supplier's products. The Alias is part of the supplier's booking form URL, for example alias is "demo" in https://demo.rezdy.com. Alias is unique across Rezdy companies, but it is updatable, thus it can change over time. |
limit | integer <int32> How many results are returned per request. Maximum is 100, which also a default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
tag | Array of strings unique Example: tag=ACCESSIBILITY:VISION_IMPAIRED Tags belonging to a product. Each specified tag should be in the form
|
required | object (RequestStatus) |
Array of objects (Product) |
Filtered API specification demo supplier's products, using filter https://api.rezdy-staging.com/v1/products/marketplace?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&search=API specification demo supplier
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "products": [
- {
- "productType": "TICKET",
- "name": "National Park pass",
- "shortDescription": "National park multiday pass",
- "description": "National park multiday entry pass, which can be used any time within 2 years from the purchase date for a single entry.",
- "productCode": "P00TNX",
- "internalCode": "TICKET",
- "supplierId": 13398,
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "timezone": "Australia/Sydney",
- "advertisedPrice": 15,
- "priceOptions": [
- {
- "price": 30,
- "label": "Adult",
- "id": 929162,
- "seatsUsed": 1,
- "productCode": "P00TNX"
}, - {
- "price": 15,
- "label": "Child",
- "id": 929161,
- "seatsUsed": 1,
- "productCode": "P00TNX"
}
], - "currency": "AUD",
- "unitLabel": "Participant",
- "unitLabelPlural": "Participants",
- "quantityRequired": true,
- "quantityRequiredMin": 1,
- "images": [
- {
- "id": 22654,
}, - {
- "id": 22655,
}, - {
- "id": 22656,
}, - {
- "id": 22658,
}
], - "bookingMode": "NO_DATE",
- "charter": false,
- "terms": "",
- "bookingFields": [
- {
- "label": "First Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Last Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Mobile",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "Phone"
}, - {
- "label": "Email",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Country",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "List"
}, - {
- "label": "Special Requirements",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}
], - "latitude": 28.2062873,
- "longitude": 85.62292959999999,
- "confirmMode": "AUTOCONFIRM",
- "confirmModeMinParticipants": 0,
- "agentPaymentType": "FULL_AGENT",
- "maxCommissionPercent": 10,
- "commissionIncludesExtras": true,
- "dateCreated": "2025-08-31T00:17:05Z",
- "minimumNoticeMinutes": 0,
- "durationMinutes": 1440,
- "dateUpdated": "2025-08-31T01:02:28Z",
- "locationAddress": {
- "addressLine": "Langtang valley",
- "postCode": "",
- "city": "",
- "state": "",
- "countryCode": "np",
- "latitude": 28.2062873,
- "longitude": 85.62292959999999
}, - "languages": [
- "en_au"
], - "tags": [
- "TYPE:Ticket"
], - "waitListingEnabled": false,
- "isApiBookingSupported": true
}, - {
- "productType": "ACTIVITY",
- "name": "Double dive with sharks",
- "shortDescription": "Double dive with grey nurse or leopard sharks, depending on the season.",
- "description": "Double dive with grey nurse or leopard sharks, depending on the season. Boat dive with a snack provided during the break between the dives. The dive site is suitable for open water divers.",
- "productCode": "PWQF1Y",
- "internalCode": "DIVING",
- "supplierId": 13398,
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "timezone": "Australia/Sydney",
- "advertisedPrice": 200,
- "priceOptions": [
- {
- "price": 250,
- "label": "Adult",
- "id": 929159,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}, - {
- "price": 200,
- "label": "Student",
- "id": 929160,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}
], - "currency": "AUD",
- "unitLabel": "Participant",
- "unitLabelPlural": "Participants",
- "quantityRequired": true,
- "quantityRequiredMin": 1,
- "quantityRequiredMax": 50,
- "images": [
- {
- "id": 22650,
}, - {
- "id": 22651,
}, - {
- "id": 22652,
}, - {
- "id": 22653,
}
], - "bookingMode": "INVENTORY",
- "charter": false,
- "terms": "",
- "bookingFields": [
- {
- "label": "First Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Last Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Mobile",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "Phone"
}, - {
- "label": "Email",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Special Requirements",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Certification level",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification number",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification agency",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "listOptions": "PADI\r\nSSI\r\nSDI",
- "fieldType": "List"
}
], - "latitude": -28.6113488,
- "longitude": 153.629085,
- "confirmMode": "AUTOCONFIRM",
- "confirmModeMinParticipants": 0,
- "agentPaymentType": "FULL_AGENT",
- "maxCommissionPercent": 10,
- "commissionIncludesExtras": true,
- "dateCreated": "2025-08-30T23:49:55Z",
- "minimumNoticeMinutes": 1440,
- "durationMinutes": 180,
- "dateUpdated": "2025-08-31T00:12:33Z",
- "pickupId": 475,
- "locationAddress": {
- "addressLine": "Julien rocks",
- "postCode": "",
- "city": "Byron Bay",
- "state": "",
- "countryCode": "au",
- "latitude": -28.6113488,
- "longitude": 153.629085
}, - "languages": [
- "en_au"
], - "tags": [
- "TYPE:Activity"
], - "waitListingEnabled": false,
- "isApiBookingSupported": true
}
]
}
Load an existing product by Product Code
productCode required | string Example: P12345 Product Code to search for |
required | object (RequestStatus) |
object (Product) Product object. Holds general details and settings of a specific tour, activity or event. |
Product PWQF1Y
details https://api.rezdy-staging.com/v1/products/PWQF1Y?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "product": {
- "productType": "ACTIVITY",
- "name": "Double dive with sharks",
- "shortDescription": "Double dive with grey nurse or leopard sharks, depending on the season.",
- "description": "Double dive with grey nurse or leopard sharks, depending on the season. Boat dive with a snack provided during the break between the dives. The dive site is suitable for open water divers.",
- "productCode": "PWQF1Y",
- "internalCode": "DIVING",
- "supplierId": 13398,
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "timezone": "Australia/Sydney",
- "advertisedPrice": 200,
- "priceOptions": [
- {
- "price": 250,
- "label": "Adult",
- "id": 929159,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}, - {
- "price": 200,
- "label": "Student",
- "id": 929160,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}
], - "currency": "AUD",
- "unitLabel": "Participant",
- "unitLabelPlural": "Participants",
- "quantityRequired": true,
- "quantityRequiredMin": 1,
- "quantityRequiredMax": 50,
- "images": [
- {
- "id": 22650,
}, - {
- "id": 22651,
}, - {
- "id": 22652,
}, - {
- "id": 22653,
}
], - "videos": [ ],
- "bookingMode": "INVENTORY",
- "charter": false,
- "terms": "",
- "extras": [
- {
- "name": "Underwater camera rental",
- "description": "An underwater camera rental for the dive. Choice of GoPro or Nikon Coolpix AW130. Select the number of cameras up to the number of participants, that you would like to rent for this booking.",
- "price": 15,
- "extraPriceType": "ANY"
}
], - "bookingFields": [
- {
- "label": "First Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Last Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Mobile",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "Phone"
}, - {
- "label": "Email",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Special Requirements",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Certification level",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification number",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification agency",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "listOptions": "PADI\r\nSSI\r\nSDI",
- "fieldType": "List"
}
], - "latitude": -28.6113488,
- "longitude": 153.629085,
- "confirmMode": "AUTOCONFIRM",
- "confirmModeMinParticipants": 0,
- "agentPaymentType": "FULL_AGENT",
- "maxCommissionPercent": 10,
- "commissionIncludesExtras": true,
- "dateCreated": "2021-08-30T23:49:55Z",
- "minimumNoticeMinutes": 1440,
- "durationMinutes": 180,
- "dateUpdated": "2021-09-13T04:13:35Z",
- "pickupId": 475,
- "locationAddress": {
- "addressLine": "Julien rocks",
- "postCode": "",
- "city": "Byron Bay",
- "state": "",
- "countryCode": "au",
- "latitude": -28.6113488,
- "longitude": 153.629085
}, - "languages": [
- "en_au"
], - "tags": [
- "TYPE:Activity"
], - "waitListingEnabled": false,
- "isApiBookingSupported": true
}
}
Gets a list of pickup locations configured for this product.
productCode required | string Example: P12345 productCode Product Code to search for |
limit | integer <int32> limit how many results are returned per request. Maximum is 100, which is also the default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
required | object (RequestStatus) |
Array of objects (PickupLocation) |
Product's PWQF1Y
(Double dive with sharks) pickups: https://api.rezdy-staging.com/v1/products/PWQF1Y/pickups?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "pickupLocations": [
- {
- "locationName": "Divers hotel",
- "address": "Cape Byron, Byron Bay NSW, Australia",
- "latitude": -28.6473671,
- "longitude": 153.601977,
- "minutesPrior": 30,
- "additionalInstructions": "Please be ready 15 minute before the pickup time in the hotel lobby area."
}, - {
- "locationName": "Seaside hostel",
- "address": "Main Beach, Byron Bay NSW, Australia",
- "latitude": -28.6412831,
- "longitude": 153.6166691,
- "minutesPrior": 20,
- "additionalInstructions": "Please be ready 15 minute before the pickup time in front of the hostel."
}
]
}
This service returns availability information for a specific date range. The service response contains a list of sessions, including their availability and pricing details.
Pricing in the session can be different than the pricing of the products, in a case of a dynamic pricing when a supplier overrides a price for a specific session or a ticket type.
In case of multiple products sharing this session, a session will contain price overrides for all of the shared products. Therefore it is necessary to filer only the price options matching the chosen product code on the client side, when displaying available price options to a customer.
productCode required | Array of strings unique Example: productCode=P12345 Product code in format P12345. You can request multiple products |
startTime | string Example: startTime=2014-03-01T00:00:00Z Start time in |
endTime | string Example: endTime=2014-03-01T00:00:00Z End time in |
startTimeLocal | string Start time in supplier's local timezone, format is |
endTimeLocal | string End time in supplier's local timezone, format is |
minAvailability | integer <int32> only load availability for that quantity |
limit | integer <int32> limit how many results are returned per request. Maximum is 100, which is also the default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
required | object (RequestStatus) |
Array of objects (Session) |
Get 2 days of product PWQF1Y
availability: https://api.rezdy-staging.com/v1/availability?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&productCode=PWQF1Y&startTimeLocal=2025-10-01 00:00:00&endTimeLocal=2025-10-03 00:00:00
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "sessions": [
- {
- "id": 2788078,
- "productCode": "PWQF1Y",
- "startTime": "2025-09-30T23:00:00Z",
- "endTime": "2025-10-01T02:00:00Z",
- "startTimeLocal": "2025-10-01 09:00:00",
- "endTimeLocal": "2025-10-01 12:00:00",
- "allDay": false,
- "seats": 50,
- "seatsAvailable": 50,
- "priceOptions": [
- {
- "price": 250,
- "label": "Adult",
- "id": 929159,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}, - {
- "price": 200,
- "label": "Student",
- "id": 929160,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}
]
}, - {
- "id": 2788381,
- "productCode": "PWQF1Y",
- "startTime": "2025-10-01T23:00:00Z",
- "endTime": "2025-10-02T02:00:00Z",
- "startTimeLocal": "2025-10-02 09:00:00",
- "endTimeLocal": "2025-10-02 12:00:00",
- "allDay": false,
- "seats": 50,
- "seatsAvailable": 50,
- "priceOptions": [
- {
- "price": 250,
- "label": "Adult",
- "id": 929159,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}, - {
- "price": 200,
- "label": "Student",
- "id": 929160,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}
]
}
]
}
Search bookings in your account
orderStatus | string Enum: "PROCESSING" "NEW" "ON_HOLD" "PENDING_SUPPLIER" "PENDING_CUSTOMER" "CONFIRMED" "CANCELLED" "ABANDONED_CART" Order status to filter results |
search | string String to search for. It will be searched in Order number, Customer name, Agent code and payment transaction codes (I.e. voucher Code). |
productCode | Array of strings unique Example: productCode=P12345 Product code, to only load bookings for a specific product. Multiple values allowed: &productCode=P11111&productCode=P22222 |
minTourStartTime | string Example: minTourStartTime=2014-03-01T00:00:00Z Only load bookings with a booked time that starts on or after this time. This is not the booking creation date, it is the booked date. |
maxTourStartTime | string Example: maxTourStartTime=2014-03-01T00:00:00Z Only load bookings with a booked time that starts before or on this time. This is not the booking creation date, it is the booked date. |
updatedSince | string Example: updatedSince=2014-03-01T00:00:00Z Only load bookings updated after this time. |
minDateCreated | string Example: minDateCreated=2014-03-01T00:00:00Z Only load bookings created on or after this date, whether they have been updated or not. |
maxDateCreated | string Example: maxDateCreated=2014-03-01T00:00:00Z Only load bookings created on or before this date, whether they have been updated or not. |
resellerReference | string Only load bookings with specified resellerReference |
limit | integer <int32> How many results are returned per request. Maximum is 100, which also a default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. |
required | object (RequestStatus) |
Array of objects (Booking) |
Search confirmed bookings: https://api.rezdy-staging.com/v1/bookings?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&orderStatus=CONFIRMED
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "bookings": [
- {
- "orderNumber": "RX1N6HC",
- "status": "CONFIRMED",
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "id": 29650,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2025-09-04T23:00:00Z",
- "endTime": "2025-09-05T02:00:00Z",
- "startTimeLocal": "2025-09-05 09:00:00",
- "endTimeLocal": "2025-09-05 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 1
}
], - "totalQuantity": 1,
- "amount": 250,
- "extras": [ ],
- "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level"
}, - {
- "label": "Certification number"
}, - {
- "label": "Certification agency"
}
]
}
], - "subtotal": 250,
- "pickupLocation": {
- "locationName": "Hotel by the sea",
- "pickupInstructions": "Call us on +61123456 to arrange a pickup from a custom pickup request not listed among the pickup locations.\r\nPlease be ready 15 minute before the pickup time."
}
}
], - "totalAmount": 250,
- "totalCurrency": "AUD",
- "totalPaid": 250,
- "totalDue": 0,
- "dateCreated": "2025-09-03T00:00:04Z",
- "dateConfirmed": "2025-09-03T00:00:04Z",
- "datePaid": "2025-09-03T00:00:04Z",
- "payments": [
- {
- "type": "CASH",
- "amount": 250,
- "currency": "AUD",
- "date": "2025-09-03T00:00:04Z",
- "label": "Paid in cash to API specification demo company",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode",
- "value": "RX1N6HC"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
- "commission": 25,
- "vouchers": [ ],
- "barcodeType": "QR_CODE"
}
]
}
Create a new booking. Many of payload fields are not required and will be calculated if not specified. Please check the example request payloads for different booking scenarios.
orderNumber | string Order number. This is the number you should give to customers and print on booking confirmations. Order number is generated by the system, therefore, even if it is specified in the booking request, it will be overwritten. |
status | string Enum: "PROCESSING" "NEW" "ON_HOLD" "PENDING_SUPPLIER" "PENDING_CUSTOMER" "CONFIRMED" "CANCELLED" "ABANDONED_CART" Status of this booking |
resellerId | integer <int64> Rezdy internal ID of the agent company attached to this booking |
object (User) Internal Rezdy user details. This is a Rezdy application user who belongs to a Rezdy agent or supplier company. | |
object (Customer) The customer is the person making the booking, and most of the time paying for it. | |
Array of objects (BookingItemCreate) List of items in this booking. A booking can contain multiple products. Each BookingItem is a separate product with its own set of quantities and participant details. | |
totalAmount | number <float> Total booking amount |
datePaid | string <date-time> Date this booking was fully paid |
dateReconciled | string <date-time> Date this booking was reconciled with the agent |
comments | string Special requirements entered by the customer. Visible to both customer and supplier. |
internalNotes | string Comments only visible internally by the supplier |
Array of objects (BookingPayment) List of payments recorded for this booking | |
object (CreditCard) Credit card details. Used to send payment details for a booking | |
Array of objects (BookingField) List of custom fields that are required "once per booking" by all the products in this booking | |
source | string Enum: "ONLINE" "INTERNAL" "PARTNERS" "COMMUNITY" "MARKETPLACE" "MARKETPLACE_PREF_RATE" "API" "GOOGLE" Source of this booking viewed from the supplier |
sourceReferrer | string Referrer code |
resellerSource | string Enum: "ONLINE" "INTERNAL" "PARTNERS" "COMMUNITY" "MARKETPLACE" "MARKETPLACE_PREF_RATE" "API" "GOOGLE" Source of this booking viewed from the agent |
sourceChannel | string Agent code defined by the supplier |
resellerComments | string Comments only visible by the agent and the supplier. This should be used by the agent to send voucher numbers/redemption codes to suppliers. |
surcharge | number <float> Credit card surcharge calculated for this booking |
vouchers | Array of strings List of vouchers (Gift cards) that have been redeemed to pay for this booking |
coupon | string Promo code that has been applied to this booking |
paymentOption | string Enum: "CREDITCARD" "PAYPAL" "BANKTRANSFER" "CASH" "INVOICE" "EXTERNAL" "ALIPAY" Payment option selected by the customer when making an online booking |
sendNotifications | boolean Default: true Flag to control if a booking confirmation email should be send to the customer after this booking is created. |
resellerReference | string External reseller reference, can be used to pass internal booking number. This reference will be shown to a supplier, also it will appear on reports and can be used to filter orders. Maxiumum number of characters is 30 |
barcodeType | string Enum: "TEXT" "CODE_39" "CODE_128" "QR_CODE" "EAN_8" "EAN_13" "ITF" Declares the redemption code format customers will receive if the booking was created with barcodes. |
required | object (RequestStatus) |
object (Booking) Booking object. Lists all the possible fields for all product types and scenarios. Most of them are not required when sending a new booking. |
Example of creating a booking with API features including pickup, extras, order and participant level booking fields, reseller reference and comments
{- "resellerReference": "ORDER12345",
- "resellerComments": "This comment is visible to both supplier and reseller",
- "customer": {
- "firstName": "Rick",
- "lastName": "Sanchez",
- "phone": "+61484123456",
- "email": "ricksanchez@test.com"
}, - "items": [
- {
- "productCode": "PWQF1Y",
- "startTimeLocal": "2025-10-01 09:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "value": 2
}
], - "extras": [
- {
- "name": "Underwater camera rental",
- "quantity": 1
}
], - "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level",
- "value": "Open Water"
}, - {
- "label": "Certification number",
- "value": "123456798"
}, - {
- "label": "Certification agency",
- "value": "PADI"
}
]
}, - {
- "fields": [
- {
- "label": "First Name",
- "value": "Morty"
}, - {
- "label": "Last Name",
- "value": "Smith"
}, - {
- "label": "Certification level",
- "value": "Rescue Diver"
}, - {
- "label": "Certification number",
- "value": "111222333"
}, - {
- "label": "Certification agency",
- "value": "SDI"
}
]
}
]
}, - {
- "pickupLocation": {
- "locationName": "Divers hotel"
}
}
], - "fields": [
- {
- "label": "Special Requirements",
- "value": "Gluten free lunch for Morty"
}
], - "payments": [
- {
- "amount": 515,
- "type": "CASH",
- "label": "Paid in cash to API specification demo"
}
]
}
Example of creating a booking with API features including pickup, extras, order and participant level booking fields, reseller reference and comments, participant level barcodes
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "booking": {
- "orderNumber": "RYK4EM1",
- "status": "CONFIRMED",
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "id": 29769,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "email": "ricksanchez@test.com",
- "phone": "+61484123456"
}, - "items": [
- {
- "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2025-09-30T23:00:00Z",
- "endTime": "2025-10-01T02:00:00Z",
- "startTimeLocal": "2025-10-01 09:00:00",
- "endTimeLocal": "2025-10-01 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 2
}
], - "totalQuantity": 2,
- "amount": 500,
- "extras": [
- {
- "name": "Underwater camera rental",
- "price": 15,
- "extraPriceType": "ANY",
- "quantity": 1
}
], - "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level",
- "value": "Open Water"
}, - {
- "label": "Certification number",
- "value": "123456798"
}, - {
- "label": "Certification agency",
- "value": "PADI"
}
]
}, - {
- "fields": [
- {
- "label": "First Name",
- "value": "Morty"
}, - {
- "label": "Last Name",
- "value": "Smith"
}, - {
- "label": "Certification level",
- "value": "Rescue Diver"
}, - {
- "label": "Certification number",
- "value": "111222333"
}, - {
- "label": "Certification agency",
- "value": "SDI"
}
]
}
], - "subtotal": 515,
- "pickupLocation": {
- "pickupInstructions": "Call us on +61123456 to arrange a pickup from a custom pickup request not listed among the pickup locations.\r\nPlease be ready 15 minute before the pickup time."
}
}
], - "totalAmount": 515,
- "totalCurrency": "AUD",
- "totalPaid": 515,
- "totalDue": 0,
- "dateCreated": "2021-09-13T23:18:21Z",
- "dateConfirmed": "2021-09-13T23:18:20.502Z",
- "datePaid": "2021-09-13T23:18:20.5Z",
- "payments": [
- {
- "type": "CASH",
- "amount": 515,
- "currency": "AUD",
- "date": "2021-09-13T23:18:20.51Z",
- "label": "Paid in cash to API specification demo",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode",
- "value": "RYK4EM1"
}, - {
- "label": "Special Requirements",
- "value": "Gluten free lunch for Morty"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
- "resellerComments": "This comment is visible to both supplier and reseller",
- "commission": 51.5,
- "vouchers": [ ],
- "resellerReference": "ORDER12345",
- "barcodeType": "QR_CODE"
}
}
Get a quote for a booking. Use this service to validate your Booking object before making the actual booking.
Business rules will be validated, and all amounts and totals will be populated.
It is not a Booking: It does not have any status or booking number. A Quote does not reserve any seat.
orderNumber | string Order number. This is the number you should give to customers and print on booking confirmations. Order number is generated by the system, therefore, even if it is specified in the booking request, it will be overwritten. |
status | string Enum: "PROCESSING" "NEW" "ON_HOLD" "PENDING_SUPPLIER" "PENDING_CUSTOMER" "CONFIRMED" "CANCELLED" "ABANDONED_CART" Status of this booking |
object (User) Internal Rezdy user details. This is a Rezdy application user who belongs to a Rezdy agent or supplier company. | |
resellerId | integer <int64> Rezdy internal ID of the agent company attached to this booking |
object (User) Internal Rezdy user details. This is a Rezdy application user who belongs to a Rezdy agent or supplier company. | |
object (Customer) The customer is the person making the booking, and most of the time paying for it. | |
Array of objects (BookingItemCreate) List of items in this booking. A booking can contain multiple products. Each BookingItem is a separate product with its own set of quantities and participant details. | |
internalNotes | string Comments only visible internally by the supplier |
Array of objects (BookingField) List of custom fields that are required "once per booking" by all the products in this booking | |
resellerReference | string External reseller reference, can be used to pass internal booking number. This reference will be shown to a supplier, also it will appear on reports and can be used to filter orders. Maxiumum number of characters is 30 |
resellerComments | string Comments only visible by the agent and the supplier. This should be used by the agent to send voucher numbers/redemption codes to suppliers. |
required | object (RequestStatus) |
object (Booking) Booking object. Lists all the possible fields for all product types and scenarios. Most of them are not required when sending a new booking. |
Example of quote a manual payment booking with minimalistic payload
{- "customer": {
- "firstName": "Rick",
- "lastName": "Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "productCode": "PWQF1Y",
- "startTimeLocal": "2025-10-01 09:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "value": 1
}
]
}
], - "pickupLocation": {
- "locationName": "Divers hotel"
}, - "payments": [
- {
- "amount": 250,
- "type": "CASH",
- "label": "Paid in cash to API specification demo company"
}
]
}
Quote booking
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "booking": {
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2025-09-30T23:00:00Z",
- "endTime": "2025-10-01T02:00:00Z",
- "startTimeLocal": "2025-10-01 09:00:00",
- "endTimeLocal": "2025-10-01 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 1
}
], - "totalQuantity": 1,
- "amount": 250,
- "extras": [ ],
- "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level"
}, - {
- "label": "Certification number"
}, - {
- "label": "Certification agency"
}
]
}
], - "subtotal": 250,
- "pickupLocation": {
- "pickupInstructions": "Call us on +61123456 to arrange a pickup from a custom pickup request not listed among the pickup locations.\r\nPlease be ready 15 minute before the pickup time."
}
}
], - "totalAmount": 250,
- "totalCurrency": "AUD",
- "totalPaid": 250,
- "totalDue": 0,
- "payments": [
- {
- "type": "CASH",
- "amount": 250,
- "label": "Paid in cash to API specification demo agent",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "commission": 25,
- "vouchers": [ ],
- "barcodeType": "QR_CODE"
}
}
Load an existing booking by Order Number
orderNumber required | string Example: R123456 Order number to search |
required | object (RequestStatus) |
object (Booking) Booking object. Lists all the possible fields for all product types and scenarios. Most of them are not required when sending a new booking. |
Get booking RKM1ULT
: https://api.rezdy-staging.com/v1/bookings/RKM1ULT?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "booking": {
- "orderNumber": "RKM1ULT",
- "status": "CONFIRMED",
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "id": 29692,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2025-09-30T23:00:00Z",
- "endTime": "2025-10-01T02:00:00Z",
- "startTimeLocal": "2025-10-01 09:00:00",
- "endTimeLocal": "2025-10-01 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 1
}
], - "totalQuantity": 1,
- "amount": 250,
- "extras": [ ],
- "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level"
}, - {
- "label": "Certification number"
}, - {
- "label": "Certification agency"
}
]
}
], - "subtotal": 250,
- "pickupLocation": {
- "pickupInstructions": "Call us on +61123456 to arrange a pickup from a custom pickup request not listed among the pickup locations.\r\nPlease be ready 15 minute before the pickup time."
}
}
], - "totalAmount": 250,
- "totalCurrency": "AUD",
- "totalPaid": 250,
- "totalDue": 0,
- "dateCreated": "2025-09-09T02:14:12Z",
- "dateConfirmed": "2025-09-09T02:14:12Z",
- "datePaid": "2025-09-09T02:14:12Z",
- "payments": [
- {
- "type": "CASH",
- "amount": 250,
- "currency": "AUD",
- "date": "2025-09-09T02:14:12Z",
- "label": "Paid in cash to API specification demo agent",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode",
- "value": "RKM1ULT"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
- "commission": 25,
- "vouchers": [ ],
- "barcodeType": "QR_CODE"
}
}
When implementing booking update take into consideration below:
The service method does not support a partial update, full booking object, as it was retrieved from the booking create or search services, has to be send back to the request payload. Otherwise, the properties or relations which are currently supported (see below) and they are not sent, will be deleted. Order of the items in arrays have to be preserved for the following fields 'items', 'participants'.
Currently supported fields are:
For the sample requests provided in the right panel, consider the booking object below being retrieved from a POST order or GET order methods:
{
"requestStatus": {
"success": true,
"version": "v1"
},
"booking": {
"orderNumber": "RSKCJ1K",
"status": "CONFIRMED",
"supplierId": 61,
"supplierName": "SUPPLIER_PREMIUM_AU",
"customer": {
"id": 2,
"firstName": "Dusan",
"lastName": "Zahoransky",
"name": "Dusan Zahoransky",
"email": "sample@test.com"
},
"items": [
{
"productName": "activity i session seats pp adult 100f",
"productCode": "P123456",
"startTime": "2017-01-19T09:00:00Z",
"endTime": "2017-01-19T11:00:00Z",
"startTimeLocal": "2017-01-19 20:00:00",
"endTimeLocal": "2017-01-19 22:00:00",
"quantities": [
{
"optionLabel": "Adult",
"optionPrice": 100,
"value": 1
}
],
"totalQuantity": 1,
"amount": 100,
"extras": [
],
"participants": [
{
"fields": [
{
"label": "First Name",
"value": "Janko",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": false
},
{
"label": "Last Name",
"value": "Hrasko",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": false
}
]
}
],
"subtotal": 100,
"vouchers": [
]
}
],
"totalAmount": 100,
"totalCurrency": "AUD",
"totalPaid": 0,
"totalDue": 100,
"dateCreated": "2017-01-19T03:36:18.462Z",
"dateConfirmed": "2017-01-19T03:36:18.462Z",
"payments": [
],
"fields": [
{
"label": "Special Requirements",
"value": "No meat meal option",
"requiredPerParticipant": false,
"requiredPerBooking": false,
"visiblePerParticipant": false,
"visiblePerBooking": false
}
],
"source": "API",
"vouchers": [
]
}
}
orderNumber required | string order number of the booking |
orderNumber | string Order number. This is the number you should give to customers and print on booking confirmations. Order number is generated by the system, therefore, even if it is specified in the booking request, it will be overwritten. |
status | string Enum: "PROCESSING" "NEW" "ON_HOLD" "PENDING_SUPPLIER" "PENDING_CUSTOMER" "CONFIRMED" "CANCELLED" "ABANDONED_CART" Status of this booking |
object (User) Internal Rezdy user details. This is a Rezdy application user who belongs to a Rezdy agent or supplier company. | |
resellerId | integer <int64> Rezdy internal ID of the agent company attached to this booking |
object (User) Internal Rezdy user details. This is a Rezdy application user who belongs to a Rezdy agent or supplier company. | |
object (Customer) The customer is the person making the booking, and most of the time paying for it. | |
Array of objects (BookingItemCreate) List of items in this booking. A booking can contain multiple products. Each BookingItem is a separate product with its own set of quantities and participant details. | |
internalNotes | string Comments only visible internally by the supplier |
Array of objects (BookingField) List of custom fields that are required "once per booking" by all the products in this booking | |
resellerReference | string External reseller reference, can be used to pass internal booking number. This reference will be shown to a supplier, also it will appear on reports and can be used to filter orders. Maxiumum number of characters is 30 |
resellerComments | string Comments only visible by the agent and the supplier. This should be used by the agent to send voucher numbers/redemption codes to suppliers. |
required | object (RequestStatus) |
object (Booking) Booking object. Lists all the possible fields for all product types and scenarios. Most of them are not required when sending a new booking. |
Update reseller information and booking fields and pickup location
{- "resellerReference ": "123456789",
- "resellerComments": "Here come agent comments that are visible to both booking agent and supplier",
- "orderNumber": "RKQ0687",
- "status": "CONFIRMED",
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "id": 29665,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "pickupLocation": {
- "locationName": "Divers hotel"
}, - "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2021-09-30T23:00:00Z",
- "endTime": "2021-10-01T02:00:00Z",
- "startTimeLocal": "2021-10-01 09:00:00",
- "endTimeLocal": "2021-10-01 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 1
}
], - "totalQuantity": 1,
- "amount": 250,
- "extras": [ ],
- "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level",
- "value": "Open Water"
}, - {
- "label": "Certification number",
- "value": "123456798"
}, - {
- "label": "Certification agency",
- "value": "PADI"
}
]
}
], - "subtotal": 250
}
], - "totalAmount": 250,
- "totalCurrency": "AUD",
- "totalPaid": 250,
- "totalDue": 0,
- "dateCreated": "2021-09-07T00:21:22Z",
- "dateConfirmed": "2021-09-07T00:21:22.107Z",
- "datePaid": "2021-09-07T00:21:22.098Z",
- "payments": [
- {
- "type": "CASH",
- "amount": 250,
- "currency": "AUD",
- "date": "2021-09-07T00:21:22.224Z",
- "label": "Paid in cash to API specification demo agent",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode",
- "value": "RKQ0687"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
- "commission": 25,
- "vouchers": [ ],
- "barcodeType": "QR_CODE"
}
{- "requestStatus": {
- "success": true,
- "error": {
- "errorCode": "string",
- "errorMessage": "string",
- "seatsAvailable": 0,
- "fields": [
- {
- "label": "string",
- "reason": "string"
}
], - "quantityRequiredMin": 0,
- "quantityRequiredMax": 0,
- "priceOptions": [
- {
- "label": "string",
- "min": 0,
- "max": 0
}
]
}, - "warning": {
- "warningMessage": "string"
}, - "version": "string"
}, - "booking": {
- "orderNumber": "string",
- "status": "PROCESSING",
- "supplierId": 0,
- "supplierName": "string",
- "supplierAlias": "string",
- "createdBy": {
- "code": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "resellerId": 0,
- "resellerName": "string",
- "resellerAlias": "string",
- "resellerUser": {
- "code": "string",
- "firstName": "string",
- "lastName": "string",
- "email": "string"
}, - "customer": {
- "id": 0,
- "firstName": "string",
- "middleName": "string",
- "lastName": "string",
- "name": "string",
- "email": "string",
- "companyName": "string",
- "phone": "string",
- "mobile": "string",
- "fax": "string",
- "skype": "string",
- "dob": "2019-08-24T14:15:22Z",
- "preferredLanguage": "string",
- "newsletter": true,
- "marketing": true,
- "aboutUs": "string",
- "title": "MR",
- "gender": "MALE",
- "addressLine": "string",
- "addressLine2": "string",
- "postCode": "string",
- "city": "string",
- "state": "string",
- "countryCode": "string"
}, - "items": [
- {
- "productName": "string",
- "productCode": "string",
- "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z",
- "startTimeLocal": "string",
- "endTimeLocal": "string",
- "quantities": [
- {
- "optionId": 0,
- "optionLabel": "string",
- "optionPrice": 0.1,
- "value": 0
}
], - "totalQuantity": 0,
- "amount": 0.1,
- "extras": [
- {
- "id": 0,
- "name": "string",
- "description": "string",
- "price": 0.1,
- "extraPriceType": "ANY",
- "quantity": 0,
- "image": {
- "id": 0,
- "itemUrl": "string",
- "thumbnailUrl": "string",
- "mediumSizeUrl": "string",
- "largeSizeUrl": "string"
}
}
], - "participants": [
- {
- "fields": [
- {
- "label": "string",
- "value": "string",
- "requiredPerParticipant": true,
- "requiredPerBooking": true,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "listOptions": "string",
- "fieldType": "String"
}
]
}
], - "transferFrom": "string",
- "transferTo": "string",
- "transferReturn": true,
- "subtotal": 0.1,
- "pickupLocation": {
- "locationName": "string",
- "address": "string",
- "latitude": 0.1,
- "longitude": 0.1,
- "minutesPrior": 0,
- "additionalInstructions": "string",
- "pickupTime": "string",
- "pickupInstructions": "string"
}, - "vouchers": [
- {
- "code": "string",
- "status": "ISSUED",
- "internalReference": "string",
- "internalNotes": "string",
- "issueDate": "2019-08-24T14:15:22Z",
- "expiryDate": "2019-08-24T14:15:22Z",
- "value": 0.1,
- "valueType": "VALUE_LIMITPRODUCT",
- "sourceOrder": "string"
}
], - "totalItemTax": 0.1
}
], - "totalAmount": 0.1,
- "totalCurrency": "AED",
- "totalPaid": 0.1,
- "totalDue": 0.1,
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "dateConfirmed": "2019-08-24T14:15:22Z",
- "datePaid": "2019-08-24T14:15:22Z",
- "dateReconciled": "2019-08-24T14:15:22Z",
- "comments": "string",
- "internalNotes": "string",
- "payments": [
- {
- "type": "PAYPAL",
- "amount": 0.1,
- "currency": "AED",
- "date": "2019-08-24T14:15:22Z",
- "label": "string",
- "recipient": "SUPPLIER"
}
], - "creditCard": {
- "cardName": "string",
- "cardType": "VISA",
- "expiryMonth": "string",
- "expiryYear": "string",
- "cardNumber": "string",
- "cardSecurityNumber": "string",
- "cardToken": "string",
- "cardCountry": "string"
}, - "fields": [
- {
- "label": "string",
- "value": "string",
- "requiredPerParticipant": true,
- "requiredPerBooking": true,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "listOptions": "string",
- "fieldType": "String"
}
], - "source": "ONLINE",
- "sourceReferrer": "string",
- "resellerSource": "ONLINE",
- "sourceChannel": "string",
- "resellerComments": "string",
- "surcharge": 0.1,
- "commission": 0.1,
- "vouchers": [
- "string"
], - "coupon": "string",
- "paymentOption": "CREDITCARD",
- "sendNotifications": true,
- "resellerReference": "string",
- "barcodeType": "TEXT"
}
}
Cancel an existing booking and send notifications about the cancellation. In case of an Automated Payment booking, will also refund payment.
orderNumber required | string Example: R123456 Order number to cancel |
sendNotifications | boolean Flag to control if a booking confirmation email should be send to the customer after this booking is canceled. Default (if not specified) is true. |
required | object (RequestStatus) |
object (Booking) Booking object. Lists all the possible fields for all product types and scenarios. Most of them are not required when sending a new booking. |
Get booking RKM1ULT
: https://api.rezdy-staging.com/v1/bookings/RKM1ULT?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "warning": {
- "warningMessage": "This order is already cancelled"
}, - "version": "v1"
}, - "booking": {
- "orderNumber": "RKQ0687",
- "status": "CANCELLED",
- "supplierId": 13398,
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "resellerId": 13399,
- "resellerName": "API specification demo agent (DO NOT EDIT)",
- "resellerAlias": "apispecificationdemoagentdonotedit",
- "customer": {
- "id": 29665,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}, - "items": [
- {
- "productName": "Double dive with sharks",
- "productCode": "PWQF1Y",
- "startTime": "2025-09-30T23:00:00Z",
- "endTime": "2025-10-01T02:00:00Z",
- "startTimeLocal": "2025-10-01 09:00:00",
- "endTimeLocal": "2025-10-01 12:00:00",
- "quantities": [
- {
- "optionLabel": "Adult",
- "optionPrice": 250,
- "value": 1
}
], - "totalQuantity": 1,
- "amount": 250,
- "extras": [ ],
- "participants": [
- {
- "fields": [
- {
- "label": "First Name",
- "value": "Rick"
}, - {
- "label": "Last Name",
- "value": "Sanchez"
}, - {
- "label": "Certification level",
- "value": "Open Water"
}, - {
- "label": "Certification number",
- "value": "123456798"
}, - {
- "label": "Certification agency",
- "value": "PADI"
}
]
}
], - "subtotal": 250,
- "pickupLocation": {
- "locationName": "Divers hotel",
- "address": "Cape Byron, Byron Bay NSW, Australia",
- "pickupTime": "2025-10-01 08:30:00",
- "pickupInstructions": "Please be ready 15 minute before the pickup time in the hotel lobby area.\r\nPlease be ready 15 minute before the pickup time."
}
}
], - "totalAmount": 250,
- "totalCurrency": "AUD",
- "totalPaid": 250,
- "totalDue": 0,
- "dateCreated": "2025-09-07T00:21:22Z",
- "dateUpdated": "2025-09-09T03:57:02Z",
- "dateConfirmed": "2025-09-07T00:21:22Z",
- "datePaid": "2025-09-07T00:21:22Z",
- "payments": [
- {
- "type": "CASH",
- "amount": 250,
- "currency": "AUD",
- "date": "2025-09-07T00:21:22Z",
- "label": "Paid in cash to API specification demo agent",
- "recipient": "RESELLER"
}
], - "fields": [
- {
- "label": "Barcode",
- "value": "RKQ0687"
}
], - "source": "MARKETPLACE_PREF_RATE",
- "resellerSource": "API",
- "sourceChannel": "APISPECIFICATIONDEMOAGENTDONOTEDIT",
- "resellerComments": "Here come agent comments that are visible to both booking agent and supplier",
- "commission": 25,
- "vouchers": [ ],
- "barcodeType": "QR_CODE"
}
}
Load all categories matching a search string. If the search string is empty, all categories will be returned. This will only return categories that belong to the company identified from the request's apiKey.
search | string String to search for. It will be searched in category name |
visible | boolean Return only public categories if it is set to true, only private if it is set to false, or both if it not set. |
limit | integer <int32> limit how many results are returned per request. Maximum is 100, which is also the default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
required | object (RequestStatus) |
Array of objects (Category) |
Search categories: https://api.rezdy-staging.com/v1/categories?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "categories": [
- {
- "id": 9091,
- "name": "Demo supplier products",
- "description": "",
- "visible": true,
- "image": {
- "id": 22654,
}, - "categorySeoTags": [
- {
- "attrKey": "noindex",
- "attrValue": "0",
- "id": 365,
- "metaType": "NOINDEX",
- "categoryId": 9091
}
]
}
]
}
Load an existing category by Id
categoryId required | integer <int64> Category ID |
required | object (RequestStatus) |
object (Category) A Category is used to group products |
Get category 9091
: https://api.rezdy-staging.com/v1/categories/9091?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "category": {
- "id": 9091,
- "name": "Demo supplier products",
- "description": "",
- "visible": true,
- "image": {
- "id": 22654,
}, - "categorySeoTags": [
- {
- "attrKey": "noindex",
- "attrValue": "0",
- "id": 365,
- "metaType": "NOINDEX",
- "categoryId": 9091
}
]
}
}
Load all products within a category.
categoryId required | integer <int64> The category id. |
limit | integer <int32> limit how many results are returned per request. Maximum is 100, which is also the default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
required | object (RequestStatus) |
Array of objects (Product) |
List category 9091
products: https://api.rezdy-staging.com/v1/categories/9091/products?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "products": [
- {
- "productType": "TICKET",
- "name": "National Park pass",
- "shortDescription": "National park multiday pass",
- "description": "National park multiday entry pass, which can be used any time within 2 years from the purchase date for a single entry.",
- "productCode": "P00TNX",
- "internalCode": "TICKET",
- "supplierId": 13398,
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "timezone": "Australia/Sydney",
- "advertisedPrice": 15,
- "priceOptions": [
- {
- "price": 30,
- "label": "Adult",
- "id": 929162,
- "seatsUsed": 1,
- "productCode": "P00TNX"
}, - {
- "price": 15,
- "label": "Child",
- "id": 929161,
- "seatsUsed": 1,
- "productCode": "P00TNX"
}
], - "currency": "AUD",
- "unitLabel": "Participant",
- "unitLabelPlural": "Participants",
- "quantityRequired": true,
- "quantityRequiredMin": 1,
- "images": [
- {
- "id": 22654,
}, - {
- "id": 22655,
}, - {
- "id": 22656,
}, - {
- "id": 22658,
}
], - "bookingMode": "NO_DATE",
- "charter": false,
- "terms": "",
- "bookingFields": [
- {
- "label": "First Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Last Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Mobile",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "Phone"
}, - {
- "label": "Email",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Country",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "List"
}, - {
- "label": "Special Requirements",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}
], - "latitude": 28.2062873,
- "longitude": 85.62292959999999,
- "confirmMode": "AUTOCONFIRM",
- "confirmModeMinParticipants": 0,
- "commissionIncludesExtras": false,
- "cancellationPolicyDays": 7,
- "dateCreated": "2025-08-31T00:17:05Z",
- "minimumNoticeMinutes": 0,
- "durationMinutes": 1440,
- "dateUpdated": "2025-08-31T01:02:28Z",
- "locationAddress": {
- "addressLine": "Langtang valley",
- "postCode": "",
- "city": "",
- "state": "",
- "countryCode": "np",
- "latitude": 28.2062873,
- "longitude": 85.62292959999999
}, - "languages": [
- "en_au"
], - "waitListingEnabled": false,
- "barcodeOutputType": "ORDER",
- "isApiBookingSupported": true
}, - {
- "productType": "ACTIVITY",
- "name": "Double dive with sharks",
- "shortDescription": "Double dive with grey nurse or leopard sharks, depending on the season.",
- "description": "Double dive with grey nurse or leopard sharks, depending on the season. Boat dive with a snack provided during the break between the dives. The dive site is suitable for open water divers.",
- "productCode": "PWQF1Y",
- "internalCode": "DIVING",
- "supplierId": 13398,
- "supplierAlias": "apispecificationdemosupplierdonotedit",
- "supplierName": "API specification demo supplier (DO NOT EDIT)",
- "timezone": "Australia/Sydney",
- "advertisedPrice": 200,
- "priceOptions": [
- {
- "price": 250,
- "label": "Adult",
- "id": 929159,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}, - {
- "price": 200,
- "label": "Student",
- "id": 929160,
- "seatsUsed": 1,
- "productCode": "PWQF1Y"
}
], - "currency": "AUD",
- "unitLabel": "Participant",
- "unitLabelPlural": "Participants",
- "quantityRequired": true,
- "quantityRequiredMin": 1,
- "quantityRequiredMax": 50,
- "images": [
- {
- "id": 22650,
}, - {
- "id": 22651,
}, - {
- "id": 22652,
}, - {
- "id": 22653,
}
], - "bookingMode": "INVENTORY",
- "charter": false,
- "terms": "",
- "bookingFields": [
- {
- "label": "First Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Last Name",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Mobile",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "Phone"
}, - {
- "label": "Email",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Special Requirements",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": false,
- "visiblePerBooking": true,
- "fieldType": "String"
}, - {
- "label": "Certification level",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification number",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "fieldType": "String"
}, - {
- "label": "Certification agency",
- "requiredPerParticipant": false,
- "requiredPerBooking": false,
- "visiblePerParticipant": true,
- "visiblePerBooking": false,
- "listOptions": "PADI\r\nSSI\r\nSDI",
- "fieldType": "List"
}
], - "latitude": -28.6113488,
- "longitude": 153.629085,
- "confirmMode": "AUTOCONFIRM",
- "confirmModeMinParticipants": 0,
- "commissionIncludesExtras": false,
- "cancellationPolicyDays": 7,
- "dateCreated": "2025-08-30T23:49:55Z",
- "minimumNoticeMinutes": 1440,
- "durationMinutes": 180,
- "dateUpdated": "2025-08-31T00:12:33Z",
- "pickupId": 475,
- "locationAddress": {
- "addressLine": "Julien rocks",
- "postCode": "",
- "city": "Byron Bay",
- "state": "",
- "countryCode": "au",
- "latitude": -28.6113488,
- "longitude": 153.629085
}, - "languages": [
- "en_au"
], - "waitListingEnabled": false,
- "barcodeOutputType": "ORDER",
- "isApiBookingSupported": true
}
]
}
Adds a product to an existing category
categoryId required | integer <int64> |
productCode required | string |
required | object (RequestStatus) |
object (Rate) A Rate is used to group products with its corresponding shared rate |
Add product P00TNX
to category 9091
responds with category products, or 406 status if product already is in this category: PUT https://api.rezdy-staging.com/v1/categories/9091/products/P00TNX?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "rate": {
- "rateId": 9091,
- "name": "Demo supplier products",
- "productRates": [
- {
- "productCode": "PWQF1Y"
}, - {
- "productCode": "P00TNX"
}
]
}
}
Removes a product from an existing category
categoryId required | integer <int64> |
productCode required | string |
required | object (RequestStatus) |
object (Rate) A Rate is used to group products with its corresponding shared rate |
Remove product P00TNX
from category 9091
, responds with remaining category products: DELETE https://api.rezdy-staging.com/v1/categories/9091/products/P00TNX?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "rate": {
- "rateId": 9091,
- "name": "Demo supplier products",
- "productRates": [
- {
- "productCode": "PWQF1Y"
}
]
}
}
Search customers in your account
search | string String to search for. It will be searched in First & Last name, company name and email. |
limit | integer <int32> How many results are returned per request. Maximum is 100, which also a default, when not specified. |
offset | integer <int32> Default: 0 Offset of the first result to return. Default to 0. |
required | object (RequestStatus) |
Array of objects (Customer) |
Search customers with name 'Rick Sanchez': https://api.rezdy-staging.com/v1/customers?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5&search=Rick Sanchez
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "customers": [
- {
- "id": 29647,
- "firstName": "Rick",
- "lastName": "Sanchez",
- "name": "Rick Sanchez",
- "phone": "+61484123456"
}
]
}
Create a new customer
id | integer <int64> Rezdy internal ID of the customer |
firstName | string First name |
middleName | string Middle name |
lastName | string Last Name |
name | string Full name - generated from first/middle/last names |
string | |
companyName | string Company name |
phone | string Preferred Phone number |
mobile | string Mobile phone number |
fax | string Fax number |
skype | string Skype alias |
dob | string <date-time> Date of birth |
preferredLanguage | string Preferred language. Should be a 2 letter ISO country code |
newsletter | boolean Subscribe to the newsletter |
marketing | boolean Agree to receive marketing emails |
aboutUs | string How did you hear about us? |
title | string Enum: "MR" "MS" "MRS" "MISS" Title |
gender | string Enum: "MALE" "FEMALE" Gender: MALE or FEMALE |
addressLine | string Address |
addressLine2 | string Extended Address |
postCode | string Postcode / ZIP |
city | string City/Town/Suburb |
state | string State/County/Region |
countryCode | string 2 letter ISO country code |
required | object (RequestStatus) |
object (Customer) The customer is the person making the booking, and most of the time paying for it. |
Create a new customer
{- "email": "morthysmith@test.com",
- "firstName": "Morty",
- "lastName": "Smith",
- "mobile": "+6148123456"
}
Create customer
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "customer": {
- "id": 29705,
- "firstName": "Morty",
- "lastName": "Smith",
- "name": "Morty Smith",
- "email": "morthysmith@test.com",
- "mobile": "+6148123456"
}
}
Load an existing customer by Id
customerId required | integer <int64> Id to search for |
required | object (RequestStatus) |
object (Customer) The customer is the person making the booking, and most of the time paying for it. |
Get customer: https://api.rezdy-staging.com/v1/customers/29705?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "customer": {
- "id": 29705,
- "firstName": "Morty",
- "lastName": "Smith",
- "name": "Morty Smith",
- "email": "morthysmith@test.com",
- "mobile": "+6148123456"
}
}
Delete a customer
customerId required | string Customer Id to delete |
required | object (RequestStatus) |
Delete customer: DELETE https://api.rezdy-staging.com/v1/customers/29705?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}
}
Load an existing Company by it's alias in Rezdy. Company alias is not a permanent identifier and can change over time.
companyAlias required | string Company alias to search for |
required | object (RequestStatus) |
object (Company) Company object. Holds general details and information about a specific company. |
Get company 'API specification demo supplier' by their alias: https://api.rezdy-staging.com/v1/companies/apispecificationdemosupplierdonotedit?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "companies": [
- {
- "alias": "apispecificationdemosupplierdonotedit",
- "companyName": "API specification demo supplier (DO NOT EDIT)",
- "firstName": "Dusan",
- "lastName": "Zahoransky",
- "address": {
- "addressLine": "123 CommonwWealth Street",
- "postCode": "2000",
- "city": "Sydney",
- "state": "NSW",
- "countryCode": "au",
- "latitude": -33.880562,
- "longitude": 151.2106793
}, - "destinationName": "Sydney",
- "destinationCountryCode": "au",
- "destinationPath": "South Pacific,Australia,New South Wales,Sydney",
- "currency": "AUD",
- "locale": "en_au",
- "timezone": "Australia/Sydney",
- "category": "Eco-Tours",
- "companyDescription": "Rezdy API demo supplier.",
- "phone": "+61484123456",
- "mobile": "+61484123456",
- "fax": "",
- "skype": "",
- "openingHours": "08:00 - 17:00",
- "facebookPage": "",
- "yelp": "",
- "instagram": "",
- "pinterest": "",
- "youtubeChannel": "",
- "tripAdvisor": "",
- "twitter": "",
- "website": "",
- "bookingSystem": "rezdy.com"
}
]
}
Load an existing Company by it's name in Rezdy. Company name must be given in full name.
companyName required | string Company name to search for |
required | object (RequestStatus) |
object (Company) Company object. Holds general details and information about a specific company. |
Get company 'API specification demo supplier (DO NOT EDIT)' by their name: https://api.rezdy-staging.com/v1/companies/name/API%20specification%20demo%20supplier?apiKey=69f708868ddc45eaa1f9b9fad1ddeba5
{- "requestStatus": {
- "success": true,
- "version": "v1"
}, - "companies": [
- {
- "alias": "apispecificationdemosupplierdonotedit",
- "companyName": "API specification demo supplier (DO NOT EDIT)",
- "firstName": "Dusan",
- "lastName": "Zahoransky",
- "address": {
- "addressLine": "123 CommonwWealth Street",
- "postCode": "2000",
- "city": "Sydney",
- "state": "NSW",
- "countryCode": "au",
- "latitude": -33.880562,
- "longitude": 151.2106793
}, - "destinationName": "Sydney",
- "destinationCountryCode": "au",
- "destinationPath": "South Pacific,Australia,New South Wales,Sydney",
- "currency": "AUD",
- "locale": "en_au",
- "timezone": "Australia/Sydney",
- "category": "Eco-Tours",
- "companyDescription": "Rezdy API demo supplier.",
- "phone": "+61484123456",
- "mobile": "+61484123456",
- "fax": "",
- "skype": "",
- "openingHours": "08:00 - 17:00",
- "facebookPage": "",
- "yelp": "",
- "instagram": "",
- "pinterest": "",
- "youtubeChannel": "",
- "tripAdvisor": "",
- "twitter": "",
- "website": "",
- "bookingSystem": "rezdy.com"
}
]
}