Hopper Disruption Guarantee (DG) API
**What is Disruption Guarantee?** Disruption Guarantee (DG) offers a premium disruption assistance service to customers in case of flight disruption, including rebooking options on any airline or a refund option. **** **How it works** There are two distinct flows for DG: - The _purchase flow_, enabling customers to purchase the product within the airline’s booking flow. - The _exercise flow_, enabling customers to benefit from the premium disruption assistance service in case of a flight disruption. For the _purchase flow_, the first step is to [Create a Session](#operation/postSessions) Both the purchase and the exercise of DG should be tracked by the airline in the airline’s Passenger Name Record (PNR) according to the applicable industry standards. **** **Purchase flow** DG follows the industry standard of a two step purchase process. 1. Once the user is landing on the page displaying the DG offer, the airline will call the [Create DG Offers](#operation/postDg_offers) endpoint. DG Offers can be created at multiple granular levels. The request must include a description of the Itinerary for which the offers are requested. The response will contain - the price for the product (`premium`), - the refundable amount (`coverage`), - the maximum price per passenger for a new flight (`service_cap`), - the delay threshold to trigger the policy (`min_minuted_delay`), - the start of the timeframe to trigger the policy (`max_hours_before_departure`) - and the description of the offer in the user’s language (`contents`). 2. If a user is attaching DG to his booking, the airline will call the [Create DG Contract](#operation/postDg_contracts) endpoint. The request must include the selected offer\_id(s) and a description of the Itinerary for which the contract is requested, which must match the one of the Offer. At this stage, the DG Contract is only _created_. It will be confirmed once the customer has made the payment, which can be done in two ways: 1. If the airline is the Merchant of Records (MoR), it will capture the payment for the total amount of the booking, including the DG fee amount. Upon a successful payment, the airline will call the Update DG Contract Status endpoint to set the DG contract to _confirmed_. The airline will track this purchase in its PNR following the industry standards that apply to ticketing or ticketless carriers. 2. If HTS is the Merchant of Records (MoR), the airline will capture the payment for the amount of the booking excluding the DG fee, while HTS will capture the payment for the DG fee amount. Upon a successful payment of its portion, the airline will call the Process DG Payment endpoint for HTS to capture the payment for the DG fee amount. Once successful, the DG contract will be set to _confirmed_. The airline will track this purchase in its PNR. The details of a DG contract can be retrieved at any time through the [Get a DG Contract](#operation/getDg_contractsId) endpoint. **** **Exercise flow** In this version of the API, the DG exercise is powered by HTS as a standalone flow, without any endpoint publicly exposed.\ In a future version of the API, the DG exercise will be initialized from the “Manage My Bookings” (MMB) page of the airline. New endpoints will be released to that purpose.
Documentation
Specifications
Other Resources
openapi: 3.0.3
info:
title: Airline Analytics Disruption Guarantee (DG) 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: "**What is Disruption Guarantee?**\n\nDisruption Guarantee (DG) offers a premium disruption assistance service to customers in case of flight disruption, including rebooking options on any airline or a refund option.\n\n****\n\n**How it works**\n\nThere are two distinct flows for DG:\n\n- The _purchase flow_, enabling customers to purchase the product within the airline’s booking flow.\n- The _exercise flow_, enabling customers to benefit from the premium disruption assistance service in case of a flight disruption.\n\nFor the _purchase flow_, the first step is to [Create a Session](#operation/postSessions)\n\nBoth the purchase and the exercise of DG should be tracked by the airline in the airline’s Passenger Name Record (PNR) according to the applicable industry standards.\n\n****\n\n**Purchase flow**\n\nDG follows the industry standard of a two step purchase process.\n\n1. Once the user is landing on the page displaying the DG offer, the airline will call the [Create DG Offers](#operation/postDg_offers) endpoint. DG Offers can be created at multiple granular levels. The request must include a description of the Itinerary for which the offers are requested. The response will contain\n\n - the price for the product (`premium`),\n - the refundable amount (`coverage`),\n - the maximum price per passenger for a new flight (`service_cap`),\n - the delay threshold to trigger the policy (`min_minuted_delay`),\n - the start of the timeframe to trigger the policy (`max_hours_before_departure`)\n - and the description of the offer in the user’s language (`contents`).\n\n2. If a user is attaching DG to his booking, the airline will call the [Create DG Contract](#operation/postDg_contracts) endpoint. The request must include the selected offer\\_id(s) and a description of the Itinerary for which the contract is requested, which must match the one of the Offer. At this stage, the DG Contract is only _created_. It will be confirmed once the customer has made the payment, which can be done in two ways:\n\n 1. If the airline is the Merchant of Records (MoR), it will capture the payment for the total amount of the booking, including the DG fee amount. Upon a successful payment, the airline will call the Update DG Contract Status endpoint to set the DG contract to _confirmed_. The airline will track this purchase in its PNR following the industry standards that apply to ticketing or ticketless carriers.\n 2. If HTS is the Merchant of Records (MoR), the airline will capture the payment for the amount of the booking excluding the DG fee, while HTS will capture the payment for the DG fee amount. Upon a successful payment of its portion, the airline will call the Process DG Payment endpoint for HTS to capture the payment for the DG fee amount. Once successful, the DG contract will be set to _confirmed_. The airline will track this purchase in its PNR.\n \nThe details of a DG contract can be retrieved at any time through the [Get a DG Contract](#operation/getDg_contractsId) endpoint.\n\n****\n\n**Exercise flow**\n\nIn this version of the API, the DG exercise is powered by HTS as a standalone flow, without any endpoint publicly exposed.\\\nIn a future version of the API, the DG exercise will be initialized from the “Manage My Bookings” (MMB) page of the airline. New endpoints will be released to that purpose.\n"
name: Disruption Guarantee (DG)
paths:
/dg_offers:
post:
description: Create DG offers for a user's trip
operationId: postDg_offers
parameters:
- description: The ID of the current airline session, see [Sessions](#tag/Sessions)
example: 9fd3f2f9-e5aa-4128-ace9-3c4ee37b685f
explode: false
in: header
name: HC-Session-ID
required: false
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_dg_offers_request'
required: true
responses:
'201':
content:
application/json:
schema:
items:
$ref: '#/components/schemas/create_dg_offer_item_response'
type: array
description: The created DG offers
headers:
Expires:
explode: false
required: true
schema:
type: string
style: simple
Cache-Control:
explode: false
required: true
schema:
type: string
style: simple
HTS-Session-ID:
description: The ID of the current session, see [Sessions](#tag/Sessions)
example: 9fd3f2f9-e5aa-4128-ace9-3c4ee37b685f
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 DG Offers
tags:
- Disruption Guarantee (DG)
/dg_contracts:
post:
description: Create a DG contract from selected DG offer(s).
operationId: postDg_contracts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_dg_contract_request'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/dg_contract'
description: The created DG contract
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 DG contract creation request was successfully validated but 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 DG Contract
tags:
- Disruption Guarantee (DG)
/dg_contracts/{id}:
get:
description: Get a DG contract
operationId: getDg_contractsId
parameters:
- description: A unique identifier for a contract
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/dg_contract'
description: The requested DG contract
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: Get a DG contract
tags:
- Disruption Guarantee (DG)
/dg_contracts/{id}/payment:
post:
description: "When HTS is the Merchant of Record (MoR), the customer's credit card is charged by HTS for the DG fee.\n\nHTS is relying on an external payment gateway to process the payments, it allows the partner airline to tokenize the customer's credit card details and then pass the generated token in HTS Ancillaries for Airlines API payment endpoints in order to process the payment and confirm the contract related to the purchased product.\n\n**Token URL**: https://core.spreedly.com/v1/payment_methods.json\n \n**Example Token Request**: \n \n``` \ncurl --request POST --url https://core.spreedly.com/v1/payment_methods.json --header 'content-type: application/json' -u \"login:password\" --data '{\n\t\"payment_method\": {\n\t\t\"email\": \"aaa@bbb.ccc\",\n\t\t\"credit_card\": {\n\t\t\t\"number\": \"4111111111111111\",\n\t\t\t\"month\": \"09\",\n\t\t\t\"year\": \"2029\",\n\t\t\t\"first_name\": \"John\",\n\t\t\t\"last_name\": \"Smith\",\n\t\t\t\"address1\": \"123 12th St\",\n\t\t\t\"address2\": \"Building B\",\n\t\t\t\"city\": \"Quebec City\",\n\t\t\t\"state\": \"QC\",\n\t\t\t\"zip\": \"G1R 4S9\",\n\t\t\t\"country\": \"CA\",\n\t\t\t\"verification_value\": \"123\"\n\t\t}\n\t}\n}'\n```\n**Example Token Response**: \n``` \n{\n\t\"transaction\": {\n\t\t\"token\": \"KtToV20m9qT1Yi8pbTeLNz0Ypns\",\n\t\t\"created_at\": \"2023-11-29T13:31:56Z\",\n\t\t\"updated_at\": \"2023-11-29T13:31:56Z\",\n\t\t\"succeeded\": true,\n\t\t\"transaction_type\": \"AddPaymentMethod\",\n\t\t\"retained\": false,\n\t\t\"state\": \"succeeded\",\n\t\t\"message_key\": \"messages.transaction_succeeded\",\n\t\t\"message\": \"Succeeded!\",\n\t\t\"payment_method\": {\n\t\t\t\"token\": \"MxyYEhDK12CUAA18bJDkAq0ab3y\",\n\t\t\t\"created_at\": \"2023-11-29T13:31:56Z\",\n\t\t\t\"updated_at\": \"2023-11-29T13:31:56Z\",\n\t\t\t\"email\": \"aaa@bbb.ccc\",\n\t\t\t\"data\": null,\n\t\t\t\"storage_state\": \"cached\",\n\t\t\t\"test\": true,\n\t\t\t\"metadata\": null,\n\t\t\t\"callback_url\": null,\n\t\t\t\"last_four_digits\": \"1111\",\n\t\t\t\"first_six_digits\": \"411111\",\n\t\t\t\"card_type\": \"visa\",\n\t\t\t\"first_name\": \"John\",\n\t\t\t\"last_name\": \"Smith\",\n\t\t\t\"month\": 9,\n\t\t\t\"year\": 2029,\n\t\t\t\"address1\": \"123 12th St\",\n\t\t\t\"address2\": \"Building B\",\n\t\t\t\"city\": \"Quebec City\",\n\t\t\t\"state\": \"QC\",\n\t\t\t\"zip\": \"G1R 4S9\",\n\t\t\t\"country\": \"CA\",\n\t\t\t\"phone_number\": null,\n\t\t\t\"company\": null,\n\t\t\t\"full_name\": \"John Smith\",\n\t\t\t\"eligible_for_card_updater\": true,\n\t\t\t\"shipping_address1\": null,\n\t\t\t\"shipping_address2\": null,\n\t\t\t\"shipping_city\": null,\n\t\t\t\"shipping_state\": null,\n\t\t\t\"shipping_zip\": null,\n\t\t\t\"shipping_country\": null,\n\t\t\t\"shipping_phone_number\": null,\n\t\t\t\"issuer_identification_number\": \"41111111\",\n\t\t\t\"click_to_pay\": false,\n\t\t\t\"managed\": true,\n\t\t\t\"payment_method_type\": \"credit_card\",\n\t\t\t\"errors\": [],\n\t\t\t\"bin_metadata\": {\n\t\t\t\t\"message\": \"BIN Metadata is available only to Advanced Vault enrolled customers and payment methods. Reach out to your account representative for more details.\"\n\t\t\t},\n\t\t\t\"fingerprint\": \"7ccffcf38900f224fc946cf2a9c8e260072b\",\n\t\t\t\"verification_value\": \"XXX\",\n\t\t\t\"number\": \"XXXX-XXXX-XXXX-1111\"\n\t\t}\n\t}\n}\n```\nHere the returned payment method token **MxyYEhDK12CUAA18bJDkAq0ab3y** has to be used in the Process DG Payment request below."
operationId: postDg_contractsIdPayment
parameters:
- description: A unique identifier for a contract
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/process_dg_payment_request'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/dg_payment'
description: The contract has been paid
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: Process DG payment
tags:
- Disruption Guarantee (DG)
/dg_contracts/{id}/update_status:
put:
description: Update DG Contract Status
operationId: putDg_contractsIdUpdate_status
parameters:
- description: A unique identifier for a contract
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_dg_contract_status_request'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/dg_contract'
description: The Updated DG contract
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 DG contract status update request was successfully validated but 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: Update DG Contract Status
tags:
- Disruption Guarantee (DG)
/dg_contracts/{id}/itinerary_slices:
put:
description: Update itinerary slices of a DG contract.
operationId: putDg_contractsIdItinerary_slices
parameters:
- description: A unique identifier for a contract
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
items:
$ref: '#/components/schemas/dg_itinerary_slice'
minItems: 1
type: array
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/dg_contract'
description: The Updated DG contract
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 DG Contract Itinerary Slices update request was successfully validated but 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: Update DG Contract Itinerary Slices
tags:
- Disruption Guarantee (DG)
/dg_contract_exercises:
post:
description: Record that a request to exercise a DG contract has occurred.
operationId: postDg_contract_exercises
parameters:
- description: The ID of the current airline session, see [Sessions](#tag/Sessions)
example: 9fd3f2f9-e5aa-4128-ace9-3c4ee37b685f
explode: false
in: header
name: HC-Session-ID
required: false
schema:
type: string
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_dg_contract_exercise_request'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/create_dg_contract_exercise_response'
description: The created DG contract exercise
headers:
Expires:
explode: false
required: true
schema:
type: string
style: simple
Cache-Control:
explode: false
required: true
schema:
type: string
style: simple
HTS-Session-ID:
description: The ID of the current session, see [Sessions](#tag/Sessions)
example: 9fd3f2f9-e5aa-4128-ace9-3c4ee37b685f
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 DG Exercise
tags:
- Disruption Guarantee (DG)
/customer/dg/payout/receipt:
get:
description: Download payout receipt as PDF
operationId: getCustomerDgPayoutReceipt
parameters:
- explode: false
in: header
name: verification-code
required: false
schema:
type: string
style: simple
responses:
'200':
content:
application/pdf:
schema:
format: binary
type: string
description: PDF receipt file
headers:
Expires:
explode: false
required: true
schema:
type: string
style: simple
Cache-Control:
explode: false
required: true
schema:
type: string
style: simple
Content-Type:
explode: false
required: true
schema:
type: string
style: simple
Content-Disposition:
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:
- {}
- SessionAuth: []
summary: Get payout receipt PDF
tags:
- Disruption Guarantee (DG)
/customer/dg_exercises/{id}/session:
get:
description: Retrieve the session ID for a given DG exercise ID
operationId: getCustomerDg_exercisesIdSession
parameters:
- description: A unique identifier for a exercise
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/get_dg_exercise_session_response'
description: The session ID for the DG exercise
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request'
description: Syntactic errors were encountered while handling the request
'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
summary: Get session ID by DG exercise ID
tags:
- Disruption Guarantee (DG)
components:
schemas:
dg_passenger_pricing:
example:
individual_price: '20.55'
passenger_count:
count: 3
type: adult
taxes:
- amount: '0.20'
code: RC
currency: CAD
- amount: '0.20'
code: RC
currency: CAD
properties:
passenger_count:
$ref: '#/components/schemas/passenger_count'
individual_price:
description: Price per passenger
example: '20.55'
minimum: 0
type: string
taxes:
description: Taxes applicable to this itinerary
items:
$ref: '#/components/schemas/dg_passenger_tax'
type: array
required:
- individual_price
- passenger_count
title: dg_passenger_pricing
type: object
process_dg_payment_request:
description: A process DG payment request
properties:
payment_token:
description: 'The Token of the Form of Payment used to pay for the DG fee. '
example: MxyYEhDK12CUAA18bJDkAq0ab3y
type: string
first_name:
description: First name of the cardholder
example: John
type: string
last_name:
description: Last name of the cardholder
example: Smith
type: string
address_line1:
description: Address of the cardholder (first line)
example: 123 12th St
type: string
address_line2:
description: Address of the cardholder (second line)
example: Building B
type: string
city:
description: City of the cardholder
example: Quebec City
type: string
state_or_province:
description: State or province of the cardholder
example: QC
type: string
postal_code:
description: Postal code of the cardholder
example: G1R 4S9
type: string
country:
description: Country of the cardholder
example: CA
type: string
pnr_reference:
description: Reference of the PNR in the airline system
example: ABC123
type: string
email_address:
description: Email address of the user
example: aaa@bbb.ccc
type: string
phone_number:
description: Phone number of the customer
example: '12345678900'
type: string
required:
- email_address
- payment_token
- phone_number
- pnr_reference
title: process_dg_payment_request
type: object
passenger_type:
enum:
- adult
- child
- seated_infant
- lap_infant
title: passenger_type
type: string
dg_request_type:
enum:
- post_booking
- reprice
- ancillary
- bundle
- fare
title: dg_request_type
type: string
opera:
properties:
version:
type: string
type:
enum:
- opera
type: string
required:
- type
title: opera
type: object
dg_ancillary:
description: An object detailing the fare used to create a DG offer
example:
passenger_reference: '1'
total_price: '20.55'
covered: true
type: travel_insurance
properties:
total_price:
description: Total price of ancillaries of this type
example: '20.55'
minimum: 0
type: string
passenger_reference:
description: Unique reference of the passenger associated to this ancillary
example: '1'
type: string
type:
$ref: '#/components/schemas/dg_ancillary_type'
covered:
description: Is this ancillary covered by the product. By default true if not specified
type: boolean
required:
- total_price
- type
title: dg_ancillary
type: object
create_dg_contract_exercise_response:
description: An object containing exercise information for a contract
example:
redirection_url: https://hts.hopper.com/
id: 1ec9ef4b-b3bf-64ae-8a3d-6b084d9f6b3c
properties:
id:
description: Unique identifier for a DG exercise
example: 1ec9ef4b-b3bf-64ae-8a3d-6b084d9f6b3c
type: string
redirection_url:
description: URL on which the customer should be redirected to exercise (if applicable)
example: https://hts.hopper.com/
type: string
required:
- id
title: create_dg_contract_exercise_response
type: object
points:
properties:
amount:
description: Amount charged on the form of payment
minimum: 0
type: string
type:
enum:
- points
type: string
required:
- amount
- type
title: points
type: object
dg_passenger_type:
enum:
- adult
- child
- seated_infant
- lap_infant
title: dg_passenger_type
type: string
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: '#/comp
# --- truncated at 32 KB (116 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/hopper-com/refs/heads/main/openapi/hopper-com-disruption-guarantee-dg-api-openapi.yml