Guides · Payment flow

Payment flow

Three separate movements of money surround a booking made through Norba, and keeping them apart is the whole point of this page. Norba never holds any of it. You collect the full price from your traveller, you pay the carrier the airline’s own amount through our API with your own payment method, and we bill you our fees at the end of the month.

MovementWho pays whomWhen
1 · Traveller → youThe whole price: the airline’s amount plus your markup. Taken on your own checkout, with your own payment provider. Never touches Norba.At your checkout
2 · You → carrierThe airline’s amount only, charged to your card, transmitted through the API. The carrier authorises it and issues the ticket.POST /v1/orders
3 · You → NorbaOur fees, accrued per booking, per extra sold, per servicing operation and per metered request, then charged to the card on your account.Monthly, in arrears
Your markup never leaves you
You have already collected it at step 1. It is not sent to the carrier at step 2, and we never charge our own fee on it — our fees are worked out from the airline’s own figures. See Pricing.

A booking, end to end

Figures below are illustrative. Your own rates are on the pricing page and in your dashboard.

StepAmountWho moves it
Airline amount (fare + taxes + carrier charges)500.00Quoted by the carrier
Your markup50.00Set by you
Traveller pays you550.00Your payment provider
You pay the carrier, via the API500.00Your card, charged by the carrier
You keep, before your own costs50.00Stays in your account
Norba fee on the booking, accruedper your rate cardInvoiced at month end

The sequence

Traveller
     pays 550.00 on your checkout (airline amount + your markup)
   
Your agency  
     POST /v1/shopping/offers      search                    your markup
     POST /v1/offers/price         price the chosen offer    stays here
     POST /v1/orders               with YOUR card          
                                                           
Norba API                                                   
     withholds your commission, tenders the airline amount 
                                                           
Carrier (NDC)                                               
     authorises 500.00 on your card, issues the ticket     
                                                           
Norba API   returns order_id, PNR, ticket numbers 
   
    accrues the Norba fee against your account

month end:  Norba invoices you    card on file

What to send as payment.amount

Send the full price you quoted the traveller, markup included. Norba withholds your own commission and tenders the remainder — the airline’s amount — to the carrier. You do not subtract your markup yourself.

You sendNorba tenders to the carrierResult
550.00500.00Correct, where your commission rule in Norba is 50.00 for this sale.
500.00500.00Correct where you have no commission rule configured and collect your margin entirely outside Norba.
1.00Rejected with 400: the amount is reconciled against the carrier’s own total for the offer before anything is sent. An amount that does not match never reaches the airline.

Your commission rules live on Commissions in the dashboard. With no rule configured, nothing is withheld and what you send is what the carrier is asked to charge.

What Norba does, and what it does not

Norba does
  • Search, price and hold the carrier’s offers
  • Transmit passenger data and your payment method to the carrier
  • Issue through its own airline connections and accreditation
  • Return the order, PNR and ticket numbers
  • Meter your usage and accrue its own fees
  • Invoice you monthly and suspend on non-payment
Norba does not
  • Charge the traveller, or see their payment method
  • Hold, settle or pay out any money
  • Receive your markup, or charge a fee on it
  • Act as merchant of record for anything the traveller pays
  • Store a card number
  • Pay the carrier on your behalf, or extend credit for a fare

Who carries which risk

EventFalls toWhy
Traveller disputes what you charged themYouTheir contract and their payment was with you, through your provider.
Your card is declined by the carrierYouNo ticket is issued. Nothing is charged, and the order does not reach ticketed.
Carrier adds its own card or service chargeYouIt forms part of what that carrier charges; check the carrier's integration page.
Fraudulent traveller payment, ticket already issuedYouYou collected at step 1 and paid the carrier at step 2; both are yours.
Debit memo caused by your data or instructionYouPassed through with the carrier's own reference. See the agreement, section 12.
Debit memo caused by a Norba failureNorbaOurs to carry.
Carrier cancels, reschedules or goes downNeitherThe carrier owes the traveller its passenger-rights duties; we relay what it tells us.

