Cyberesa compatible gateway
This gateway reproduces the Cyberesa XML API: same messages, same conventions. If your system already consumes a Cyberesa supplier, it works against the gateway unmodified.
Transport
- URL — a single
POST,Content-Type: application/x-www-form-urlencoded. - Field —
strRQ: the full XML string (fragment without<?xml?>, no namespace; the root carries the message name and acts as the dispatcher). - Response — always HTTP 200 + valid XML, no CDATA.
cURL
curl -s -X POST "https://partners.bravebooking.net/api/cyberesa" \
--data-urlencode "strRQ=<HotelSearchREQ>…</HotelSearchREQ>"
Conventions
<Credential><Login>…</Login><Password>…</Password></Credential>— always the first child of the root.<User>— your numeric agency identifier.d/m/Ydates everywhere (searches and cancellation policies).- Booleans as strings
'True'/'False';Available = 'Disponible'(exact) means sellable. - Business errors —
<Error><Message>…</Message></Error>,<Error>…</Error>or<ErrorResult><Message>…</Message></ErrorResult>, always over HTTP 200.
Full examples
HotelSearchREQ
Request — strRQ
<HotelSearchREQ>
<Credential>
<Login>demo_cy_login</Login>
<Password>demo_cy_password</Password>
</Credential>
<SearchDetails>
<BookingDetails>
<User>12345</User>
<Language>fr</Language>
<FromDate>15/01/2027</FromDate>
<ToDate>20/01/2027</ToDate>
<IdCity>146070</IdCity>
<Timeout>7000</Timeout>
<Rooms>
<Room id="1">
<Pax>
<Adult>2</Adult>
<Child age="3-5">2</Child>
</Pax>
<Boarding></Boarding>
</Room>
</Rooms>
</BookingDetails>
<Filters>
<PriceBreakDown>False</PriceBreakDown>
<Sort><By></By></Sort>
<hotels_ids>1803258</hotels_ids>
</Filters>
</SearchDetails>
</HotelSearchREQ>
The response carries Hotels/@attributes.count, Hotels/Hotel/@attributes.id, Hotel/ThumbImage/@attributes.url, Hotel/rooms/room (attributes id, count; Title, Adult, Child, AvailableQuantity) and room/Boardings/Boarding (attribute id; Title, Rate, RateWithoutPromotion, Available=Disponible, NonRefundable=True|False, CancellationPolicy/FromDate|Fee).
HotelQuoteREQ
The quote verifies the price and produces the QuoteId + IdToken required for booking.
Request — strRQ
<HotelQuoteREQ>
<Credential>
<Login>demo_cy_login</Login>
<Password>demo_cy_password</Password>
</Credential>
<Details>
<User>12345</User>
<Language>fr</Language>
<Currency>TND</Currency>
<IdHotel>1803258</IdHotel>
<FromDate>15/01/2027</FromDate>
<ToDate>20/01/2027</ToDate>
<Rooms>
<Room>
<Pax>
<Adult>2</Adult>
<Child age="0">0</Child>
</Pax>
<Boarding>1</Boarding>
</Room>
</Rooms>
</Details>
</HotelQuoteREQ>
Response: FromDate, ToDate (root), Hotel/QuoteId (= reference replayed at booking), Hotel/rooms/room/… (same fields as search; CancellationPolicy/FromDate in d/m/Y).
HotelBookingCreationREQ
Request — strRQ
<HotelBookingCreationREQ>
<Credential>
<Login>demo_cy_login</Login>
<Password>demo_cy_password</Password>
</Credential>
<City id="146070"></City>
<Destination id="1"></Destination>
<User>12345</User>
<Language>fr</Language>
<Currency>TND</Currency>
<HotelID>1803258</HotelID>
<QuoteId>71885</QuoteId>
<IdToken>rk_x9F2kQ8example</IdToken>
<expectedprice>2500.000</expectedprice>
<FromDate>15/01/2027</FromDate>
<ToDate>20/01/2027</ToDate>
<SelectedRooms>
<SelectedRoom id="18">
<Adult>2</Adult>
<Child age="5">1</Child>
<Infant>0</Infant>
<Boarding id="16"/>
<Customers>
<Customer>
<Civility>Mr</Civility>
<FirstName>TEST-A</FirstName>
<LastName>TEST-B</LastName>
<Age>35</Age>
</Customer>
</Customers>
</SelectedRoom>
</SelectedRooms>
</HotelBookingCreationREQ>
Response: OrderDetails/@attributes { Id, IdToken (= received IdToken), Password }, OrderDetails/TotalRate, OrderDetails/Rooms/Room/…, optional root CancellationPolicy.
HotelBookingCancellationREQ
Request — strRQ
<HotelBookingCancellationREQ>
<Credential>
<Login>demo_cy_login</Login>
<Password>demo_cy_password</Password>
</Credential>
<User>12345</User>
<Language>fr</Language>
<OrderId>BPG-2026-000123</OrderId>
</HotelBookingCancellationREQ>
Success: <ReturnedValue><OrderCancelled>True</OrderCancelled></ReturnedValue>.
StaticDataRQ (hotel list)
Request — strRQ
<StaticDataRQ gethotelslist="true">
<Credential>
<Login>demo_cy_login</Login>
<Password>demo_cy_password</Password>
</Credential>
<Ilng>1</Ilng>
<User>12345</User>
</StaticDataRQ>
Response: Hotels/Hotel with Id, IdCity, Title.
Pitfalls
- HTTP 200 + error in the XML — check
<ErrorResult>,<Error>before parsing the business response. Credentialas first child — any other placement is rejected.d/m/Ydates — everywhere, includingCancellationPolicy/FromDate. A2027-01-15is rejected.Available = 'Disponible'— the exact string (capital D) marks a sellable offer; do not testTrue.- Replay the
IdTokenas-is — returned unchanged inHotelBookingCreationREQ.IdToken; the response echoes it inOrderDetails/@attributes.IdToken. expectedprice— amount with 3 decimals (2500.000): a mismatch with the current price fails the booking, then replay aHotelQuoteREQ.- No
HotelRoomSelectionRQ— dead message in the historical client, not implemented (selection happens viaQuoteId+IdToken). publicDataRQ— never consumed by known clients; the gateway answers a minimal XML (countries, currencies, languages) but the official response format is undetermined.