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/Y dates 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.
  • Credential as first child — any other placement is rejected.
  • d/m/Y dates — everywhere, including CancellationPolicy/FromDate. A 2027-01-15 is rejected.
  • Available = 'Disponible' — the exact string (capital D) marks a sellable offer; do not test True.
  • Replay the IdToken as-is — returned unchanged in HotelBookingCreationREQ.IdToken; the response echoes it in OrderDetails/@attributes.IdToken.
  • expectedprice — amount with 3 decimals (2500.000): a mismatch with the current price fails the booking, then replay a HotelQuoteREQ.
  • No HotelRoomSelectionRQ — dead message in the historical client, not implemented (selection happens via QuoteId + IdToken).
  • publicDataRQ — never consumed by known clients; the gateway answers a minimal XML (countries, currencies, languages) but the official response format is undetermined.

Was this page helpful?