Travel To Discover

Loading documentation…

2. Guides

Export .md

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

text
appKey: ttdbooking_api_demo
appSecret: ttdbooking_api_demo

Test 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-1 with the three rooms. Only the Family Room takes 2 adults and 2 children, and TEST1-FAM-BB-FREE7 is the refundable ("full") bed & breakfast rate: one ratePkgId covers all three rooms, totalRate is the price of all three and rate the price of one.
  • Scenario 2 — search TTD-TEST-HOTEL-1 with one room for 2 adults and pick TEST1-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
  • checkAvail confirms the price hotelList quoted, on the four test hotels and on the generic simulated hotel alike — except the -PRICEUP and -GONE rates on TTD-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 customerReferenceNo per booking, and do not send real guest details
  • Hotel content (hotelStaticDetail) is not available for simulated hotels, and callbackUrl is not accepted on the shared credentials — poll queryOrders, 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 .json format
  • Raw logs, Postman exports, and server traces are all fine

File Naming Convention (Mandatory)

Name every certification file according to this pattern:

text
<scenarioPrefix>_<rq|rs>_<apiName>.json

Where:

  • scenarioPrefix = s1 or s2
  • rq = request
  • rs = response
  • apiName = 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

json
{
  "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:

json
{
  "refundableMode": "full",
  "board": {
    "boardId": "BB"
  }
}

Scenario 2: HotelList Request

json
{
  "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:

json
{
  "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