Negotiated Rates

What are Negotiated Rates?

Negotiated rates are special pricing agreements between organisations and hotels that provide discounts and benefits to travellers. These agreements exist across the travel industry, from large corporations securing rates for their employees, to online travel agencies (OTAs) negotiating exclusive deals for their customers, to banks offering special rates as cardholder benefits.
When any organisation has significant travel volume or member base, they can negotiate directly with hotel chains for special rates. These negotiations can result in:
  • Discounted pricing: Money off the best available public rate

  • Additional benefits: Free breakfast, Wi-Fi, parking, or room upgrades

  • Guaranteed availability: Rooms reserved for the company even during busy periods

  • Consistent terms: Same cancellation policies and benefits across properties

These rates are distributed through a Rate Access Code (RAC) - a unique 2-6 character code that unlocks the special pricing when booking.

Overview of the Process

For this guide, we'll focus on the corporate travel use case. The journey from negotiating a corporate rate to employees booking it involves three phases:

Phase 1: Negotiate

This initial phase happens outside of Duffel's platform and involves the commercial negotiations between the corporate and hotels. During this phase, corporate travel managers or their TMCs work directly with hotel sales teams to secure favourable rates based on projected travel volume.
The outcome is a signed agreement specifying the discount level, included benefits, applicable properties, and a unique RAC that will unlock these rates in booking systems.
That RAC may be one assigned by the hotel, or one supplied by the corporate to the hotel.

Phase 2: Load Rates

This technical phase transforms the commercial agreement into bookable rates within your booking tool. It requires coordination between the hotels, the corporate, you, and Duffel to ensure rates are properly configured in all systems. This phase is critical for ensuring employees can actually access and book the negotiated rates. Most issues with negotiated rates occur during this phase, making proper setup and validation essential.
Step 1: Provide the hotel with Duffel's booking credentials
The corporate travel manager needs to share Duffel's travel agency details with the hotel to ensure your negotiated rates are properly distributed through the Global Distribution System to Duffel and made available to your account. If you need these agency details, please contact your Duffel account manager or email help@duffel.com. The hotel's revenue team will then load the negotiated rate into their Property Management System. This process typically takes 24-72 hours to fully propagate across all distribution systems, so plan accordingly when coordinating with your hotel partners.
Step 2: Loading the negotiated rate in Duffel
Once the hotel has confirmed the rate has been loaded, use the Create a Negotiated Rate endpoint to create a record of your negotiated rate agreement. This is typically done by the corporate travel manager via your booking tool configuration pages, and includes declaring which hotels are distributing the negotiated rates, and the RAC.
After loading is complete, the rate is ready for testing and validation.
Step 3: Verify the negotiated rate is being returned correctly
The corporate travel manager should now conduct a test search to confirm the rates are appearing correctly in the search results. They should verify the following:
  • The RAC matches what was agreed with the hotel

  • The signed contract terms are accurately reflected on your negotiated rate - including any discounts is reflected in the price, and contracted benefits such as included breakfast, Wi-Fi, or parking appear in either the included amenities or conditions

  • The negotiated rate is bookable

  • It's important to check that the rate displays consistently across all contracted properties, as loading errors sometimes affect only certain locations

If there are any discrepancies, the corporate travel manager will need to contact the hotel's revenue team to get them corrected.
The rate is now ready for employees to book.

Phase 3: Search and Book

Once rates are properly configured and validated, they become available to employees through your booking platform. This phase also typically includes ongoing monitoring by the corporate travel manager to track usage and ensure the rates are being booked by employees, delivering the expected savings.
Step 1: Make the rate available to employees
With validation complete, the corporate travel manager can now configure how the negotiated rate will be distributed. Decide whether to make it available to all employees or restrict access to specific departments, offices, or seniority levels based on your travel policy. Set any additional booking rules, such as advance purchase requirements or length-of-stay restrictions that align with your corporate travel guidelines. Once all distribution rules are configured, activate the rate for production use, making it immediately available in employee search results.
Step 2: Employee can book the negotiated rates
From this point forward, you can start supplying the negotiated rate on every Search request. The negotiated rates will automatically appear in search results for authorised employees. The booking experience remains familiar and straightforward – employees will see both the negotiated corporate rate and public rates side by side, making it easy to identify the savings. The negotiated rate is automatically applied when selected, with all contracted benefits and terms included. No special codes or complex booking procedures are required. This ensures high adoption rates and compliance with your corporate travel program.
Proceed to the next section for guidance on how to use the Negotiated Rates feature in the Duffel Stays API.

Integrating Negotiated Rates

This section will take you through how to load negotiated rates into Duffel, make them available for your travellers. We will do this with the Duffel Test Hotel so you can perform the integration without relying on a hotel to load negotiated rates.

Step 1: Create a Negotiated Rate

Once the corporate travel manager has had the confirmation by the hotel that the RAC has been loaded, they can then begin to configure access to them for employees via your online booking tool. The first step to do this is for them to Create a Negotiated Rate resource providing a minimum of the RAC and the ID of the accommodation the RAC has been loaded for.
Please note: only a rate_access_code of DUFF will work with the Duffel Test Hotel (acc_0000AWr2VsUNIF1Vl91xg0)

JSON

curl -X POST --compressed "https://api.duffel.com/stays/negotiated_rates" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Duffel-Version: v2" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
-d '{
"data": {
"display_name": "Stark Enterprises Corporate Rate 2025",
"rate_access_code": "DUFF",
"accommodation_ids": [
"acc_0000AWr2VsUNIF1Vl91xg0"
]
}
}'
Response:

JSON

