Integration GuideAPI Reference
Integration Guide

Payment: Industry Data - airlineData

Some payment partners require additional, industry-specific details about the purchase — for example, flight details for air-travel transactions. These are submitted in the optional top-level industryData object of the Create an Intent request.

  • The object is the same for both integration options — H2H and Checkout — and sits at the intent level, next to payments / paymentIntent.
  • It is payment-method-agnostic: any payment method may require it, depending on the partner.
  • Currently it contains airlineData; support for other industries that require additional fields (e.g. hotels) may be added later.
EndpointPOST /processing/api/v1/intents
Integration flowsH2H and Checkout

When it is required

industryData is optional at the schema level. Existing integrations are not affected: no field becomes globally mandatory.

It becomes mandatory when both conditions are met:

  1. Your merchant account is configured as a specific industry seller (set up by your account manager), and
  2. The intent involves a payment method that requires industry data:
    • H2H — the payment is created with such a method.
    • Checkout — such a method is offered on the payment form: it is listed in paymentIntent.formDetails.displayedPaymentMethods, or it is available to your account by default when the list is omitted.

If your account is not configured for specific industry fields, you may still submit industryData — it is validated against the schema, accepted, and stored.

📘

Which payment methods require airline data depends on your account configuration. Confirm the list with your account manager.

Validation

When the requirement applies and airlineData (or any of its required fields) is missing or invalid, the request is rejected with the standard error response and the intent is not created. Conditional requiredness is enforced even though the fields are optional in the schema.

Persistence

Airline data is stored when the intent is created and is immutable afterwards — it cannot be updated on the intent. It is not echoed in the Create an Intent response; retrieve it with Get an Intent by Id.

Object reference

industryData
FieldTypeRequiredDescription
airlineDataobjectConditionalAir-travel data for the intent. See when it is required.
airlineData
FieldTypeRequiredDescription
pnrstringNoBooking record locator (PNR). 5–8 uppercase alphanumeric characters, e.g. ABC123.
passengerobjectYes*Passenger details.
ticketDetailsobjectYes*Ticket issuance details.
tripLegsarray of objectsYes*Trip legs; 1–4 items.

"Yes*" Required whenever airlineData is submitted.

passenger
FieldTypeRequiredDescription
firstNamestringYesFirst name.
middleNamestringNoMiddle name.
lastNamestringYesLast name.
emailstringNoEmail address.
phonestringNoPhone number in E.164 format, e.g. +14155552671.
dateOfBirthdateNoDate of birth, YYYY-MM-DD.
ticketDetails
FieldTypeRequiredDescription
ticketNumberstringYesTicket number.
systemstringNoIssuing system.
agencyCodestringNoAgency code.
agencyNamestringNoAgency name.
restrictedstringYesRestriction code: "0" — refundable, "1" — non-refundable.
directionstringNoTrip direction code: "0" — one-way, "1" — round trip, "2" — multi-city (complex itinerary).
tripLegs[]
FieldTypeRequiredDescription
datedateYesDeparture date, YYYY-MM-DD.
timeobjectNoDeparture time: { "hour": 0–23, "minute": 0–59 }.
carrierstringYesCarrier code, e.g. BA.
travelClassstringNoBooking class code, e.g. J.
fromstringYesOrigin airport IATA code, e.g. LHR.
tostringYesDestination airport IATA code, e.g. LAX.
stopoverstringNo"O" (the letter O, not zero) — stopover allowed, "X" — no stopover (connection).
fareBasisCodestringNoFare basis code, e.g. SPRSVR.
flightNumberstringNoFlight number, e.g. 101.
legIndexintegerNoPosition of the leg within the trip, 14.

Example

H2H intent with airline data:

curl --request POST \
     --url https://sandbox.carusell.world/processing/api/v1/intents \
     --header 'Authorization: Bearer <token>' \
     --header 'settlement-account-id: <settlement-account-id>' \
     --header 'content-type: application/json' \
     --data '
{
  "useCheckoutForm": false,
  "clientReferenceId": "1234",
  "payments": [
    {
      "payer": {
        "firstname": "Jake",
        "lastname": "Yellow",
        "email": "[email protected]",
        "countryIsoCode": "PH"
      },
      "paymentInstrument": {
        "paymentMethodName": "BANK_CARD_RU"
      },
      "submittedAmount": {
        "value": 100.05,
        "currency": "RUB"
      },
      "authCurrencyCode": "RUB",
      "description": "Vertex - INTENT 1234",
      "webhookUrl": "https://merchant.example.com/webhook"
    }
  ],
  "merchant": {
    "name": "Mustermann",
    "website": "website.io"
  },
  "industryData": {
    "airlineData": {
      "pnr": "ABC123",
      "passenger": {
        "firstName": "Ivan",
        "middleName": "Sergeevich",
        "lastName": "Petrov",
        "email": "[email protected]",
        "phone": "+14155552671",
        "dateOfBirth": "1985-03-21"
      },
      "ticketDetails": {
        "ticketNumber": "5552214567890",
        "system": "GDS",
        "agencyCode": "12345678",
        "agencyName": "Example Travel",
        "restricted": "0",
        "direction": "OW"
      },
      "tripLegs": [
        {
          "date": "2026-08-19",
          "time": {
            "hour": 15,
            "minute": 30
          },
          "carrier": "BA",
          "travelClass": "J",
          "from": "LHR",
          "to": "LAX",
          "stopover": "O",
          "fareBasisCode": "SPRSVR",
          "flightNumber": "101",
          "legIndex": 1
        }
      ]
    }
  }
}
'
📘

The Create an Intent response does not echo industryData. The stored data is returned by Get an Intent by Id, as shown above.



Did this page help you?