HotelX Certification
When to Apply
You should apply once you've completed implementing the relevant methods.
Is It Necessary to Complete All Certification Cases?
No. The Direct Payment case is optional if it is not relevant to your business. The Refundable and Non-Refundable cases are always required.
What Information Will We Check?
The certification aims to verify that the HotelX API user makes requests correctly. This is done by reviewing request and response logs for the following methods:
The onboarding certification follows this phase order:
- Content certification
- Case: Refundable
- Case: Non-Refundable
- Case: Payment Card (optional)
Content certification
| Method | Request Requirement | Response Requirement |
|---|---|---|
| Hotels | — | At least one hotel with the requested hotelCode should be present in the response. |
Case: Refundable
| Method | Request Requirement | Response Requirement |
|---|---|---|
| Refundable Search | 3 rooms: - 1 room with 3 ADT - 1 room with 2 ADT + 1 CHILD (5yo) - 1 room with 2 ADT | - Errors need to be requested in response but empty - Number of Options > 0 - At least one refundable option present in response |
| Refundable Quote | Valid refundable optionID | - Errors need to be requested in response but empty - rq.HotelX.Quote.OptionQuote.CancelPolicy.Refundable = true |
| Refundable Book | Valid refundable optionRefId | Errors need to be requested in response but empty |
Case: Non Refundable
| Method | Request Requirement | Response Requirement |
|---|---|---|
| Non-Refundable Search | 2 rooms: - 1 room with 2 ADT + 1 CHILD (5yo) - 1 room with 2 ADT | - Errors need to be requested in response but empty - Number of Options > 0 - At least one non-refundable option present in response |
| Non-Refundable Quote | Valid non-refundable optionID | - Errors need to be requested in response but empty - rq.HotelX.Quote.OptionQuote.CancelPolicy.Refundable = false |
| Non-Refundable Book | Valid non-refundable optionRefId | Errors need to be requested in response but empty |
Case: Payment Card (optional)
| Method | Request Requirement | Response Requirement |
|---|---|---|
| Direct Payment Search (Optional) | 1 room with 2 ADT | - Errors need to be requested in response but empty - Number of Options > 0 - At least one DIRECT payment type option (option.PaymentType) present in response |
| Direct Payment Quote (Optional) | Valid optionID with payment type DIRECT | - Errors need to be requested in response but empty - rq.HotelX.Quote.OptionQuote.PaymentType = DIRECT |
| Direct Payment Book (Optional) | Valid optionRefId with payment type DIRECT | Errors need to be requested in response but empty |
Additional Validations
These validations apply independently of the four onboarding phases above.
| Method | Request Requirement | Response Requirement |
|---|---|---|
| Cancellation | One of these two cases: - Cancel by bookingID - Cancel by client or supplier reference | - Errors need to be requested in response but empty - In Cancel by reference, HotelCancelInput.reference and HotelCancelInput.hotelCode should be requested |
| Booking Read/List | One of these three cases: - Booking by bookingID - Booking with typeSearch = "DATES" → requires rq.Criteria.Dates - Booking with typeSearch = "REFERENCES" → requires rq.Criteria.References | - Errors need to be requested in response but empty - At least one booking must be found in the response - Booking Status in the booking object must be requested |
Certification Files Format
Travelgate has implemented an automated certification system to ensure the key points of the methods are correctly covered according to the HotelX Pull Buyers API. This system requires the certification files to be uploaded in a specific name and format: the format should be .json and the name should indicate the corresponding certification.
The following table outlines the names corresponding to each part of the certification process:
| Method | Request | Response |
|---|---|---|
| Content certification > Hotels RQ and RS | Not required | rs_hotels.json |
| Case: Refundable > Search RQ and RS | rq_search_rf.json | rs_search_rf.json |
| Case: Refundable > Quote RQ and RS | rq_quote_rf.json | rs_quote_rf.json |
| Case: Refundable > Book RQ and RS | rq_book_rf.json | rs_book_rf.json |
| Case: Non Refundable > Search RQ and RS | rq_search_nrf.json | rs_search_nrf.json |
| Case: Non Refundable > Quote RQ and RS | rq_quote_nrf.json | rs_quote_nrf.json |
| Case: Non Refundable > Book RQ and RS | rq_book_nrf.json | rs_book_nrf.json |
| Case: Payment Card (optional) > Search RQ and RS | rq_search_direct.json | rs_search_direct.json |
| Case: Payment Card (optional) > Quote RQ and RS | rq_quote_direct.json | rs_quote_direct.json |
| Case: Payment Card (optional) > Book RQ and RS | rq_book_direct.json | rs_book_direct.json |
| Booking Management > Cancel RQ and RS | rq_cancel_rf.json | rs_cancel_rf.json |
Certification Panel Support with AIna
The onboarding certification panel now includes a direct support box powered by AIna, Travelgate's AI Assistant. Use the Need help? Let's solve it together! box to describe your issue and click Ask AIna. When you submit a question, a chat window opens with troubleshooting guidance and source references from Travelgate Documentation.