{
"data": {
"id": "nre_00009htyDGjIfajdNBZRlw",
"live_mode": false,
"display_name": "Stark Enterprises Corporate Rate 2025",
"rate_access_code": "DUFF",
"accommodation_ids": ["acc_0000AWr2VsUNIF1Vl91xg0"]
}
}
The RAC is now ready to be used.

Step 2: Search with Negotiated Rates

Negotiated rates can be unique to a specific accommodation, span multiple accommodation in a single geographic area, or even thousands of accommodation across the globe. Duffel provides the management layer to ensure these are searched for as efficiently as possible.
You are responsible for ensuring distribution control to the individual traveller(s) or corporates that should have access to a given negotiated rate.
We advise that you enable the corporate travel manager the ability to perform test searches to validate the rates are coming back prior to distributing them to travellers to book.
Here are a few examples of things they will be looking to validate before making rates available to employees:
  • Rate appears in search results for all contracted accommodation

  • Discount percentage matches the contract

  • All promised amenities appear in rate conditions

  • Cancellation policies are correct

  • Rate is only accessible to authorised user groups

When searching for accommodation, include the negotiated_rate_ids to automatically get back any eligible negotiated rates on a Stays search:

Shell

curl -X POST --compressed "https://api.duffel.com/stays/search" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Duffel-Version: v2" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
-d '{
"data": {
"rooms": 1,
"negotiated_rate_ids": ["nre_00009htyDGjIfajdNBZRlw"]
"location": {
"radius": 2,
"geographic_coordinates": {
"latitude": -24.38,
"longitude": -128.32
}
},
"check_in_date": "2025-10-04",
"check_out_date": "2025-10-07",
"guests": [
{
"type": "adult"
}
]
}
}'
The search response will include supported_negotiated_rates on each search result. This shows which negotiated rates have been searched for.
NB: A supported negotiated rate does not guarantee that the negotiated rates are available.

JSON

{
"data": {
"results": [
{
"accommodation": {
"id": "acc_0000AWr2VsUNIF1Vl91xg0",
"name": "Duffel Test Hotel",
"supported_negotiated_rates": [
{
"id": "nre_00009htyDGjIfajdNBZRlw",
"display_name": "Stark Enterprises Corporate Rate 2025"
}
]
// ... other fields
}
}
]
}
}

Step 3: Fetch Rates and Identify Negotiated Rates

You can now proceed to fetch rates, and Duffel will return all available negotiated rates at the selected accommodation.

Shell

curl -X POST --compressed "https://api.duffel.com/stays/search_results/{id}/fetch_rates" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Duffel-Version: v2" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>"
Negotiated rates will be clearly marked so that you can present them as negotiated to your customers.
  • rate_code showing the Rate Code (e.g. "TEST")

  • negotiated_rate_id which corresponds to a Negotiated Rate created in step 1

  • The corresponding negotiated_rate_id will also be returned on the rate object when possible, at fetch rates, quote and booking

In addition, some rates may include additional rate conditions that explain the special terms and conditions that differ from public rates. These may be important to convey to your users so they are aware of the specific conditions.

JSON

{
"rates": [
{
"total_amount": "180.00",
"total_currency": "USD",
"rate_code": "TEST",
"negotiated_rate_id": "nre_00009htyDGjIfajdNBZRlw",
"conditions": [
{
"title": "Duffel Test Hotel Negotiated Rate Condition"
"description": "10%BAR, 12%COMM, Stark Enterprises employees enjoy an exclusive rate, including complimentary breakfast, Wi-Fi, and access to executive lounge."
},
{
"title": "Parking",
"description": "Public parking is available nearby for £15 per day"
}
],
// ... other rate details
}
]
}

Step 4: Update or Delete a Negotiated Rate

Over time, contracts may expire, be renegotiated, or expanded to additional accommodation providers.
We provide a few endpoints with which you can update or delete your Negotiated Rates.
Update
This endpoint can be used if:
  • the set of accommodation which your Negotiated Rate is loaded against changes, for example if another hotel is added to the contract

  • the negotiated rate display name needs to be updated

Example:

Shell

curl -X PATCH --compressed "https://api.duffel.com/stays/negotiated_rates/nre_00009htyDGjIfajdNBZRlw" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Duffel-Version: v2" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
-d '{
"data": {
"accommodation_ids": ["acc_0000AWr2VsUNIF1Vl91xg0", "acc_0000AWr2VsUNIF1Vl91xg1"],
"display_name": "Stark Enterprises Corporate Rate 2026"
}
}'
The response will be a Negotiated Rate object with the updated accommodation IDs and display name.
Delete
This endpoint can be used if the negotiated rate is no longer needed.

Shell

curl -X DELETE --compressed "https://api.duffel.com/stays/negotiated_rates/nre_00009htyDGjIfajdNBZRlw" \
-H "Accept-Encoding: gzip" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Duffel-Version: v2" \
-H "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
The response will be the deleted Negotiated Rate object.

Troubleshooting common issues

Loading rates can be error prone due to the manual nature of the process and the controlled distribution. Below are a few things to check:

Rate not appearing in searches

  • Confirm the accommodation IDs are correct

  • Ensure the user has appropriate access permissions

  • Check that the hotel has completed loading the rate in their systems

  • Allow up to 72 hours for rate propagation - after the hotel confirms loading, there can be a delay before the rate becomes visible

Incorrect pricing or benefits

  • Compare the rate details with the contract

  • Contact the hotel to verify their rate configuration

  • Check if there are date-specific restrictions you haven't configured.

  • Check for blackout periods or special conditions. For example, some negotiated rates exclude peak periods or require advance booking

Access control issues

  • Verify the customer user is associated with the correct group

  • Check that the negotiated rate is configured for the right distribution type

  • Ensure the rate hasn't expired