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.

OpenAPI Specification

hopper-com-disruption-guarantee-dg-api-openapi.yml Raw ↑
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