# Run order reports

**Use the /orders/details endpoint to retrieve detailed information for existing orders across all travel services — including accommodations, cars, flights, attractions and taxis. It provides a single consolidated data source for financial reporting and reconciliation, without needing to query multiple endpoints.**

## /orders/details/

The orders/details endpoint enables:

* Financial reconciliation and reporting.
* Attribution tracking and analysis.
* Operational monitoring and system synchronisation from a single data source, without needing to combine responses from multiple service-specific endpoints.


It returns consolidated order data across travel services, including:

* Pricing and totals.
* Payment details and transaction status.
* Commissions and attribution data.
* Loyalty rewards (where applicable)
* Service-specific booking details.


Use this endpoint when you need consistent, cross-service reporting data in a single response.

### Use cases

You can use this endpoint to:

| 
| ✓ | Generate consolidated reports across all booked travel services in a single request. |
| ✓ | Run financial reconciliation using pricing, payment, and commission data. |
| ✓ | Synchronise order changes directly with your internal systems. |
| ✓ | Validate booking and payment details per order or reservation. |
| ✓ | Track order attribution to analyse specific touchpoints and measure conversion performance. |


You can retrieve orders by providing order IDs, reservation IDs, or supported date range filters, and receive a unified response structure across services.

## How it works

Call the [orders/details endpoint](/demand/docs/open-api/3.2/demand-api/orders/orders/details) using **one of the supported filter types.**

You must provide **only one filter type per request**.
Combining filters (for example, `created` + `orders`) is not supported.

### Supported filters

| Filter type | Description |
|  --- | --- |
| Identifiers - If you wish to check a specific list of orders. | * `orders` (max 100)
* `reservations` (max 100)

 |
| Date range - Use it for reporting or reconciliation. | * `created` (max 7 days)
* `updated` (max 7 days)
* `start` (checkin, pickup)
* `end` (checkout, dropoff)

 |
| Pagination | * Retrieve the next page of results:
* `page` — use the token from `metadata.next_page`.

 |


Date range constraints
* Orders can only be returned if created or updated **within 1 year** of the request date.
* Maximum allowed range for any date filter is **7 days**.
* Updates may take **up to 2 hours** to appear in the response.
* See the Data conventions guide for correct date/time formats.


### Required fields

* All requests require:
  * `currency` — three-letter ISO 4217 code (e.g. EUR, USD)
* Exception - `page` requests do not require `currency`.


### Optional fields

You can also include:

* `extras` — Request additional information (Currently supports `payment`)
* `services` — Limit results to selected travel services.
* `maximum_results` — Limit the number of results returned.
* `sort.by` and `sort.direction` — Sort results by creation or update date and specify the direction (ascending/descending).


Services filter is exclusive
The `services` field is exclusive — include **all travel services** you want returned. Example: `services: ["cars", "accommodations"]`

### Examples

#### Retrieve order details by reservation IDs

> **Scenario:** *Retrieve details for specific reservations to verify payment and commission.*



```json
{
  "currency": "EUR",
  "reservations": [
    "2321873123",
    "4666773123"
  ],
  "sort": {
    "by": "updated",
    "direction": "descending"
  },
  "extras": [
    "payment"
  ]
}
```

#### Retrieve all orders created within a date range

> **Scenario:**  *Get all new orders for cars and accommodations created between 1 and 7 December 2025 to sync with an internal Customer Relationship Management tool (CRM).*



```json
{
    "created": {
      "from": "2025-12-01T02:00:00+00:00",
      "to": "2025-12-07T02:00:00+00:00"
    },
    "currency": "EUR",
    "maximum_results": 20,
    "sort": {
      "by": "updated",
      "direction": "descending"
    },
    "services": ["cars", "accommodations"],
    "extras": [
      "payment"
    ]
  }
```

### Syncing order data

To build incremental sync logic for regularly updating systems:

* Use `created.from` and `created.to` retrieve newly created orders.
* Use the `updated` filter with small rolling windows (e.g. every 30–60 minutes) to keep your system in sync with Booking.com changes.


See the [Order details - use cases](/demand/docs/orders-api/order-details-examples) for more examples.

## Response structure overview

The API returns matching orders in a standardised response format.
Each order object includes:

|  Field | Description |
|  --- | --- |
| `id` | Order identifier |
| `affiliate` | Affiliate ID |
| `booker` | * Containing Personally Identifiable Information (PII) (returned only if authorised)

 | `address`, `email`, `name` and `telephone`, `language`, `platform` and `travel_purpose`. |
