<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-03-14" quantity="5" />
<availability from="2027-03-15" to="2027-03-31" quantity="2" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-14" unitPrice="142.00"
minimumStay="1" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
<planning from="2027-03-15" to="2027-03-31" unitPrice="169.00"
minimumStay="2" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-03-31" quantity="5" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy personCount="1" unitPrice="100.00" isClosed="false" />
<occupancy personCount="2" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy adultCount="1" childCount="0" unitPrice="100.00" isClosed="false" />
<occupancy adultCount="1" childCount="1" unitPrice="105.00" isClosed="false" />
<occupancy adultCount="2" childCount="0" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="5" />
</inventory>
</room>
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="7" />
</inventory>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BB" rateName="BB"
mealPlanType="BreakfastIncluded">
<planning from="2027-08-30" to="2027-09-29" unitPrice="142.00">
<mealPlan paxType="adult" price="20.0000" />
<mealPlan paxType="child" price="12.0000" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<success />
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<failure type="5" message="RateMappingError">
<comment><![CDATA[Rate (BAR) is invalid or not configured]]></comment>
</failure>
</message>
Planning
Planning updates
D-EDGE pushes availability, prices, and restrictions
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-03-14" quantity="5" />
<availability from="2027-03-15" to="2027-03-31" quantity="2" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-14" unitPrice="142.00"
minimumStay="1" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
<planning from="2027-03-15" to="2027-03-31" unitPrice="169.00"
minimumStay="2" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-03-31" quantity="5" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy personCount="1" unitPrice="100.00" isClosed="false" />
<occupancy personCount="2" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy adultCount="1" childCount="0" unitPrice="100.00" isClosed="false" />
<occupancy adultCount="1" childCount="1" unitPrice="105.00" isClosed="false" />
<occupancy adultCount="2" childCount="0" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="5" />
</inventory>
</room>
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="7" />
</inventory>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BB" rateName="BB"
mealPlanType="BreakfastIncluded">
<planning from="2027-08-30" to="2027-09-29" unitPrice="142.00">
<mealPlan paxType="adult" price="20.0000" />
<mealPlan paxType="child" price="12.0000" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<success />
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<failure type="5" message="RateMappingError">
<comment><![CDATA[Rate (BAR) is invalid or not configured]]></comment>
</failure>
</message>
D-EDGE sends HTTP
POST requests to the URL you provide, with the XML message as the raw body and the credentials inside the message. The hosting model is described in the introduction.The message we send
element
required
The root element.
Hide child elements
Hide child elements
element
required
Your credentials: a
login and a password attribute, each up to 50 characters. See Authentication.element
required
The update itself.
Hide attributes and children
Hide attributes and children
attribute · string
required
The hotel identifier or code, as declared in Get hotel. Maximum 50 characters.
element · 1..n
required
One room type, identified by its
id attribute (your room code, maximum 50 characters).Show child elements
Show child elements
element · 0..n
The availability part. When absent, the update concerns prices and restrictions only.
Show child elements
Show child elements
element · 1..n
required
A date range of availability:
from and to dates (inclusive, YYYY-MM-DD) and a quantity (0 to 99999), the number of rooms available on each day of the range for this room type. The three attributes are always present. Consecutive ranges may leave gaps between them.element · 0..n
The prices and restrictions part for one rate.
Show attributes and children
Show attributes and children
attribute · string
required
The rate identifier or code, as declared in Get hotel. Maximum 50 characters.
attribute · string
The rate name, generally the same value as
rateCode.attribute · string
The rate currency, ISO code. When absent, the rate is not activated or mapped for this room on the D-EDGE side.
attribute · enum
The meal plan set up in D-EDGE for the rate:
BreakfastIncluded, HalfBoard, FullBoard, or AllInclusive. Sent only when the meal plan feature is enabled for your connection, from your questionnaire, and the hotel uses it. See Meal plans below.element · 1..n
required
Prices and restrictions on a date range. Apart from
from and to, all attributes are optional and independent: update exactly what is present. Consecutive ranges may leave gaps between them.Show attributes and children
Show attributes and children
attribute · date
required
First day of the range,
YYYY-MM-DD.attribute · date
required
Last day of the range, included.
attribute · decimal
The room price for the rate, per day, for the room’s default occupancy. The number of decimals is not fixed: parse it as a decimal, do not assume two. Absent when the price model is
PerPerson or PerOccupancy (prices then travel in occupancy elements), when no price is defined, or when the room and rate are closed.attribute · integer
Minimum stay in nights (1 to 99) to book the room and rate, applied to every day of the range.
attribute · integer
Maximum stay in nights (1 to 99), same application.
attribute · boolean
Closed-to-arrival restriction. If your platform has no such notion, see the workaround in Best practices.
attribute · boolean
Closed-to-departure restriction.
attribute · boolean
Open or closed to sale for the room and rate, over the range. Independent of the
isClosed carried by each occupancy: true here closes the room and rate whatever the occupancy values say, and false here leaves each occupancy to its own flag.attribute · integer
Availability for this room and rate combination (0 to 99999). Sent only when the connection is configured for per-rate availability, from your questionnaire.
element · 0..n
Per-occupancy prices, present when the price model is
PerPerson or PerOccupancy.Show attributes
Show attributes
attribute · integer
The person count the price applies to (1 to 99). Present with
PerPerson, one element per count between the room’s minOccupancy and maxOccupancy.attribute · integer
The adult count the price applies to (1 to 99). Present with
PerOccupancy, together with childCount, one element per combination declared in Get hotel.attribute · integer
The child count, with
PerOccupancy.attribute · decimal
The room price for this occupancy, per day, over the range. The number of decimals is not fixed. When absent, the occupancy is closed and
isClosed is true.attribute · boolean
required
Open or closed to sale for this occupancy only. It does not reopen a room and rate closed at
planning level: an update can carry isClosed="true" on the planning and isClosed="false" on its occupancies, and the room and rate stay closed.element · 0..2
The meal price detail, for information: a
paxType attribute (adult or child) and a price attribute, the price of one meal for that pax type, with no fixed number of decimals. Present only when the meal plan feature is enabled and the rate carries a separated meal plan price. Which pax types count towards unitPrice depends on the price model: see Meal plans below.<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-03-14" quantity="5" />
<availability from="2027-03-15" to="2027-03-31" quantity="2" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-14" unitPrice="142.00"
minimumStay="1" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
<planning from="2027-03-15" to="2027-03-31" unitPrice="169.00"
minimumStay="2" maximumStay="14" noArrival="false"
noDeparture="false" isClosed="false" />
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-03-31" quantity="5" />
</inventory>
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy personCount="1" unitPrice="100.00" isClosed="false" />
<occupancy personCount="2" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BAR" rateName="BAR">
<planning from="2027-03-01" to="2027-03-31" minimumStay="1"
maximumStay="99" noArrival="false" noDeparture="false"
isClosed="false">
<occupancy adultCount="1" childCount="0" unitPrice="100.00" isClosed="false" />
<occupancy adultCount="1" childCount="1" unitPrice="105.00" isClosed="false" />
<occupancy adultCount="2" childCount="0" unitPrice="120.00" isClosed="false" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="CLA">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="5" />
</inventory>
</room>
<room id="SUP">
<inventory>
<availability from="2027-03-01" to="2027-12-30" quantity="7" />
</inventory>
</room>
</inventoryUpdate>
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<authentication login="testhotel" password="testpassword" />
<inventoryUpdate hotelId="1234">
<room id="SUP">
<rate currency="EUR" rateCode="BB" rateName="BB"
mealPlanType="BreakfastIncluded">
<planning from="2027-08-30" to="2027-09-29" unitPrice="142.00">
<mealPlan paxType="adult" price="20.0000" />
<mealPlan paxType="child" price="12.0000" />
</planning>
</rate>
</room>
</inventoryUpdate>
</message>
Your response
Answer200 OK with the message envelope: <success> when the update is applied, <failure> with the right error code when it is refused. When a message mixes valid and invalid parts (an unknown rate next to a known one, for instance), answer <failure> with the error code of the invalid part. A failure tells D-EDGE the update was not processed, and a refused update is not resent. D-EDGE still recommends applying the valid parts on your side, to limit the gaps between the two systems. A price is never a reason to refuse: D-EDGE forwards what the hotel set, whether 2.00 or 340000000.50. Answer <success> on extreme values and raise an alert on your side if you want them checked.
<?xml version="1.0" encoding="utf-8"?>
<message>
<success />
</message>
<?xml version="1.0" encoding="utf-8"?>
<message>
<failure type="5" message="RateMappingError">
<comment><![CDATA[Rate (BAR) is invalid or not configured]]></comment>
</failure>
</message>
How prices arrive per price model
The price sits either in theunitPrice attribute of planning or in its occupancy children, depending on the priceModel your platform declared in Get hotel; the examples above show one message per model. Read prices according to the model you declared rather than inferring it from each message: the model does not change between updates. The three models are compared on the Price models page, and How D-EDGE picks each price explains where each price comes from when the hotel set prices for fewer occupancies than your model asks for.
Meal plans
When the meal plan feature is enabled for your connection and the hotel separates meal prices from room prices, the rate carries amealPlanType and each planning may carry mealPlan elements. The unitPrice you receive is still the total room price, meals included: the mealPlan elements only tell you, for information, the price of one meal per adult or child. Whether the feature is enabled or not, the price you receive is always the final sellable price.
How D-EDGE adds the meals to the room price depends on the price model your platform declared in Get hotel. In every case the meal price is per person and per day, the adult price always counts, and infants never do. With an adult meal at 20 and a child meal at 12:
| Price model | Meals added | Example |
|---|---|---|
PerDay | The adult meal price, times the room’s default occupancy (the one set on the D-EDGE side). Only the adult price is used. | A Suite with a default occupancy of 3 and a room price of 300 arrives as unitPrice="360.00": three adult meals. |
PerPerson | The adult meal price, times the personCount of each occupancy line. Every person counts as an adult, so only the adult price is used. | Room prices of 100 for 1 person and 120 for 2 arrive as 120 and 160. |
PerOccupancy | The adult meal price times adultCount, plus the child meal price times childCount, on each occupancy line. | A room price of 105 for 1 adult and 1 child arrives as 137: one adult meal and one child meal. |
PerDay rule: the Superior Room has a default occupancy of 2, so a room price of 102 plus two adult meals at 20 gives the unitPrice of 142.Was this page helpful?