How to Use the Embedded AIna Box Effectively
- Add your issue in full sentences (avoid short or generic prompts).
- Include your context:
- API: HotelX Pull Buyers API
- Method: Hotels, Search, Quote, Book, Cancel, or Booking Read/List
- Exact error message and type (for example,
VALIDATION_ERROR)
- Submit your prompt with Ask AIna.
- Review the returned checklist and linked sources before retrying your request. Your chat history is saved automatically so you can pick up where you left off. To start a fresh conversation, click the pencil icon next to the Use MCP button.

AIna can provide troubleshooting guidance and documentation references throughout your certification, but it cannot modify your configuration or account settings. For account-level changes or unresolved issues during your certification process, contact our team via sales.support@travelgate.com.
For best interaction practices, see the AIna User Guide.
Example of a Search Query Request and Response
Query Logs
Be sure to check our HotelX API Documentation for complete details and examples of queries and mutations.
Search Request
Search Query
query (
$criteriaSearch: HotelCriteriaSearchInput
$settings: HotelSettingsInput
$filterSearch: HotelXFilterSearchInput
) {
hotelX {
search(
criteria: $criteriaSearch
settings: $settings
filterSearch: $filterSearch
) {
options {
id
accessCode
supplierCode
hotelCode
hotelCodeSupplier
hotelName
boardCode
boardCodeSupplier
paymentType
status
occupancies {
id
paxes {
age
}
}
rooms {
occupancyRefId
code
supplierCode
description
descriptionSupplier
refundable
roomPrice {
price {
currency
binding
net
gross
exchange {
currency
rate
}
}
breakdown {
start
end
price {
currency
binding
net
gross
exchange {
currency
rate
}
minimumSellingPrice
}
}
}
beds {
type
count
}
ratePlans {
start
end
code
name
}
promotions{
start
end
code
name
}
}
price {
currency
binding
net
gross
exchange {
currency
rate
}
minimumSellingPrice
markups {
channel
currency
binding
net
gross
exchange {
currency
rate
}
rules {
id
name
type
value
}
}
}
supplements {
start
end
code
name
description
supplementType
chargeType
mandatory
durationType
quantity
unit
resort {
code
name
description
}
price {
currency
binding
net
gross
exchange {
currency
rate
}
}
}
surcharges {
code
chargeType
description
mandatory
price {
currency
binding
net
gross
exchange {
currency
rate
}
markups {
channel
currency
binding
net
gross
exchange {
currency
rate
}
}
}
}
rateRules
cancelPolicy {
refundable
cancelPenalties {
deadline
isCalculatedDeadline
penaltyType
currency
value
}
}
remarks
}
errors {
code
type
description
}
warnings {
code
type
description
}
}
}
}
Search Request Variables
{
"criteriaSearch": {
"checkIn": "2027-05-28",
"checkOut": "2027-05-29",
"occupancies": [
{
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"hotels": [
"BR1518"
],
"currency": "EUR",
"markets": [
"ES"
],
"language": "en",
"nationality": "ES"
},
"settings": {
"client": "client_demo",
"testMode": true,
"timeout": 25000,
"plugins": [
{
"step": "RESPONSE",
"pluginsType": [
{
"type": "PRE_STEP",
"name": "preference",
"parameters": [
{
"key": "primaryKey",
"value": "hotel,board,room,rateRules"
},
{
"key": "optionsPerKey",
"value": "1"
},
{
"key": "internalCurrencyConversion",
"value": "true"
}
]
}
]
}
]
}
}
Search Response
{
"data": {
"hotelX": {
"search": {
"options": [
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e3!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n19!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M625!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7591854|3|11|0!~|A116216!~|Bprmsu---Aw--1k-!~|C30|30!~|EPremium Suite Jacuzzi 1 King Bed!~|Fsuite premium with jacuzzi and king bed!~|G1!~|U2,625,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7591854|3|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I1250!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "19",
"boardCodeSupplier": "3",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "prmsu---Aw--1k-",
"supplierCode": "116216",
"description": "Premium Suite Jacuzzi 1 King Bed",
"descriptionSupplier": "suite premium with jacuzzi and king bed",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 625,
"gross": 625,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 625,
"gross": 625,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 625,
"gross": 625,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 625
}
]
},
"remarks": null
},
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e1!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n1!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M745!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7591854|1|11|0!~|A116216!~|Bprmsu---Aw--1k-!~|C30|30!~|EPremium Suite Jacuzzi 1 King Bed!~|Fsuite premium with jacuzzi and king bed!~|G1!~|U2,745,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7591854|1|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I1490!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "1",
"boardCodeSupplier": "1",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "prmsu---Aw--1k-",
"supplierCode": "116216",
"description": "Premium Suite Jacuzzi 1 King Bed",
"descriptionSupplier": "suite premium with jacuzzi and king bed",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 745,
"gross": 745,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 745,
"gross": 745,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 745,
"gross": 745,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 745
}
]
},
"remarks": null
},
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e3!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n19!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M125!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7591166|3|11|0!~|A2269!~|Bstr----d--!~|C30|30!~|EStandard Double Room!~|FDouble Standard!~|G1!~|U2,125,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7591166|3|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I250!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "19",
"boardCodeSupplier": "3",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "str----d--",
"supplierCode": "2269",
"description": "Standard Double Room",
"descriptionSupplier": "Double Standard",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 125,
"gross": 125,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 125,
"gross": 125,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 125,
"gross": 125,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 125
}
]
},
"remarks": null
},
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e1!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n1!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M225!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7591166|1|11|0!~|A2269!~|Bstr----d--!~|C30|30!~|EStandard Double Room!~|FDouble Standard!~|G1!~|U2,225,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7591166|1|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I450!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "1",
"boardCodeSupplier": "1",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "str----d--",
"supplierCode": "2269",
"description": "Standard Double Room",
"descriptionSupplier": "Double Standard",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 225,
"gross": 225,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 225,
"gross": 225,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 225,
"gross": 225,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 225
}
]
},
"remarks": null
},
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e3!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n19!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M356!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7556762|3|11|0!~|A33841!~|Bjusu------!~|C30|30!~|EJunior Suite!~|FJunior Suite!~|G1!~|U2,356,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7556762|3|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I712!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "19",
"boardCodeSupplier": "3",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "jusu------",
"supplierCode": "33841",
"description": "Junior Suite",
"descriptionSupplier": "Junior Suite",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 356,
"gross": 356,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 356,
"gross": 356,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 356,
"gross": 356,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 356
}
]
},
"remarks": null
},
{
"id": "33!~|a0!~|b270528!~|c270529!~|d101930!~|e1!~|f0!~|gES!~|hES!~|ien!~|jEUR!~|k0!~|l2!~|mBR1518!~|n1!~|nTGX!~|o0!~|p1!~|x07050945!~|r!~|sBARTEST!~|M456!~|N0!~|Ofalse!~|PEUR!~|Q!~|R0!~|S!~|T!~|z1|30#30|101930|2027-05-28|1|7556761|7556762|1|11|0!~|A33841!~|Bjusu------!~|C30|30!~|EJunior Suite!~|FJunior Suite!~|G1!~|U2,456,1811239200!~|H1!~|I1|30#30|101930|2027-05-28|1|7556761|7556762|1|11|0!~|J1!~|K1!~|L1!~|H2!~|IES!~|J1!~|K0!~|L1!~|H703!~|I1#3@#!~|J0!~|K1!~|L0!~|H710!~|I912!~|J0!~|K0!~|L0!~|H708!~|I3759f074-5aed-46f8-8401-6ae7935fd9e4!~|J0!~|K0!~|L0!~|H709!~|Ien!~|J0!~|K0!~|L0!~|tOK!~|uConnectors!~|v0!~|w!~|yPACKAGE!~|q!~|q1!~|y!~|",
"accessCode": "2",
"supplierCode": "HOTELTEST",
"hotelCode": "BR1518",
"hotelCodeSupplier": "101930",
"hotelName": "Hotel Nord Easy Patos",
"boardCode": "1",
"boardCodeSupplier": "1",
"paymentType": "MERCHANT",
"status": "OK",
"occupancies": [
{
"id": 1,
"paxes": [
{
"age": 30
},
{
"age": 30
}
]
}
],
"rooms": [
{
"occupancyRefId": 1,
"code": "jusu------",
"supplierCode": "33841",
"description": "Junior Suite",
"descriptionSupplier": "Junior Suite",
"refundable": true,
"roomPrice": {
"price": {
"currency": "EUR",
"binding": false,
"net": 456,
"gross": 456,
"exchange": {
"currency": "EUR",
"rate": 1
}
},
"breakdown": [
{
"start": "2027-05-28",
"end": "2027-05-29",
"price": {
"currency": "EUR",
"binding": false,
"net": 456,
"gross": 456,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null
}
}
]
},
"beds": null,
"ratePlans": [
{
"start": null,
"end": null,
"code": "BARTEST",
"name": "Test BAR Rate"
}
],
"promotions": null
}
],
"price": {
"currency": "EUR",
"binding": false,
"net": 456,
"gross": 456,
"exchange": {
"currency": "EUR",
"rate": 1
},
"minimumSellingPrice": null,
"markups": null
},
"supplements": null,
"surcharges": null,
"rateRules": [
"PACKAGE"
],
"cancelPolicy": {
"refundable": true,
"cancelPenalties": [
{
"deadline": "2027-05-25T10:00:00Z",
"isCalculatedDeadline": true,
"penaltyType": "IMPORT",
"currency": "EUR",
"value": 456
}
]
},
"remarks": null
}
],
"errors": null,
"warnings": [
{
"code": "",
"type": "204",
"description": "Access `5647` returned: No results found"
}
]
}
}
}
}
What Connections Should I Use for Certification?
It is recommended to always use the demo connections provided (Travelgate test and Smyrooms test) along with your client and API Key.
Which Credentials and Hotels Can I Use for Certification Cases?
For certification cases, you can use the following credentials and hotel:
- Apikey: "Apikey test0000-0000-0000-0000-000000000000".
- Client: “client_demo”.
- Hotel: "BR1518".
What credentials should I use when moving to the production environment?
Once you complete the HotelX certification process and transition to the production environment, you must update your connection credentials.
During the certification phase, you utilize the test API Key and Client provided by Travelgate. To successfully process live requests, you must replace these test credentials with your own:
- API Key: Replace the Travelgate test API Key with your assigned Buyer production API Key.
- Client: Replace the Travelgate client_demo with your production Client identifier.
Ensure these parameters are updated in your request headers before initiating any live traffic to avoid authentication and validation errors.