|
| 1 | +--- |
| 2 | +title: Concur Travel Booking Events |
| 3 | +layout: reference |
| 4 | +--- |
| 5 | + |
| 6 | +## <a name="overview"></a>Overview |
| 7 | + |
| 8 | + |
| 9 | +This page will host the documentation for the travel booking information related events that are publicly available on the `public.concur.travel.book` topic in the Event Subscription Service (ESS). |
| 10 | +Subscribers to this topic will receive events when travel bookings are performed within SAP Concur. |
| 11 | + |
| 12 | +To subscribe to these events follow the steps described on the [Event Subscription Service v4](/api-reference/ess/v4.event-subscription.html) page. |
| 13 | + |
| 14 | +## <a name="limitations"></a>Limitations |
| 15 | +Access to this documentation does not provide access to the subscription. |
| 16 | + |
| 17 | +## <a name="scope-usage"></a>Scope Usage |
| 18 | + |
| 19 | +Scopes required to interact with this topic: |
| 20 | + |
| 21 | +Name | Description |
| 22 | +----------------------------|------------ |
| 23 | +`events.topic.read` | Read events. |
| 24 | +`travel.trips.booking.read` | Read booking data. |
| 25 | + |
| 26 | +## <a name="events"></a>Events |
| 27 | + |
| 28 | +The topic `public.concur.travel.book` contains events for air and hotel bookings at the moment they are completed. |
| 29 | + |
| 30 | +## <a name="schema"></a>Schema |
| 31 | + |
| 32 | +### <a name="schema-booking-event"></a>Schema for Booking Event |
| 33 | + |
| 34 | +Name |Type |Format |Description |
| 35 | +---------------|--------|----------------------------------------------|----------- |
| 36 | +`id` |`string`|`GUID` |Uniquely identifies the published event. |
| 37 | +`correlationId`|`string`|`GUID` |Uniquely identifies the booking request to aid in workflow tracing and troubleshooting. |
| 38 | +`eventType` |`string`|- |Identifies the booking event type. Supported values: `travelBookingCompleted`. |
| 39 | +`topic` |`string`|- |Topic for subscription. Supported values: `public.concur.travel.book`. |
| 40 | +`timeStamp` |`string`|`YYYY-MM-DDTHH:MM:SS.fZ` |Booking event time in UTC. |
| 41 | +`facts` |`object`|[Booking Facts](#schema-booking-facts) |Facts for the booking event. |
| 42 | +`route` |`string`|- |Routes traffic through the service call tree. Supported values: `stable`. |
| 43 | + |
| 44 | +### <a name="schema-booking-facts"></a>Schema for Booking Facts |
| 45 | + |
| 46 | +Name |Type |Format |Description |
| 47 | +-------------------|---------|------------------------------------------------|----------- |
| 48 | +`companyId` |`string` |`GUID` |Uniquely identifies the company of the traveler. |
| 49 | +`userId` |`string` |`GUID` |Uniquely identifies the user performing the booking. Note: If the travel is booked by a delegate, this will be the traveler's ID. In cases where a profiled user is booking on behalf of a nonprofiled guest, this will be the user performing the booking. |
| 50 | +`delegateUserId` |`string` |`GUID` |Uniquely identifies the delegate user performing this action, if applicable. |
| 51 | +`type` |`string` |- |Type of the event. Supported values: `concur.travel.trip.Booking.Completed.v1`. |
| 52 | +`version` |`string` |- |Semantic version of the event schema. Example: `1.2.0`. |
| 53 | +`trip` |`object` |[TripDetails](#schema-trip-details) |Details about the trip the booking belongs to. |
| 54 | +`bookings` |`array` |[BookingDetails](#schema-booking-details) |List of bookings added to the trip. |
| 55 | + |
| 56 | +### <a name="schema-booking-details"></a>Schema for Booking Details |
| 57 | + |
| 58 | +Name | Type | Format | Description |
| 59 | +----------|----------|--------------------------------------------------------------------------------------------------------|------------ |
| 60 | +`id` | `string` | `GUID` | Uniquely identifies the air booking. |
| 61 | +`type` | `string` | - | Type of the booking. Supported values: `Air`, `Hotel`. |
| 62 | +`details` | `object` | [AirBookingDetails](#schema-air-booking-details), [HotelBookingDetails](#schema-hotel-booking-details) | Details about the booking. The object's type depends on the value of the `type` field. For example, if `type` is `Air`, then `details` will be of type `AirBookingDetails`. |
| 63 | + |
| 64 | +### <a name="schema-air-booking-details"></a>Schema for Air Booking Details |
| 65 | + |
| 66 | +Name |Type |Format |Description |
| 67 | +--------------|-------|------------------------------------------------|----------- |
| 68 | +`journeys` |`array`|[AirJourneyDetails](#schema-air-journey-details)|List of air journey details. A journey is a portion of a passenger's itinerary between origin and destination. There would be one journey for one-way, two journeys for round trip, and (n+1) journeys for a multi-city trip, where n stands for the number of stopovers. Each journey contains one or more segments. |
| 69 | + |
| 70 | +### <a name="schema-air-journey-details"></a>Schema for Air Journey Details |
| 71 | + |
| 72 | +Name |Type |Format | Description |
| 73 | +|----------------------|---------|------------------------------------------------|------------ |
| 74 | +|`origin` |`string` |- |IATA airport code of the airport of initial departure. |
| 75 | +|`destination` |`string` |- |IATA airport code of the last airport in the journey. |
| 76 | +|`departureDateTime` |`string` |`YYYY-MM-DDTHH:MM:SS.f` |Date and time traveler will depart from the point of departure, local time (without offset). |
| 77 | +|`departureDateTimeUtc`|`string` |`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time traveler will depart from the point of departure, UTC time. |
| 78 | +|`arrivalDateTime` |`string` |`YYYY-MM-DDTHH:MM:SS.f` |Date and time traveler will arrive at the point of arrival, local time (without offset). |
| 79 | +|`arrivalDateTimeUtc` |`string` |`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time traveler will arrive at the point of arrival, UTC time. |
| 80 | +|`international` |`boolean`|- |Whether the journey is international or not. True for international (crosses a country), False for domestic (within the country). |
| 81 | +|`index` |`integer`|- |Zero-based index, representing the order of the journey withing the booking, that the passenger will take to get from booking origin to booking destination(s). |
| 82 | +|`segments` |`array` |[AirSegmentDetails](#schema-air-segment-details)|List of air segment details. Segment refers to the portion of a passenger's itinerary that represents a single flight. Technical stops are ignored. |
| 83 | + |
| 84 | +### <a name="schema-air-segment-details"></a>Schema for Air Segment Details |
| 85 | + |
| 86 | +Name |Type |Format |Description |
| 87 | +|-----------------------|---------|---------------------------------|------------ |
| 88 | +|`origin` |`string` |- |IATA airport code of the point of departure. |
| 89 | +|`destination` |`string` |- |IATA airport code of the point of arrival. |
| 90 | +|`departureDateTime` |`string` |`YYYY-MM-DDTHH:MM:SS.f` |Date traveler will depart from the point of departure, local time (without offset). |
| 91 | +|`departureDateTimeUtc` |`string` |`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time traveler will depart from the point of departure, UTC time. |
| 92 | +|`arrivalDateTime` |`string` |`YYYY-MM-DDTHH:MM:SS.f` |Date and time traveler will arrive at the point of arrival, local time (without offset). |
| 93 | +|`arrivalDateTimeUtc` |`string` |`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time traveler will arrive at the point of arrival, UTC time. |
| 94 | +|`marketingFlightNumber`|`string` |- |The flight number assigned by the airline that sells the ticket. |
| 95 | +|`marketingCarrier` |`object` |[AirCarrier](#schema-air-carrier)|Air carrier of the flight segment. |
| 96 | +|`international` |`boolean`|- |Whether the segment is international or not. True for international (crosses a country), False for domestic (within the country). |
| 97 | +|`index` |`integer`|- |Zero-based index, representing the order of the segment withing the journey. |
| 98 | + |
| 99 | +### <a name="schema-air-carrier"></a>Schema for Air Carrier |
| 100 | + |
| 101 | +Name |Type |Format| Description |
| 102 | +|----------|--------|------|------------ |
| 103 | +|`iataCode`|`string`| - |IATA airline carrier code. Example: AA, VA, LH |
| 104 | +|`name` |`string`| - |Name of the air carrier. |
| 105 | + |
| 106 | +### <a name="schema-hotel-booking-details"></a>Schema for Hotel Booking Details |
| 107 | + |
| 108 | +Name |Type |Format |Description |
| 109 | +---------------------|--------|-------------------------------------|----------- |
| 110 | +`hotel` |`object`|[HotelDetails](#schema-hotel-details)|Details about the hotel. |
| 111 | +`checkInDateTime` |`string`|`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time representing the time of check-in in local time (without offset). |
| 112 | +`checkOutDateTime` |`string`|`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time representing the time of check-out in local time (without offset). |
| 113 | +`checkInDateTimeUtc` |`string`|`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time representing the time of check-in in UTC time. |
| 114 | +`checkOutDateTimeUtc`|`string`|`YYYY-MM-DDTHH:MM:SS.fZ` |Date and time representing the time of check-out in UTC time. |
| 115 | + |
| 116 | +### <a name="schema-hotel-details"></a>Schema for Hotel Details |
| 117 | + |
| 118 | +Name |Type |Format |Description |
| 119 | +----------|--------|-----------------------------------------|----------- |
| 120 | +`name` |`string`|- |Name of the hotel. |
| 121 | +`address` |`object`|[AddressDetails](#schema-address-details)|Details about the hotel address. |
| 122 | + |
| 123 | +### <a name="schema-address-details"></a>Schema for Hotel Address Details |
| 124 | + |
| 125 | +Name | Type | Format | Description |
| 126 | +-------------------------|----------|------------------------------------------|------------ |
| 127 | +`address1` | `string` | - | Address line 1. |
| 128 | +`address2` | `string` | - | Address line 2. |
| 129 | +`administrativeAreaName` | `string` | - | Represents the state or federal land or province the hotel is located in. |
| 130 | +`postalCode` | `string` | - | Postal code of the hotel. Between 3 and 10 alphanumeric characters, spaces, and hyphens, which covers most international postal code formats. |
| 131 | +`localityName` | `string` | - | Name of the city, town, village, or other locality the address is located in. |
| 132 | +`countryCode` | `string` | ISO 3166-1 alpha-2 | Two letter code representing the country the hotel is located in. Uses ISO 3166-1 alpha-2 standard. Example: BR. |
| 133 | +`geoCoords` | `object` | [GeoLocation](#schema-hotel-geolocation) | Geographic coordinates of the hotel |
| 134 | + |
| 135 | +### <a name="schema-hotel-geolocation"></a>Schema for Hotel Address GeoLocation |
| 136 | + |
| 137 | +Name | Type | Format | Description |
| 138 | +-------|----------|---------|------------ |
| 139 | +`lat` | `number` | `float` | Latitude of the location. |
| 140 | +`long` | `number` | `float` | Longitude of the location. |
| 141 | + |
| 142 | +### <a name="schema-trip-details"></a>Schema for Trip Details |
| 143 | + |
| 144 | +Name|Type |Format|Description |
| 145 | +----|--------|------|----------- |
| 146 | +`id`|`string`|`GUID`|Uniquely identifies the trip. |
| 147 | + |
| 148 | +## <a name="sample-events"></a>Sample Events |
| 149 | + |
| 150 | +### <a name="sample-air-event"></a>Sample Air Booking Event |
| 151 | + |
| 152 | +Sample roundtrip air booking |
| 153 | + |
| 154 | +```json |
| 155 | +{ |
| 156 | + "id": "51519e89-2c1d-47ec-bd93-7c4ace9c57e6", |
| 157 | + "correlationId": "b2fd900a-5935-46fc-8d29-599de9864e21", |
| 158 | + "topic": "concur.travel.book", |
| 159 | + "eventType": "travelBookingCompleted", |
| 160 | + "timeStamp": "2025-04-01T11:01:01.000Z", |
| 161 | + "route": "stable", |
| 162 | + "facts": { |
| 163 | + "userId": "b7d12989-0489-471a-81cd-175f8b78afa5", |
| 164 | + "companyId": "ab83bc5f-f66e-4ce0-9dcc-7dbf0195e061", |
| 165 | + "delegateUserId": "e5315ec2-5033-4197-b15b-4cec00b838f6", |
| 166 | + "type": "concur.travel.trip.Booking.Completed.v1", |
| 167 | + "version": "1.0.0", |
| 168 | + "trip": { |
| 169 | + "id": "8585c3ca-62bd-4585-8f18-f85e331fa7fa" |
| 170 | + }, |
| 171 | + "bookings": [ |
| 172 | + { |
| 173 | + "id": "5040b878-da00-47c7-8676-e0f6c67885b5", |
| 174 | + "type": "Air", |
| 175 | + "details": { |
| 176 | + "journeys": [ |
| 177 | + { |
| 178 | + "origin": "EWR", |
| 179 | + "destination": "LAX", |
| 180 | + "departureDateTime": "2025-07-01T00:00:00-03:00", |
| 181 | + "departureDateTimeUtc": "2025-07-01T05:00:00Z", |
| 182 | + "arrivalDateTime": "2025-07-01T16:00:00-03:00", |
| 183 | + "arrivalDateTimeUtc": "2025-07-01T21:00:00Z", |
| 184 | + "international": false, |
| 185 | + "index": 0, |
| 186 | + "segments": [ |
| 187 | + { |
| 188 | + "origin": "EWR", |
| 189 | + "destination": "DEN", |
| 190 | + "departureDateTime": "2025-07-01T00:00:00-03:00", |
| 191 | + "departureDateTimeUtc": "2025-07-01T05:00:00Z", |
| 192 | + "arrivalDateTime": "2025-07-01T03:00:00-03:00", |
| 193 | + "arrivalDateTimeUtc": "2025-07-01T08:00:00Z", |
| 194 | + "marketingFlightNumber": "1111", |
| 195 | + "marketingCarrier": { |
| 196 | + "iataCode": "AA", |
| 197 | + "name": "American Airlines" |
| 198 | + }, |
| 199 | + "international": false, |
| 200 | + "index": 0 |
| 201 | + }, |
| 202 | + { |
| 203 | + "origin": "DEN", |
| 204 | + "destination": "LAX", |
| 205 | + "departureDateTime": "2025-07-01T05:00:00-03:00", |
| 206 | + "departureDateTimeUtc": "2025-07-01T10:00:00Z", |
| 207 | + "arrivalDateTime": "2025-07-01T16:00:00-03:00", |
| 208 | + "arrivalDateTimeUtc": "2025-07-01T21:00:00Z", |
| 209 | + "marketingFlightNumber": "2222", |
| 210 | + "marketingCarrier": { |
| 211 | + "iataCode": "SW", |
| 212 | + "name": "SouthWest Airlines" |
| 213 | + }, |
| 214 | + "international": false, |
| 215 | + "index": 1 |
| 216 | + } |
| 217 | + ] |
| 218 | + }, |
| 219 | + { |
| 220 | + "origin": "LAX", |
| 221 | + "destination": "EWR", |
| 222 | + "departureDateTime": "2025-07-07T00:00:00-03:00", |
| 223 | + "departureDateTimeUtc": "2025-07-07T05:00:00Z", |
| 224 | + "arrivalDateTime": "2025-07-07T16:00:00-03:00", |
| 225 | + "arrivalDateTimeUtc": "2025-07-07T21:00:00Z", |
| 226 | + "international": false, |
| 227 | + "index": 1, |
| 228 | + "segments": [ |
| 229 | + { |
| 230 | + "origin": "LAX", |
| 231 | + "destination": "EWR", |
| 232 | + "departureDateTime": "2025-07-07T00:00:00-03:00", |
| 233 | + "departureDateTimeUtc": "2025-07-07T05:00:00Z", |
| 234 | + "arrivalDateTime": "2025-07-07T16:00:00-03:00", |
| 235 | + "arrivalDateTimeUtc": "2025-07-07T21:00:00Z", |
| 236 | + "marketingFlightNumber": "3333", |
| 237 | + "marketingCarrier": { |
| 238 | + "iataCode": "DL", |
| 239 | + "name": "Delta Airlines" |
| 240 | + }, |
| 241 | + "international": false, |
| 242 | + "index": 0 |
| 243 | + } |
| 244 | + ] |
| 245 | + } |
| 246 | + ] |
| 247 | + } |
| 248 | + } |
| 249 | + ] |
| 250 | + } |
| 251 | +} |
| 252 | +``` |
| 253 | + |
| 254 | +### <a name="sample-hotel-event"></a>Sample Hotel Booking Event |
| 255 | + |
| 256 | +```json |
| 257 | +{ |
| 258 | + "id": "51519e89-2c1d-47ec-bd93-7c4ace9c57e6", |
| 259 | + "correlationId": "b2fd900a-5935-46fc-8d29-599de9864e21", |
| 260 | + "eventType": "travelBookingCompleted", |
| 261 | + "topic": "concur.travel.book", |
| 262 | + "timeStamp": "2025-04-01T11:01:01.000Z", |
| 263 | + "route": "stable", |
| 264 | + "facts": { |
| 265 | + "companyId": "ab83bc5f-f66e-4ce0-9dcc-7dbf0195e061", |
| 266 | + "userId": "b7d12989-0489-471a-81cd-175f8b78afa5", |
| 267 | + "delegateUserId": "e5315ec2-5033-4197-b15b-4cec00b838f6", |
| 268 | + "type": "concur.travel.trip.Booking.Completed.v1", |
| 269 | + "version": "1.0.0", |
| 270 | + "trip": { |
| 271 | + "id": "8585c3ca-62bd-4585-8f18-f85e331fa7fa" |
| 272 | + }, |
| 273 | + "bookings": [ |
| 274 | + { |
| 275 | + "id": "5040b878-da00-47c7-8676-e0f6c67885b5", |
| 276 | + "type": "Hotel", |
| 277 | + "details": { |
| 278 | + "hotel": { |
| 279 | + "name": "The Ritz-Carlton New York, Central Park", |
| 280 | + "address": { |
| 281 | + "address1": "50 Central Park S", |
| 282 | + "address2": "", |
| 283 | + "administrativeAreaName": "NY", |
| 284 | + "postalCode": "10019", |
| 285 | + "localityName": "New York", |
| 286 | + "countryCode": "US", |
| 287 | + "geoCoords": { |
| 288 | + "lat": 40.755630, |
| 289 | + "long": -73.977580 |
| 290 | + } |
| 291 | + } |
| 292 | + }, |
| 293 | + "checkInDateTime": "2025-04-02T15:00:00", |
| 294 | + "checkInDateTimeUtc": "2025-04-02T20:00:00Z", |
| 295 | + "checkOutDateTime": "2025-04-05T16:00:00", |
| 296 | + "checkOutDateTimeUtc": "2025-04-05T21:00:00Z" |
| 297 | + } |
| 298 | + } |
| 299 | + ] |
| 300 | + } |
| 301 | +} |
| 302 | +``` |
0 commit comments