openapi: 3.0.3
info:
title: Airline Analytics Sessions API
version: v1.1
description: In order to measure and continuously improve HTS Ancillaries performance, specific events occurring during a customer session can be sent by the partner airlines using some dedicated endpoints.
servers:
- url: https://airlines-api.hopper.com/airline/v1.1
tags:
- description: "Hopper uses a unique ID to correlate API calls and events produced by a user's interaction with an airline application.\nThe duration of the user's interactions is called a \"session\", and the correlation ID is called a `session_id`.\n\nA session begins immediately before the airline’s first API call to Hopper, and the airline must call the Create a Session endpoint at this time. \nA `session_id` is returned from this call; it must be included with each subsequent API call via the `HC-Session-ID` header. \nNo airline action is required to end the session.\n"
name: Sessions
paths:
/sessions:
post:
description: Create a new session for which events will be collected.
operationId: postSessions
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_airline_session_request'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/airline_session'
description: The created airline session
headers:
Expires:
explode: false
required: true
schema:
type: string
style: simple
Cache-Control:
explode: false
required: true
schema:
type: string
style: simple
'204':
description: The airline session creation request was not performed
headers:
Expires:
explode: false
required: true
schema:
type: string
style: simple
Cache-Control:
explode: false
required: true
schema:
type: string
style: simple
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request'
description: Syntactic errors were encountered while handling the request
'401':
description: The client could not be authenticated
'403':
description: The authenticated client does not have permission to call this endpoint
'404':
description: The requested resource could not be found
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/unprocessable_entity'
description: Semantic errors were encountered while handling the request
'500':
description: The server encountered an internal error
security:
- PartnerAuth: []
apiKeyAuth: []
summary: Create a Session
tags:
- Sessions
components:
schemas:
opera:
properties:
version:
type: string
type:
enum:
- opera
type: string
required:
- type
title: opera
type: object
other_os:
properties:
name:
example: 15.0.2
type: string
version:
type: string
type:
enum:
- other_os
example: i_os
type: string
required:
- name
- type
title: other_os
type: object
operating_system:
discriminator:
mapping:
android: '#/components/schemas/android'
chrome_os: '#/components/schemas/chrome_os'
i_os: '#/components/schemas/i_os'
linux: '#/components/schemas/linux'
mac_os: '#/components/schemas/mac_os'
other_os: '#/components/schemas/other_os'
windows: '#/components/schemas/windows'
propertyName: type
oneOf:
- $ref: '#/components/schemas/android'
- $ref: '#/components/schemas/chrome_os'
- $ref: '#/components/schemas/i_os'
- $ref: '#/components/schemas/linux'
- $ref: '#/components/schemas/mac_os'
- $ref: '#/components/schemas/other_os'
- $ref: '#/components/schemas/windows'
title: operating_system
browser:
discriminator:
mapping:
chrome: '#/components/schemas/chrome'
edge: '#/components/schemas/edge'
firefox: '#/components/schemas/firefox'
internet_explorer: '#/components/schemas/internet_explorer'
opera: '#/components/schemas/opera'
other_browser: '#/components/schemas/other_browser'
safari: '#/components/schemas/safari'
propertyName: type
oneOf:
- $ref: '#/components/schemas/chrome'
- $ref: '#/components/schemas/edge'
- $ref: '#/components/schemas/firefox'
- $ref: '#/components/schemas/internet_explorer'
- $ref: '#/components/schemas/opera'
- $ref: '#/components/schemas/other_browser'
- $ref: '#/components/schemas/safari'
title: browser
other_browser:
properties:
name:
type: string
version:
type: string
type:
enum:
- other_browser
type: string
required:
- name
- type
title: other_browser
type: object
platform:
discriminator:
mapping:
app: '#/components/schemas/app'
web: '#/components/schemas/web'
propertyName: type
oneOf:
- $ref: '#/components/schemas/app'
- $ref: '#/components/schemas/web'
title: platform
desktop:
properties:
id:
description: A unique identifier for the end-user's device, generated by the partner
example: eb2dddb7-dc69-4521-9fbb-762b96eb921f
type: string
platform:
$ref: '#/components/schemas/platform'
ui_theme:
type: string
release_build:
type: string
type:
enum:
- desktop
example: mobile
type: string
required:
- id
- type
title: desktop
type: object
airline_session:
description: A airline session resource
example:
id: af585dfd-dddf-4726-9ef7-f1bb8909a79a
properties:
id:
description: A unique identifier for a airline session
example: af585dfd-dddf-4726-9ef7-f1bb8909a79a
type: string
required:
- id
title: airline_session
type: object
windows:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- windows
example: i_os
type: string
required:
- type
title: windows
type: object
app:
properties:
operating_system:
$ref: '#/components/schemas/operating_system'
type:
enum:
- app
example: app
type: string
required:
- type
title: app
type: object
edge:
properties:
version:
type: string
type:
enum:
- edge
type: string
required:
- type
title: edge
type: object
mac_os:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- mac_os
example: i_os
type: string
required:
- type
title: mac_os
type: object
web:
properties:
operating_system:
$ref: '#/components/schemas/operating_system'
browser:
$ref: '#/components/schemas/browser'
type:
enum:
- web
example: app
type: string
required:
- type
title: web
type: object
tablet:
properties:
id:
description: A unique identifier for the end-user's device, generated by the partner
example: eb2dddb7-dc69-4521-9fbb-762b96eb921f
type: string
platform:
$ref: '#/components/schemas/platform'
ui_theme:
type: string
release_build:
type: string
type:
enum:
- tablet
example: mobile
type: string
required:
- id
- type
title: tablet
type: object
internet_explorer:
properties:
version:
type: string
type:
enum:
- internet_explorer
type: string
required:
- type
title: internet_explorer
type: object
device:
description: The end-user's device
discriminator:
mapping:
desktop: '#/components/schemas/desktop'
mobile: '#/components/schemas/mobile'
tablet: '#/components/schemas/tablet'
propertyName: type
oneOf:
- $ref: '#/components/schemas/desktop'
- $ref: '#/components/schemas/mobile'
- $ref: '#/components/schemas/tablet'
title: device
bad_request:
example:
errors:
- code: code
messages:
key: messages
message: message
- code: code
messages:
key: messages
message: message
properties:
errors:
items:
$ref: '#/components/schemas/error'
type: array
required:
- errors
title: bad_request
type: object
android:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- android
example: i_os
type: string
required:
- type
title: android
type: object
unprocessable_entity:
example:
errors:
- code: code
messages:
key: messages
message: message
- code: code
messages:
key: messages
message: message
properties:
errors:
items:
$ref: '#/components/schemas/error'
type: array
required:
- errors
title: unprocessable_entity
type: object
error:
example:
code: code
messages:
key: messages
message: message
properties:
message:
type: string
code:
type: string
messages:
additionalProperties:
type: string
title: map_string
type: object
required:
- message
title: error
type: object
mobile:
properties:
id:
description: A unique identifier for the end-user's device, generated by the partner
example: eb2dddb7-dc69-4521-9fbb-762b96eb921f
type: string
platform:
$ref: '#/components/schemas/platform'
ui_theme:
type: string
release_build:
type: string
type:
enum:
- mobile
example: mobile
type: string
required:
- id
- type
title: mobile
type: object
linux:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- linux
example: i_os
type: string
required:
- type
title: linux
type: object
chrome_os:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- chrome_os
example: i_os
type: string
required:
- type
title: chrome_os
type: object
product:
description: The product for which the session is opened.
Required for sessions having flow_type "exercise".
enum:
- cfar
- dg
- all
title: product
type: string
user_info:
description: An object containing information related to the airline's user. Should be included if known, but not if the user is anonymous.
properties:
airline_user_id:
description: The airline's unique identifier for a user; can be an arbitrary string
example: 2bcd6619-ac3e-403b-9982-3e12f2698a53
type: string
created_date_time:
description: A UTC [RFC3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14) datetime; the date and time at which a user's account was created
example: 2020-11-02 18:34:30+00:00
format: date-time
type: string
previous_bookings:
description: Number of prior bookings a user has made
example: 3
format: int32
minimum: 0
type: integer
required:
- airline_user_id
title: user_info
type: object
safari:
properties:
version:
type: string
type:
enum:
- safari
type: string
required:
- type
title: safari
type: object
create_airline_session_request:
properties:
flow_type:
$ref: '#/components/schemas/flow_type'
user_info:
$ref: '#/components/schemas/user_info'
session_id:
description: The custom identifier for the customer's session. If omitted, a new session ID will be generated.
example: d93dd7c9-39c0-499d-903b-d837282231c7
type: string
device:
$ref: '#/components/schemas/device'
point_of_sale:
description: An ISO 3166-1-alpha-2 country code; the point of sale of the user
example: US
type: string
language:
description: A ISO_639-1 country code; the language associated with the user
example: es
type: string
product:
$ref: '#/components/schemas/product'
required:
- flow_type
- language
- point_of_sale
title: create_airline_session_request
type: object
i_os:
properties:
version:
example: 15.0.2
type: string
type:
enum:
- i_os
example: i_os
type: string
required:
- type
title: i_os
type: object
firefox:
properties:
version:
type: string
type:
enum:
- firefox
type: string
required:
- type
title: firefox
type: object
flow_type:
description: The flow type for which the session is opened.
enum:
- purchase
- exercise
title: flow_type
type: string
chrome:
properties:
version:
type: string
type:
enum:
- chrome
type: string
required:
- type
title: chrome
type: object
securitySchemes:
PartnerAuth:
description: 'This API is authenticated with OAuth 2, Client Credentials grant.\
Clients should use their `client_id` and `client_secret` to obtain an `access_token`.\
The `access_token` should be included in every request, as a `Bearer` token on an `Authorization` header.\
Note that `access_token`s eventually expire, requiring a new token to be fetched.
see [authentication](#tag/Authentication)'
scheme: bearer
type: http
SessionAuth:
description: '# Header Parameters
| headerName | description |
|-----------------|----------------------------------------------------------------------------------------------------|
| `HC-Session-ID` | string
**Example**: `9fd3f2f9-e5aa-4128-ace9-3c4ee37b685f`
The ID of the current session |
'
in: header
name: HC-Session-ID
type: apiKey