List Bookings
The list endpoint returns bookings that match either a date range (BOOKING_LIST_CRITERIA_TYPE_DATES) or one or more references (BOOKING_LIST_CRITERIA_TYPE_REFERENCES). There is no page cursor in the response: if a range can return many rows, use narrower windows (for example week-by-week) when exporting.
Endpoint
POST /connect/hotels/v1/bookinglist
Request
Request body parameters
| Parameter | Type | Description |
|---|---|---|
criteria | object | Filter criteria (see below) |
settings.connectionCodes | array | Provider connection codes (required) |
Criteria modes
criteria.typeSearch | When to use | Required fields |
|---|---|---|
BOOKING_LIST_CRITERIA_TYPE_DATES | Reconciliation, reporting by stay or booking date | criteria.dates |
BOOKING_LIST_CRITERIA_TYPE_REFERENCES | Lookup by Bundleport id, your clientReference, or supplier refs | criteria.references (array) |
Date range (TYPE_DATES)
dates.dateType is one of:
BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL— filter by check-in / arrival windowBOOKING_LIST_CRITERIA_DATE_TYPE_BOOKING— filter by when the booking was created
References (TYPE_REFERENCES)
Each element of criteria.references can include any of:
bookingID— Bundleport booking idclientReference— the value you sent on book (ideal after a timeout; see Create a booking)providerReference/confirmationReference— when you store supplier refs
Example: date range (by arrival)
{
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_DATES",
"dates": {
"dateType": "BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL",
"start": "2025-06-01T00:00:00Z",
"end": "2025-06-30T00:00:00Z"
}
},
"settings": {
"connectionCodes": ["testb-hbds-1876"]
}
}
Example: by booking id
{
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_REFERENCES",
"references": [
{ "bookingID": "BK-987654321" }
]
},
"settings": {
"connectionCodes": ["testb-hbds-1876"]
}
}
Example: by client reference
{
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_REFERENCES",
"references": [
{ "clientReference": "BOOKING-2025-001" }
]
},
"settings": {
"connectionCodes": ["testb-hbds-1876"]
}
}
Response
Success response
The API returns a bookings array (and optional errors / warnings). Shape below is illustrative; see the API reference for the full booking summary fields.
{
"bookings": [
{
"bookingID": "BK-987654321",
"status": "CONFIRMED",
"reference": {
"bookingID": "BK-987654321",
"clientReference": "BOOKING-2025-001"
},
"hotel": {
"code": "12345",
"name": "Example Hotel Barcelona"
},
"stay": {
"checkIn": "2025-06-15",
"checkOut": "2025-06-17"
},
"price": {
"currency": "EUR",
"net": 150.00
},
"createdAt": "2025-06-01T10:30:00Z"
}
]
}
Use Cases
List is your operational workhorse: finance reconciliation, support lookups, and exports should go through dates or references criteria—not through ad-hoc caches of search results.
1. Reconciliation
const bookings = await listBookings({
criteria: {
typeSearch: 'BOOKING_LIST_CRITERIA_TYPE_DATES',
dates: {
dateType: 'BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL',
start: '2025-06-01T00:00:00Z',
end: '2025-06-30T00:00:00Z',
},
},
settings: {
connectionCodes: ['testb-hbds-1876'],
},
});
bookings.bookings.forEach(booking => {
reconcileBooking(booking);
});
2. Customer Service
// Find booking by Bundleport booking id (or use clientReference in references[0] instead)
const bookings = await listBookings({
criteria: {
typeSearch: 'BOOKING_LIST_CRITERIA_TYPE_REFERENCES',
references: [{ bookingID: customerProvidedBookingId }],
},
settings: {
connectionCodes: ['testb-hbds-1876'],
},
});
if (bookings.bookings.length > 0) {
const booking = bookings.bookings[0];
// Display booking details to customer service agent
displayBookingDetails(booking);
}
3. Reporting
There is no page field: chunk the date range (for example one month per request) if responses grow large.
const allBookings = [];
for (const { start, end } of monthlyChunks(overallStart, overallEnd)) {
const result = await listBookings({
criteria: {
typeSearch: 'BOOKING_LIST_CRITERIA_TYPE_DATES',
dates: {
dateType: 'BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL',
start,
end,
},
},
settings: {
connectionCodes: ['testb-hbds-1876'],
},
});
allBookings.push(...result.bookings);
}
generateReport(allBookings);
Code Examples
The cURL sample uses arrival date range. For a single booking or your own clientReference, switch to BOOKING_LIST_CRITERIA_TYPE_REFERENCES and a references array as in the examples above.
- cURL
- JavaScript
- Python
- Java
- C#
curl -X POST https://api.bundleport.com/connect/hotels/v1/bookinglist \
-H "Authorization: ApiKey YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_DATES",
"dates": {
"dateType": "BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL",
"start": "2025-06-01T00:00:00Z",
"end": "2025-06-30T00:00:00Z"
}
},
"settings": {
"connectionCodes": ["testb-hbds-1876"]
}
}'
async function listBookings(criteria = {}) {
const response = await fetch(
'https://api.bundleport.com/connect/hotels/v1/bookinglist',
{
method: 'POST',
headers: {
'Authorization': 'ApiKey YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
criteria: {
typeSearch: 'BOOKING_LIST_CRITERIA_TYPE_DATES',
dates: {
dateType: 'BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL',
start: criteria.startDate || '2025-06-01T00:00:00Z',
end: criteria.endDate || '2025-06-30T00:00:00Z',
},
},
settings: {
connectionCodes: ['testb-hbds-1876'],
},
}),
}
);
return await response.json();
}
import requests
def list_bookings(criteria=None):
url = "https://api.bundleport.com/connect/hotels/v1/bookinglist"
headers = {
"Authorization": "ApiKey YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_DATES",
"dates": {
"dateType": "BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL",
"start": criteria.get("startDate") if criteria else "2025-06-01T00:00:00Z",
"end": criteria.get("endDate") if criteria else "2025-06-30T00:00:00Z",
}
},
"settings": {
"connectionCodes": ["testb-hbds-1876"]
}
}
response = requests.post(url, json=payload, headers=headers)
return response.json()
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
var body = """
{
"criteria": {
"typeSearch": "BOOKING_LIST_CRITERIA_TYPE_DATES",
"dates": {
"dateType": "BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL",
"start": "2025-06-01T00:00:00Z",
"end": "2025-06-30T00:00:00Z"
}
},
"settings": { "connectionCodes": ["testb-hbds-1876"] }
}
""";
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.bundleport.com/connect/hotels/v1/bookinglist"))
.header("Authorization", "ApiKey YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
var client = HttpClient.newHttpClient();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var payload = new
{
criteria = new
{
typeSearch = "BOOKING_LIST_CRITERIA_TYPE_DATES",
dates = new
{
dateType = "BOOKING_LIST_CRITERIA_DATE_TYPE_ARRIVAL",
start = "2025-06-01T00:00:00Z",
end = "2025-06-30T00:00:00Z"
}
},
settings = new { connectionCodes = new[] { "testb-hbds-1876" } }
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("ApiKey", "YOUR_API_KEY");
var content = new StringContent(
JsonSerializer.Serialize(payload),
Encoding.UTF8,
"application/json");
var response = await client.PostAsync(
"https://api.bundleport.com/connect/hotels/v1/bookinglist",
content);
Console.WriteLine(await response.Content.ReadAsStringAsync());
Next Steps
- Retrieve Booking - Get detailed booking information
- Cancel Booking - Cancel a reservation
- Webhooks - Receive real-time booking updates