2. Guides
Certification Cases
A guide for customers integrating against the TTDbooking API platform.
Overview
Every new integration is certified before it is switched on for production. Certification confirms that your implementation drives the booking flow correctly, returns sound data, and satisfies the requirements our suppliers impose on downstream systems. Clearing it is what unlocks production credentials.
The exercise is there to confirm that your integration can:
- Run the complete TTDbooking booking flow from search through to cancellation
- Meet the mandatory supplier requirements, which we validate automatically
- Behave predictably and accurately for the travellers using it
We assess functional correctness only — how your interface looks is not part of the review.
Test Environment Information
All certification work is carried out against the TTDbooking test environment.
| Item | Value |
|---|---|
| Test Environment URL | https://api-test.ttdbooking.com |
| Authentication Method | Bearer Token (obtained via /ticket endpoint) |
| Documentation URL | https://developer.ttdbooking.com/hotel-api/docs |
| Technical Support | integrations@ttdbooking.com |
Test Credentials
appKey: ttdbooking_api_demo
appSecret: ttdbooking_api_demoTest Hotel IDs
With the shared credentials above, use these four test hotels. They are simulated — every one is named DO NOT BOOK, and no real reservation is ever made — and between them they cover every room, occupancy, meal plan and cancellation policy you need to certify. Their rates are stable: the same search returns the same rooms, prices and policies on any date you choose.
| Hotel ID | Use it to test | Rooms |
|---|---|---|
TTD-TEST-HOTEL-1 |
Meal plans — room only (RO), bed & breakfast (BB), half board (HB), full board (FB) and all inclusive (AI), all with free cancellation; plus non-refundable BB and HB |
Double, Twin, Family |
TTD-TEST-HOTEL-2 |
Cancellation policies — free until 7 days before check-in; free until 1 day before; stepped (free until 14 days, then one night, then the full stay from 3 days); refundable less one night ("refundableMode": "partial"); and non-refundable |
Double, Family |
TTD-TEST-HOTEL-3 |
Occupancy and children — only the room types that fit every room you search are returned. Infants (under 2) stay free, children 2–11 are charged the child rate, and 12–17 are charged as adults | Single, Double, Twin, Triple, Family, Two-Bedroom Suite (up to 6) |
TTD-TEST-HOTEL-4 |
What checkAvail can report — a rate whose price rises 10% at checkAvail (ids ending -PRICEUP), a rate checkAvail reports unavailable (ids ending -GONE), standard rates, and a tourism fee payable at the hotel |
Double, Family |
Search them by ID — hotelList with "hotelIds": ["TTD-TEST-HOTEL-1", "TTD-TEST-HOTEL-2", "TTD-TEST-HOTEL-3", "TTD-TEST-HOTEL-4"] — and leave maxRatesPerHotel unset to see every rate. IDs are strings: send them quoted.
Reading a ratePkgId. Each test rate id says what it is: TEST<hotel>-<room>-<meal plan>-<policy>, for example TEST1-FAM-BB-FREE7 (hotel 1, family room, bed & breakfast, free cancellation until 7 days before check-in). Policies are FREE7, FREE1, LADDER (stepped), PART (refundable less one night) and NRF (non-refundable).
The certification scenarios on the test hotels.
- Scenario 1 — search
TTD-TEST-HOTEL-1with the three rooms. Only the Family Room takes 2 adults and 2 children, andTEST1-FAM-BB-FREE7is the refundable ("full") bed & breakfast rate: oneratePkgIdcovers all three rooms,totalRateis the price of all three andratethe price of one. - Scenario 2 — search
TTD-TEST-HOTEL-1with one room for 2 adults and pickTEST1-DBL-HB-NRF, the non-refundable ("no") half-board rate.
Book at least 15 days ahead to see every cancellation policy exactly as described. A stay that starts inside a policy's free period is quoted as the band that applies now — free-until-7-days becomes non-refundable inside 7 days, and the stepped policy charges one night inside 14 days — just as a real hotel would quote it.
Any other hotel ID — MOCK-HOTEL-1, or IDs of your own in hotelIds — still returns a generic simulated hotel with a single bed & breakfast rate, priced per room per night and refundable until 7 days before check-in. Like a test hotel rate, one ratePkgId covers every room you search.
Test Environment Notes
- What is available in test will not necessarily match production
- With the shared credentials, rates and inventory are simulated, and no real hotel is ever booked
- The simulator produces stable, repeatable rate data, so repeated runs stay consistent
checkAvailconfirms the pricehotelListquoted, on the four test hotels and on the generic simulated hotel alike — except the-PRICEUPand-GONErates onTTD-TEST-HOTEL-4, which exist to show a price change and an unavailable rate- Everyone using the shared credentials shares one account: use a unique
customerReferenceNoper booking, and do not send real guest details - Hotel content (
hotelStaticDetail) is not available for simulated hotels, andcallbackUrlis not accepted on the shared credentials — pollqueryOrders, or ask for your own test credentials to exercise callbacks
Certification Scenarios
Certification is assessed on complete end-to-end booking scenarios rather than on individual API calls in isolation. Each scenario checks that your integration carries every required step of the booking flow through consistently.
Core Scenarios
Between them, the two scenarios below cover the booking patterns you are most likely to encounter.
| Scenario | Rooms & Occupancy | Cancellation | Meal |
|---|---|---|---|
| Scenario 1 Multiple Rooms, complex case |
3 × Rooms • Room 1: 2 Adults + 2 Children (Age: 5 and 7 years) • Room 2: 2 Adults + 1 Child (Age: 4 years) • Room 3: 2 Adults |
Refundable"refundableMode": "full" |
With Breakfast"boardId": "BB" |
| Scenario 2 Single Room, standard case |
1 × Room • 2 Adults |
Non-Refundable"refundableMode": "no" |
Half-board"boardId": "HB" |
Test Core Booking Flow
For each scenario, capture and submit the JSON request and response files for the full API sequence set out below:
| Booking Flow Method | Request Requirements | Response Requirements |
|---|---|---|
| HotelList | • Search using the rooms and occupancy defined by the scenario • List of hotels searched: ≤ 50 |
• At least one hotel rate matching the scenario criteria is returned - Scenario 1: "refundableMode": "full" + "boardId": "BB"- Scenario 2: "refundableMode": "no" + "boardId": "HB" |
| HotelRates | • Send the same session-id returned by HotelList • Send the hotelId that corresponds to the scenario |
• Success response, with the same rate or an updated one |
| CheckAvail (Mandatory rate validation) |
• ratePkgId: the rate package ID you picked out of the HotelRates response• Carry the same session-id through so the booking process stays tracked |
• Success response, with the same rate or an updated one |
| Book | • customerReferenceNo: your reference number for the booking• ratePkgId: the rate package ID that CheckAvail validated• guests: guest details for the booking, per room• Carry the same session-id through so the booking process stays tracked |
• Booking succeeds and returns a status |
| Cancel | • supplierReferenceNo: the supplier's order reference number |
• Cancellation succeeds |
| QueryOrders | • customerReferenceNos: the customer reference numbers issued via the Book API |
• The response contains the details of the order being queried |
Additional Self-Testing Scenarios
| Scenario | Purpose | Test Requirements |
|---|---|---|
| Response Time Test | Confirm API response performance | • HotelList endpoint response time < 5 seconds • CheckAvail endpoint response time < 3 seconds • Book endpoint response time < 50 seconds |
| Concurrency Test | Confirm the integration copes with concurrent load | • Fire 10 search requests at the same time • Confirm every request comes back normally • Exercise your rate-limit handling |
Submit for Certification
When you have worked through every scenario, send us the complete set of raw JSON request and response files for review, following the requirements below.
File Requirements
File Type
- Everything you submit must be in
.jsonformat - Raw logs, Postman exports, and server traces are all fine
File Naming Convention (Mandatory)
Name every certification file according to this pattern:
<scenarioPrefix>_<rq|rs>_<apiName>.jsonWhere:
scenarioPrefix=s1ors2rq= requestrs= responseapiName=hotelList,hotelRates,checkAvail,book,queryOrders,cancel
Example Files (Scenario 1)
| Flow | Request File | Response File |
|---|---|---|
| HotelList | s1_rq_hotelList.json |
s1_rs_hotelList.json |
| HotelRates | s1_rq_hotelRates.json |
s1_rs_hotelRates.json |
| CheckAvail | s1_rq_checkAvail.json |
s1_rs_checkAvail.json |
| Book | s1_rq_book.json |
s1_rs_book.json |
| Cancel | s1_rq_cancel.json |
s1_rs_cancel.json |
| QueryOrders | s1_rq_queryOrders.json |
s1_rs_queryOrders.json |
Submission Method
Send the finished files to us by email:
- Email: integrations@ttdbooking.com
- Email Subject: Integration Review – [Your Company Name]
- Attachments: every JSON file, named as described above
Final Certification Outcome
Once we have been through your submitted JSON files, we will come back to you with one of these three results:
| Certification Outcome | Detail |
|---|---|
| ✅ Pass | Everything we require is working as expected. You are cleared to go live. |
| ☑️ Pass with conditions | A few minor points need correcting. The integration can move forward once we have confirmed those fixes. |
| ❌ Retry Required | We found functional errors serious enough to block release. Correct them and resubmit every affected scenario. |
Appendix: Sample Request/Response Templates
Scenario 1: HotelList Request
{
"hotelIds": ["1", "2", "3"],
"checkIn": "2026-02-15",
"checkOut": "2026-02-17",
"roomOccupancies": [
{
"adultCount": 2,
"childrenAges": [5, 7]
},
{
"adultCount": 2,
"childrenAges": [4]
},
{
"adultCount": 2,
"childrenAges": []
}
],
"nationalityCode": "US"
}Scenario 1: Expected Rate Matching
In Scenario 1, the rate you select needs to look like this:
{
"refundableMode": "full",
"board": {
"boardId": "BB"
}
}Scenario 2: HotelList Request
{
"hotelIds": ["4", "5"],
"checkIn": "2026-02-15",
"checkOut": "2026-02-17",
"roomOccupancies": [
{
"adultCount": 2,
"childrenAges": []
}
],
"nationalityCode": "US"
}Scenario 2: Expected Rate Matching
In Scenario 2, the rate you select needs to look like this:
{
"refundableMode": "no",
"board": {
"boardId": "HB"
}
}Frequently Asked Questions
Q: Can I use any hotel for testing?
A: Yes. The hotel IDs we list are recommendations that give you a stable baseline, but any hotel that returns availability in the test environment is acceptable for certification.
Q: What if the test hotel shows no availability?
A: The listed test hotels are set up to return availability at all times. If one does not, write to integrations@ttdbooking.com and we will look into it.
Q: How do I maintain the same session-id across API calls?
A: HotelList returns the session-id in its response. Pass that same value on to HotelRates, CheckAvail, and Book as the Session-Id request header.
Q: What currencies are supported in the test environment?
A: USD is used by default. EUR, GBP, CNY, and the other major currencies can also be tested by setting the Currency header.
Q: How long is the test data valid?
A: Test data is generated on the fly from the parameters you send. For the most reliable results, use a check-in date at least 7 days ahead.
Working through this certification is what gives both sides confidence that an integration is ready for live traffic. Pass it, and we will issue your production access.
Full API reference: developer.ttdbooking.com/hotel-api/docs
Last Updated: December 2025 Version: 1.0