Forms of payment a carrier will take

Whether a carrier accepts an agency’s own card, and whether it adds a charge for paying that way, is the carrier’s rule and not ours. It differs by carrier and it can change. Check the integration page for the carrier you are selling before you assume a form of payment works, and treat the payment rail as a per-carrier capability rather than something NDC guarantees everywhere.

Sending no card object at all settles the order offline instead — the method string is carried through to the carrier as a settlement remark. See Orders Lifecycle for that path.

3-D Secure and who authenticates

Norba never authenticates a cardholder. There is nobody present on a server-to-server booking call to answer a challenge, and the authentication tokens are bound to one transaction — one amount, one merchant, one directory-server exchange — so they can be neither minted here nor reused from another authentication.

That has a consequence worth stating plainly: you cannot authenticate the traveller once on your checkout and reuse those tokens for the carrier’s charge. They are different transactions. This is the main reason the model on this page pays the carrier with your own card rather than the traveller’s — the traveller’s authentication belongs to your charge, at step 1, where their bank can actually challenge them.

ChargeWho authenticatesHow
Traveller → youYouYour payment provider runs 3-D Secure on your own checkout. Norba is not involved.
You → carrierUsually nobodyA commercial card under a corporate payment process is commonly exempt, which is what makes this rail work at all. Where a carrier does want the tokens, send them in payment.authentication.

The block covers both protocol versions. Version 1 carries xid and cavv_algorithm; version 2 carries ds_transaction_id and channel. The rest — authentication_value, eci, transaction_status — are common to both, whatever the carrier’s own schema happens to call them.

{
  "payment": {
    "method": "CARD",
    "currency": "EUR",
    "amount": 550.00,
    "card": {
      "number": "4111111111111111",
      "holder": "Acme Travel SL",
      "expiry_month": 11,
      "expiry_year": 2030,
      "brand": "VISA"
    },
    "authentication": {
      "version": "2",
      "authentication_value": "AAACBhZHkQICA0kAMkeREMAAAgE=",
      "eci": "05",
      "transaction_status": "Y",
      "ds_transaction_id": "9682ed54-9bba-4f33-8e44-0f6f9dfdc9f2"
    }
  }
}
Refused, never dropped
Send payment.authentication to a carrier whose channel cannot carry it and the booking is refused with an error naming the carrier. Dropping it quietly would leave you believing the liability had shifted to the issuer while the carrier authorised the charge without ever seeing the tokens.

Whether a carrier accepts an agency card, exempts a commercial one, or requires the tokens is per carrier and can change — check its integration page. The cryptogram and the xid are credentials: they are redacted from request logs and never persisted. The status codes beside them are not, because they are what a disputed authentication is traced with.

A reservation is not a ticket

The carrier can accept an order and still fail to issue the document. Until the API returns a ticketed status and at least one ticket number, no ticket exists, and you should not tell the traveller otherwise or treat the sale as complete.

{
  "order_id": "AA001U8DY61A3",
  "pnr": "KBKYAY",
  "status": "confirmed",
  "total_amount": 500.00,
  "currency": "EUR",
  "ticket_numbers": ["0012386549871"]
}

A timeout is not an answer either: read the order back before retrying, and use an idempotency key on every write. Retrying a booking blind is how duplicate tickets — and the debit memos that follow them — get made.

At the end of the month

Everything we accrued against your account through the month — the share of each confirmed booking, each seat and extra sold, each servicing operation, and your metered requests beyond the free allowance — is totalled into one invoice and charged to the card on your account. Sandbox activity is metered but raises no booking fee, because a sandbox booking is not a sale.

The mechanics of that invoice, the standing checks that gate a booking on having a card on file, and what happens when one goes unpaid are all on Billing & Payments.

Payment Flow: Who Charges Whom on a Booking | Norba Docs