API reference

Named GraphQL queries and mutations at /api/graphql with their arguments.

GraphQL is served at /api/graphql. Custom operations are defined in features/keystone/mutations/. Every command takes an idempotencyKey of 12 to 200 characters; repeating a key returns the earlier result. All other lists have standard Keystone queries (bookings, bookingsCount, flightInstances, ...) and create, update, and delete mutations, subject to carrier access.

Storefront (public)

OperationArguments
publicCarrierIdentitycarrierCode
publicAirlineFlightOptionscarrierCode, origin, destination, date, passenger count
publicFlightStatusescarrierCode, flight number, date
customerBookingcarrierCode, recordLocator, accessToken
createCustomerOffershopping session, flight, bucket, passenger count
createCustomerBookingoffer, passenger details, contact
startCustomerCheckoutcarrierCode, recordLocator, accessToken
completeCustomerCheckoutsame plus checkoutSessionId
assignCustomerSeatrecordLocator, accessToken, bookingPassengerId, bookingSegmentId, seatId, idempotencyKey
checkInCustomerBookingsame as seat, seatId optional
cancelCustomerBookingrecordLocator, accessToken, reason, idempotencyKey
rotateCustomerBookingAccessTokenrecordLocator, accessToken
recoverCustomerBookingAccesscarrierCode, recordLocator, email

Operator commands

mutation Provision($key: String!) {
  provisionDatedFlight(
    scheduleId: "..." cabinId: "..." fareBrandId: "..."
    serviceDate: "2026-12-01"
    scheduledDepartureAt: "2026-12-01T13:00:00Z"
    scheduledArrivalAt: "2026-12-01T14:30:00Z"
    capacity: 150 baseAmount: 12900 taxAmount: 1800 currencyCode: "USD"
    idempotencyKey: $key
  ) { resourceType resourceId status changed replayed }
}

Most commands return AirlineOperationResult with resourceType, resourceId, status, changed, and replayed.

GroupOperations
NetworkregisterAirport(iataCode, icaoCode, name, city, countryCode, subdivisionCode, timezone)
FlightsprovisionDatedFlight, setDatedFlightSalesStatus(flightInstanceId, status), setInventoryAuthorization(inventoryBucketId, authorized), updateFlightOperations(flightInstanceId, terminals, gates, estimated and actual times, status)
OffersairlineFlightOptions, createOfferFromShopping(flightInstanceId, inventoryBucketId, passengerIds), createBookingFromOffer(offerId, passengerIds, recoverOnly)
BookingscancelBooking(bookingId, reason), reissueBookingAccessCode(bookingId), operatorBookingReceipt
PaymentsrecordReceivedPayment(bookingId, purpose, method, externalReference, amount, receivedAt), submitManualPaymentEvidence, approveManualPaymentEvidence(evidenceId), rejectManualPaymentEvidence(evidenceId, reason), captureBookingPayment(bookingId, providerReference, instrumentBrand, instrumentLast4), processBookingRefund(bookingId, amount, reason, providerReference)
TicketingissueBookingTickets(bookingId)
Airport servicedepartureManifest, registerPassengerTravelDocument, verifyPassengerTravelDocument, checkInBookingPassenger(bookingPassengerId, bookingSegmentId, seatId), acceptCheckedBag(bookingPassengerId, flightInstanceId, weightGrams), boardBookingPassenger(boardingPassId), offloadBookingPassenger(boardingPassId, reason), recordBagEvent(bagId, action, airportCode, note)
RecoverypublishFlightDisruption(flightInstanceId, type, publicSummary), reaccommodateBooking(disruptionId, bookingId, replacementFlightInstanceId, replacementInventoryBucketId), requeueDeadLetteredOutboxEvent
SetupcompleteCarrierOnboarding, dismissCarrierOnboarding, updateCarrierStorefrontSettings, issueMachineCredential, revokeMachineCredential, machineCredentialSummaries

Errors

Expected failures are DomainErrors with codes BAD_USER_INPUT, NOT_FOUND, FORBIDDEN, CONFLICT, or RATE_LIMITED. Their messages are returned as written. Any other exception is masked. See Troubleshooting.

Other endpoints

  • GET /api/health
  • POST /api/payments/webhooks/[providerKey]
  • POST /api/integrations/settlements/[connectionKey]
  • /api/mcp-transport, /api/completion
  • /api/robots.txt, /api/sitemap.xml

On this page