| `created`/ `updated` | Date when the order was created and last updated. |
| `commission` | Commission details (actual and estimated). |
| `currencies` | * `booker` - Currency shown to the booker.

 | `product` - Currency in which the product is priced. |
| `label` (v3.2) | Custom partner string for tracking and attribution. |
| `loyalty_reward` | Displays loyalty rewards details (if applicable), such as amount, eligibility, and fulfilment date. |
| `payment` | Payment details (only when `extras=["payment"]`). |
| `price` | Total and commissionable amounts. See [Pricing guide](/demand/docs/accommodations/prices-accommodations) |
| `status` | Aggregated order status (booked, cancelled, no-show, etc) |
| `start` / `end` | Aggregated service dates. |
| Travel service blocks | Service-specific booking data [see below](/demand/docs/orders-api/order-details#travel-service-specific-details). |
| `metadata.next_page` | Token used to retrieve the next page via the `page` filter. |


### Payment details

The payment object is returned only when requested via `extras=["payment"]`.

It includes:

* `method` → airplus, card, wallet.
* `timing` → `pay_at_the_property`, `pay_online_later`, `pay_online_now` for accommodation.
* `paid` → completed transactions.
* `pending`→ upcoming or scheduled transactions.


Accommodation payments may also include:

* `authorisation_form`
* `receipt_url`


(See the [Payments section](/demand/docs/payments/overview for details)

## Travel service details

Each order may include multiple services if booked together. Each service block (accommodations, cars, flights, attractions, taxis) is returned as:

* An object if present.
* `null` if the service has not been booked as part of the order.


### Supported travel services

| Travel service | v3.1 | v3.2 |
|  --- | --- | --- |
| `accommodations` | ✓ | ✓ |
| `cars` | ✓ | ✓ |
| `flights` | ✓ | ✓ |
| `attractions` | ✗ | ✓ |
| `taxis` | ✗ | ✓ |


### Key travel service fields

A `reservation` ID identifies each travel service that is part of the order.

* Each order may have different reservation IDs if multiple services are booked (for example, accommodation and car rental).
* This field is required for cancellations or customer service enquiries.


| v3.2 Parameter | Description |
|  --- | --- |
| `accommodations` | Accommodation-specific details:* `reservation` → reservation ID
* `name`, `location` (address, city, country)
* `number_of_guests`
* `inventory` (third_party, type) → net or sell rates
* `stay_probability` → optional likelihood score (0 = high cancellation risk, 1 = high stay probability)

 |
| `cars` | Car rental-specific details:* `reservation` → reservation ID
* `pickup_location`, `dropoff_location` (address, city, country)
* `payment.timing` → indicates whether payment is online or at pickup.

 |
| `attractions` | Attraction-specific details:* `reservation` → reservation ID
* `name`, `location` (city, country)

 |
| `flights` | Flight-specific details:* `reservation` → reservation ID
* `itineraries` → departure and arrival (airport, date_time)

 |
| `taxis`
 | Taxi orders may include multiple legs:
* Each leg has a different `reservation` ID.
* Order-level fields (price, status) are aggregated.
* Inspect each leg for accurate tracking, status, start, end, and pricing.

⚠️ For accurate tracking, always inspect individual taxi legs.
 |


### Minimal response example


```json
{
  "request_id": "req_123",
  "data": [
    {
      "id": "880045112233",
      "affiliate": 111111,
      "status": "booked",
      "start": "2026-03-10T08:00:00Z",
      "end": "2026-03-12T10:00:00Z",
      "currencies": {
        "booker": "EUR",
        "product": "EUR"
      },
      "price": {
        "total_price": {
          "booker_currency": 420,
          "product_currency": 420
        }
      },
      "accommodations": {
          "reservation": "ABC123"
        }
    }
  ],
  "metadata": {
    "next_page": null,
    "total_results": 1
  }
}
```

### Example – Attraction reservation details (v3.2)


```json
{
  "order_id": "509430129718801",
  "attractions": {
    "reservation": 567890123,
    "name": "Eiffel Tower Guided Tour",
    "location": {"city": "Paris", "country": "fr"}
  },
  "affiliate": 111111,
  "booker": {
    "address": {"city": "Amsterdam", "country": "nl"},
    "email": "janedoe@booking.com",
    "name": {"first_name": "Jane", "last_name": "Doe"},
    "platform": "desktop",
    "telephone": "+100000001",
    "language": "en-gb",
    "travel_purpose": "leisure"
  },
  "commission": {"actual_commission_amount": {"booker_currency": 5.0, "product_currency": 6.0}},
  "currencies": {"booker": "EUR", "product": "EUR"},
  "price": {"commissionable_price": {"booker_currency": 50, "product_currency": 60}, "total_price": {"booker_currency": 55, "product_currency": 66}},
  "status": "booked",
  "start": "2026-07-10T09:00:00+00:00",
  "end": "2026-07-10T12:00:00+00:00",
  "created": "2025-11-28T02:00:00+00:00",
  "updated": "2025-11-28T02:00:00+00:00"
}
```

### Example – Taxi reservation details (v3.2)

> **Scenario:** Retrieve taxi order details including multiple legs.



```json
{
  "request_id": "03fr9fz702lmnop12w34x5y6z",
  "data": [
    {
      "id": "709430129718801",
      "affiliate": 333333,
      "taxis": [
        {
          "reservation": "TX987654321",
          "pickup_location": { "city": "Paris", "country": "fr" },
          "dropoff_location": { "city": "Lyon", "country": "fr" },
          "start": "2026-07-10T09:00:00+00:00",
          "end": "2026-07-10T14:00:00+00:00"
        },
        {
          "reservation": "TX987654322",
          "pickup_location": { "city": "Lyon", "country": "fr" },
          "dropoff_location": { "city": "Marseille", "country": "fr" },
          "start": "2026-07-12T10:00:00+00:00",
          "end": "2026-07-12T15:00:00+00:00"
        }
      ],
      "booker": {
        "name": { "first_name": "Bob", "last_name": "Brown" },
        "email": "bob.brown@example.com",
        "telephone": "+33123456789",
        "language": "fr",
        "platform": "mobile",
        "travel_purpose": "leisure",
        "address": { "city": "Paris", "country": "fr" }
      },
      "commission": {...},
      "currencies": { "booker": "EUR", "product": "EUR" },
      "price": {
        "commissionable_price": { "booker_currency": 375, "product_currency": 400 },
        "total_price": { "booker_currency": 400, "product_currency": 425 }
      },
      "start": "2026-07-10T09:00:00+00:00",
      "end": "2026-07-12T15:00:00+00:00",
      "status": "booked",
      "created": "2026-02-01T08:00:00+00:00",
      "updated": "2026-02-02T10:00:00+00:00"
    }
  ],
  "metadata": {...}
}
```

See all travel services examples in [Orders details - Use cases guide](/demand/docs/orders-api/order-details-examples).

## Error handling

While the /orders/details endpoint follows [general API error conventions](/demand/docs/support/error-handling/about-errors), there are several endpoint-specific conditions to be aware of:

| Scenario | Cause | Suggested resolution |
|  --- | --- | --- |
| **Empty 200 OK response** | No orders match the request filters. | Check that the date range, service types, and other filters correspond to existing data. |
| **400 – Invalid date filters** | Illogical or malformed dates (e.g., `start_date` > `end_date`) | Ensure dates are in ISO 8601 format and logically ordered. |
| **400 – Incompatible service types** | Mixed or unsupported service types in a single request. | Limit to supported service type combinations or query them separately. |
| **403 – Restricted PII data** | Expecting guest data without proper authorisation. | Confirm PII access has been granted and the proper scopes are used. |
| **404 – Order not found** | Order ID doesn’t exist or isn’t accessible to the account. | Make sure the order belongs to your account. |
| **Performance degradation** | Large unpaged queries with wide date ranges. | Use pagination and segment queries into smaller date intervals. |


## Post-booking - Specific travel service details

Use each orders/details/*service endpoint for granulard details on a specific travel service so you can perform post-booking tasks such as:

* Managing [cancellations](/demand/docs/orders-api/cancel-order) or [modifications](/demand/docs/open-api/demand-api/orders/orders/modify).
* Reporting commissions to affiliates.
* Allocating loyalty points or rewards.


### Travel service details guides

Curious to know more?
* See the [Orders details use cases](/demand/docs/orders-api/order-details-examples) for advanced scenarios.
* Learn how to track attribution with the [Labels and attribution guide](/demand/docs/orders-api/labels-attributions).
* See the [Pagination guide](/demand/docs/development-guide/pagination) for best practices handling large results sets.