Checking Reservation Status
Once the reservation is confirmed using the /reservations/confirm endpoint, the carrier usually takes some time to process it. Most carriers will complete the process in a few seconds but this can take longer, so it is important to continuously check the reservation status using the /reservations/{reservation_id} endpoint until a response is received.
Reading Reservation Status
After sending a request to the /reservations/confirm endpoint the status of the reservation is set to processing. Then a new request must be sent to the /reservations/{reservation_id} endpoint to check the status of the reservation. In the response, the value state shows the current state of the reservation. Values can be:
created: The default value, appears right after the reservation is created.processing: Shown after /reservations/confirm is initially called.confirmed: Shown once the reservation is confirmed with the carrier.cancelled: Shown if /reservation/cancel is called (used in case the user aborts the reservation flow).failed: Shown if something goes wrong in the booking.
Processing Deadline
In the response from, the processing_deadline value will present the date and time deadline that the retailer should request /reservations/{reservation_id} to see if a booking was successfully created. Hence if you stop listening to it before that time frame, a discrepancy can happen.
The reservation status must be continually checked every 5-10 seconds until one of the following occurs:
- The reservation is
confirmedand you can proceed with the post-booking actions. - The reservation times out, in which case it will be automatically tagged as
failed. - The reservation is
failed, in which case the user must be notified that their booking was unsuccessful.
Best Practices
- Wait for for entire processing deadline: The max processing deadline supported by Distribusion is 10 mins and it is essential to continue listening (calling /reservations/{reservation_id}) until the deadline expires. If you stop listening before
processing_deadlineis completed and then the booking is created, there will be a discrepancy in status of the booking between you and the carrier. If this occurs, you will still be charged and incur the transaction costs. Note that in most cases the bookings are processed within 15 seconds, but it can happen that some will take longer. 10 minutes is our limit for timing out the requests. If you want to know the average processing times for selected carriers please speak to your Partnership Manager. - Collect booking ID: The
booking_idreturned from the /reservations/{reservation_id} endpoint endpoint after a successful booking can be used for all further post-booking interaction with the Distribusion API.
Enterprise Features
Nothing applies to this step. For more details, check our guide on Ancillaries and Discount Cards.
Next Step
If the reservation is successful, check the full details of the booking and retrieve the pdf and mobile tickets.
If the reservation fails, move the user back to the search results step to initiate the flow again.
API Examples
Sample Request to /reservations/{reservation_id}
https://api.demo.distribusion.com/retailers/v4/reservations/RW9TP2AS
Sample Response from /reservations/{reservation_id}
{
"data": {
"id": "RW9TP2AS",
"type": "reservations",
"attributes": {
"total_price": 9840,
"original_price": 9840,
"state": "confirmed",
"created_at": "2025-11-26T18:25",
"confirmed_at": "2025-11-26T18:25",
"cancelled_at": null,
"failed_at": null,
"processing_started_at": "2025-11-26T18:25",
"processing_deadline": null,
"expires_at": "2025-11-26T22:25",
"terms_version": null,
"title": null,
"first_name": null,
"last_name": null,
"email": "john.smith@email.com",
"phone": null,
"city": null,
"zip_code": null,
"country_code": null,
"street_and_number": null,
"gender": null,
"country_of_birth": null,
"government_id_type": null,
"marketing_carrier_reservation_ids": [
"CS2Q3Q_Doe_FAEZG3"
],
"agent_id": null,
"retailer_booking_number": null,
"customer_id": null
},
"relationships": {
"booking": {
"data": {
"id": "kETChTd2nCiksUoZaJ6ejA",
"type": "bookings"
}
},
"utm_params": {
"data": null
},
"errors": {
"data": []
},
"reservation_passengers": {
"data": [
{
"id": "R-PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "reservation_passengers"
},
{
"id": "R-PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "reservation_passengers"
}
]
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
},
"custom_fields": {
"data": []
}
}
},
"jsonapi": {
"version": "1.0"
},
"meta": {
"locale": "en",
"currency": "EUR"
},
"included": [
{
"id": "R-PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "reservation_passengers",
"attributes": {
"first_name": "John",
"last_name": "Doe",
"serial_code": null,
"government_id_type": null,
"nationality": null,
"gender": null,
"country_of_birth": null,
"birthdate": "1997-10-22",
"type": "PNOS"
}
},
{
"id": "R-PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "reservation_passengers",
"attributes": {
"first_name": "May",
"last_name": "Doe",
"serial_code": null,
"government_id_type": null,
"nationality": null,
"gender": null,
"country_of_birth": null,
"birthdate": "2020-05-22",
"type": "PCIL"
}
},
{
"id": "kETChTd2nCiksUoZaJ6ejA",
"type": "bookings",
"attributes": {
"departure_time": "2025-11-30T09:16",
"arrival_time": "2025-11-30T14:26",
"duration": 18600,
"title": "mr",
"first_name": "John",
"last_name": "Smith",
"email": "andre.franchini@distribusion.com",
"phone": null,
"city": null,
"zip_code": null,
"street_and_number": null,
"payment_method": "demand_note",
"payment_token": null,
"payer_id": null,
"tax_id": null,
"vat_number": null,
"business_name": null,
"total_price": 9840,
"original_price": 9840,
"marketing_carrier_booking_number": "CS2Q3Q_Doe_FAEZG3",
"pax": 2,
"flight_number": null,
"distribusion_booking_number": "M3PSFN",
"marketing_carrier_booking_numbers": [
"CS2Q3Q_Doe_FAEZG3"
],
"terms_accepted": true,
"send_customer_email": true,
"retailer_partner_number": "730011",
"connection_reference": null,
"created_at": "2025-11-26T18:25"
},
"relationships": {
"fare_class": {
"data": {
"id": "SNCF-FARE-5",
"type": "fare_classes"
}
},
"outbound_connection": {
"data": {
"id": "SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "connections"
}
},
"inbound_connection": {
"data": null
},
"amended_by": {
"data": null
},
"result_of_amendment": {
"data": null
},
"segments": {
"data": [
{
"id": "SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segments"
}
]
},
"passengers": {
"data": [
{
"id": "PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers"
},
{
"id": "PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers"
}
]
},
"fees": {
"data": []
},
"applied_cards": {
"data": []
}
}
},
{
"id": "SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segments",
"attributes": {
"departure_time": "2025-11-30T09:16",
"arrival_time": "2025-11-30T14:26",
"original_price": null,
"index": 0,
"vehicle_number": null,
"departure_platform": null,
"line": "17756",
"line_prefix": "TER"
},
"relationships": {
"departure_station": {
"data": {
"id": "FRLYSLYN",
"type": "stations"
}
},
"arrival_station": {
"data": {
"id": "FRPARPRG",
"type": "stations"
}
},
"operating_carrier": {
"data": {
"id": "SNCF",
"type": "operating_carriers"
}
},
"marketing_carrier": {
"data": {
"id": "SNCF",
"type": "marketing_carriers"
}
},
"vehicle": {
"data": {
"id": "TRAIN-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "vehicles"
}
},
"segment_passengers": {
"data": [
{
"id": "PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segment_passengers"
},
{
"id": "PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segment_passengers"
}
]
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segment_passengers",
"attributes": {
"seat_number": null,
"marketing_carrier_passenger_id": "000000060"
},
"relationships": {
"passenger": {
"data": {
"id": "PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers"
}
},
"ticket": {
"data": null
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segment_passengers",
"attributes": {
"seat_number": null,
"marketing_carrier_passenger_id": "000000061"
},
"relationships": {
"passenger": {
"data": {
"id": "PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers"
}
},
"ticket": {
"data": null
},
"applied_cards": {
"data": []
},
"ancillaries": {
"data": []
}
}
},
{
"id": "PNOS-1-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers",
"attributes": {
"first_name": "John",
"last_name": "Doe",
"serial_code": "AVVlUABKKcQACCRocJnAfrkBAJRBNJgrQZXGpSZLEdSSUFAowAgUGDG63CQEODoU+wtarmS5ytk0pNMABAFQOACJSekJwGiJ6KwTWAgkQAUAjQgJ4iwACEEACIAhdreEAQuYrgQACRVwCosLmAgAEBIAABDNAJoTS2NjK6ECowuTSzECc3uTawtgRfYsXDenUYgxhqjEABBAQBxVmFsYWJsZSBzdXIgVEVSIHVuaXF1ZW1lbnQKTm9uIMOpY2hhbmdlYWJsZS4gUmVtYm91cnNhYmxlCmp1c3F1J8OgIGxhIHZlaWxsZSBkdSBkw6lwYXJ0CmF1cHLDqHMgZHUgY2FuYWwgZCdhY2hhdC4AWmBWBChBdCkiWVvUDEu7anjiI0noKxY38gQm2np6fk2vntyOnCbE5Fb6pgMNMgA==",
"type": "PNOS"
}
},
{
"id": "PCIL-2-SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "passengers",
"attributes": {
"first_name": "May",
"last_name": "Doe",
"serial_code": "AVVlUABKKcQACCRocJnAfjkBAJRBNJgrQZXGpSZLEdSSUFAowAgUGDG63CQEODoU+wtarmS5ytk0pNMABAFQOABpqCsgaInorulYCCRABQCNCAnqLAAIQQAIgCF2t4QBC5iuBAAJFXAKiwuYCAAQEgAgEGaAmhNLY2MroQKjC5NLMQJze5NrC2BF9ixcN6dRiDGGqMQAEEBAHFWYWxhYmxlIHN1ciBURVIgdW5pcXVlbWVudApOb24gw6ljaGFuZ2VhYmxlLiBSZW1ib3Vyc2FibGUKanVzcXUnw6AgbGEgdmVpbGxlIGR1IGTDqXBhcnQKYXVwcsOocyBkdSBjYW5hbCBkJ2FjaGF0LgBcYFgEKH00W//vfwdvY2sjNj9zSCmH4fRgBCiaGpclVyxhM7Gu2CewKopGVj+3RAA==",
"type": "PCIL"
}
},
{
"id": "SNCF-FARE-5",
"type": "fare_classes",
"attributes": {
"code": "FARE-5",
"name": "Second Class - SemiFlexi",
"iata_category": "Economy Class",
"journey_type": "single"
},
"relationships": {
"post_booking_condition": {
"data": {
"id": "SNCF-PBC-ZPGM",
"type": "post_booking_conditions"
}
},
"fare_features": {
"data": [
{
"id": "SNCF-PREF",
"type": "fare_features"
}
]
},
"ticket_validity_rules": {
"data": [
{
"id": "SNCF-FARE-5-TICKET_VALIDITY_RULE-0",
"type": "ticket_validity_rules"
}
]
},
"passenger_group_rules": {
"data": []
}
}
},
{
"id": "SNCF-PREF",
"type": "fare_features",
"attributes": {
"code": "PREF",
"name": "Partially refundable",
"description": "Refund rules and times depend on the method of payment, the train company, the type of ticket and the method of collection."
}
},
{
"id": "SNCF-FARE-5-TICKET_VALIDITY_RULE-0",
"type": "ticket_validity_rules",
"attributes": {
"rule_type": "outbound",
"reference_time_type": "departure_time",
"use_type": "once",
"offset_type": "minutes",
"duration_type": "minutes",
"offset": 0,
"duration": 0
}
},
{
"id": "SNCF-PBC-ZPGM",
"type": "post_booking_conditions",
"relationships": {
"rules": {
"data": [
{
"id": "SNCF-PBC-ZPGM-PBR-HCAA",
"type": "post_booking_rules"
},
{
"id": "SNCF-PBC-ZPGM-PBR-LYZL",
"type": "post_booking_rules"
},
{
"id": "SNCF-PBC-ZPGM-PBR-MMZY",
"type": "post_booking_rules"
},
{
"id": "SNCF-PBC-ZPGM-PBR-OIZO",
"type": "post_booking_rules"
},
{
"id": "SNCF-PBC-ZPGM-PBR-ZZSA",
"type": "post_booking_rules"
}
]
}
}
},
{
"id": "SNCF-PBC-ZPGM-PBR-HCAA",
"type": "post_booking_rules",
"attributes": {
"rule_type_identifier": "general_cancellation",
"allowed": true,
"description": "Fully refundable up to D-7 without fee. Cancellation is allowed before 30 minutes of departure, with applicable fees. Non-refundable within 30 minutes of departure.",
"cutoff_context": "before_departure",
"cutoff_in_minutes": 8640,
"fee_context": "per_booking",
"fee_type": "fixed",
"fee_currency_code": "EUR",
"fee_in_percent": null,
"fee_in_cents": 1900
}
},
{
"id": "SNCF-PBC-ZPGM-PBR-LYZL",
"type": "post_booking_rules",
"attributes": {
"rule_type_identifier": "fare_class_amendment",
"allowed": true,
"description": "Can be exchanged with fare adjustment without fee up to D-7. Fees apply from D-6 to departure: €19 charge on TGV and 40% of the price (max €15) on Intercités. From 30 minutes before departure, ticket may be exchanged once",
"cutoff_context": "before_departure",
"cutoff_in_minutes": 8640,
"fee_context": "per_booking",
"fee_type": "fixed",
"fee_currency_code": "EUR",
"fee_in_percent": null,
"fee_in_cents": 1900
}
},
{
"id": "SNCF-PBC-ZPGM-PBR-MMZY",
"type": "post_booking_rules",
"attributes": {
"rule_type_identifier": "origin_destination_amendment",
"allowed": true,
"description": "Can be exchanged with fare adjustment without fee up to D-7. Fees apply from D-6 to departure: €19 charge on TGV and 40% of the price (max €15) on Intercités. From 30 minutes before departure, ticket may be exchanged once",
"cutoff_context": "before_departure",
"cutoff_in_minutes": 8640,
"fee_context": "per_booking",
"fee_type": "fixed",
"fee_currency_code": "EUR",
"fee_in_percent": null,
"fee_in_cents": 1900
}
},
{
"id": "SNCF-PBC-ZPGM-PBR-OIZO",
"type": "post_booking_rules",
"attributes": {
"rule_type_identifier": "date_time_amendment",
"allowed": true,
"description": "Can be exchanged with fare adjustment without fee up to D-7. Fees apply from D-6 to departure: €19 charge on TGV and 40% of the price (max €15) on Intercités. From 30 minutes before departure, ticket may be exchanged once",
"cutoff_context": "before_departure",
"cutoff_in_minutes": 8640,
"fee_context": "per_booking",
"fee_type": "fixed",
"fee_currency_code": "EUR",
"fee_in_percent": null,
"fee_in_cents": 1900
}
},
{
"id": "SNCF-PBC-ZPGM-PBR-ZZSA",
"type": "post_booking_rules",
"attributes": {
"rule_type_identifier": "general_amendment",
"allowed": false,
"description": "Can be exchanged with fare adjustment without fee up to D-7. Fees apply from D-6 to departure: €19 charge on TGV and 40% of the price (max €15) on Intercités. From 30 minutes before departure, ticket may be exchanged once",
"cutoff_context": "before_departure",
"cutoff_in_minutes": 10080,
"fee_context": "per_booking",
"fee_type": "percentage",
"fee_currency_code": "EUR",
"fee_in_percent": "0.0",
"fee_in_cents": null
}
},
{
"id": "SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26",
"type": "connections",
"attributes": {
"departure_time": "2025-11-30T09:16",
"arrival_time": "2025-11-30T14:26"
},
"relationships": {
"departure_station": {
"data": {
"id": "FRLYSLYN",
"type": "stations"
}
},
"arrival_station": {
"data": {
"id": "FRPARPRG",
"type": "stations"
}
},
"marketing_carrier": {
"data": {
"id": "SNCF",
"type": "marketing_carriers"
}
},
"segments": {
"data": [
{
"id": "SNCF-FRLYSLYN-FRPARPRG-2025-11-30T09:16-2025-11-30T14:26-0",
"type": "segments"
}
]
},
"fees": {
"data": []
}
}
}
]
}
On this page
- Checking Reservation Status