Partial Cancellations
Note: This section offers an early preview of a new capability launching with selected partners. Content will be updated as the feature is finalised. Please reach out to your Partnerships Manager any time to align on the latest specifications.
This page describes how a retailer uses the Distribusion Retailer API (rAPI) to cancel part of a booking ā either specific passengers, or an entire bound (outbound or inbound) on a return trip.
General principle. Partial cancellations reuse the same endpoints as a full cancellation. To cancel just part of a booking you pass one of two scoping parameters: connection_id to cancel a whole bound, or passenger_ids[] to cancel specific passengers. With neither, the request is treated as a full cancellation. The two-step shape is the same as today: GET /cancellations/conditions (preview the fee & refund) followed by POST /cancellations/create (commit).
When to use partial cancellations. Whenever the customer wants to cancel some of the passengers, or one direction of a return trip, while keeping the rest of the booking active. For a full cancellation, use the standard flow with no extra parameters.
Affected endpoints
Endpoint | Purpose | New parameters / fields |
| Preview the fee and refund for the planned cancellation |
|
| Execute the cancellation |
|
| Inspect the booking after cancellation |
|
Parameters
Both GET /cancellations/conditions and POST /cancellations/create accept the following optional parameters. If neither is provided, the request is treated as a full cancellation.
Parameter | Type | Description |
| string | Targets a single bound (outbound or inbound) of a return booking. All passengers on that bound are cancelled. |
| array of strings | Targets one or more specific passengers. |
Where do these IDs come from?
Both IDs are returned by GET /bookings and GET /reservations.
Connection IDs are under data.relationships.outbound_connection and data.relationships.inbound_connection:
{
"outbound_connection": {
"data": {
"id": "ZBUS-ZZSTN001-ZZSTN002-2025-10-02T13:35-2025-10-02T13:45"
}
},
"inbound_connection": {
"data": {
"id": "ZBUS-ZZSTN002-ZZSTN001-2025-10-07T06:50-2025-10-07T06:55"
}
}
}
Passenger IDs are in the included array, on objects with type: "passengers":
{
"id": "ZCAR-ZZSTN003-ZZSTN004-2025-11-10T07:15-2025-11-10T08:50-0-PNOS-TESSWANN-ANA-2",
"type": "passengers",
"attributes": {
"first_name": "Ana",
"last_name": "Tesswann",
"type": "PNOS"
}
}
All examples below use the demo environment (api.demo.distribusion.com). Authentication via the Api-Key header is required on every request ā omitted from the snippets for brevity. Carrier and station codes (ZBUS, ZCAR, ZZSTN001ā¦) are placeholders.
Cancellation per bound (return bookings)
Use connection_id to cancel all passengers on a single direction of a return trip. The other bound remains active.
Step 1 ā Check conditions
https://api.demo.distribusion.com/retailers/v4/cancellations/conditions?booking=EsEOGnFVTdwytNacNljztg
&reason=customer_request
&connection_id=ZBUS-ZZSTN001-ZZSTN002-2025-10-02T13:35-2025-10-02T13:45
Use the returned fee and refund to confirm the financial impact with the customer before proceeding.
Step 2 ā Create cancellations
https://api.demo.distribusion.com/retailers/v4/cancellations/create
{
"booking": "EsEOGnFVTdwytNacNljztg",
"reason": "customer_request",
"connection_id": "ZBUS-ZZSTN001-ZZSTN002-2025-10-02T13:35-2025-10-02T13:45"
}
Response
{
"data": {
"id": "EsEOGnFVTdwytNacNljztg",
"type": "cancellations",
"attributes": {
"state": "confirmed",
"fully_cancelled": false,
"created_as_partial": true,
"total_price": 1168,
"total_refund": 584,
"latest_refund": 584,
"latest_monetary_refund": 584
}
}
}
fully_cancelled: false means the inbound is still active. To cancel the inbound as well, repeat the call with the inbound connection_id ā when the last active element is cancelled, fully_cancelled will flip to true.
Cancellation per passenger
Use passenger_ids[] to cancel one or more specific passengers. The remaining passengers stay on the booking.
Cancel a single passenger
https://api.demo.distribusion.com/retailers/v4/cancellations/conditions?booking=ABC123
&reason=customer_request
&passenger_ids[]=NFCI-BRXGRNBU-BRPERRDP-2025-11-26T07:15-2025-11-26T08:50-0-PNOS-TESSWANN-ANA-2
https://api.demo.distribusion.com/retailers/v4/cancellations/create
{
"booking": "ABC123",
"reason": "customer_request",
"passenger_ids": [
"ZCAR-ZZSTN003-ZZSTN004-2025-11-26T07:15-2025-11-26T08:50-0-PNOS-TESSWANN-ANA-2"
]
}
Cancel multiple passengers
https://api.demo.distribusion.com/retailers/v4/cancellations/create
{
"booking": "ABC123",
"reason": "customer_request",
"passenger_ids": [
"ZCAR-ZZSTN003-ZZSTN004-2025-11-26T07:15-2025-11-26T08:50-0-PNOS-DOE-JOHN-1",
"ZCAR-ZZSTN003-ZZSTN004-2025-11-26T07:15-2025-11-26T08:50-0-PNOS-PIRES-LEO-3"
]
}
Response fields
Both full and partial cancellations now return the following attributes on POST /cancellations/create:
Field | Type | Description |
| boolean |
|
| boolean |
|
Booking state after cancellation
After a partial cancellation, GET /bookings and GET /reservations still return the full booking structure. Cancelled elements are flagged with status: "cancelled" on the corresponding segment_passengers object:
{
"id": "ZCAR-ZZSTN003-ZZSTN004-2025-11-26T07:15-2025-11-26T08:50-0-PNOS-DISTRIBUSION-TESTMANN-LEO-1-0",
"type": "segment_passengers",
"attributes": {
"seat_number": "29",
"status": "canceled"
}
}
Use this attribute to render the correct state on your Manage Booking surfaces.
On this page
- Partial Cancellations