AI Web Check-in API for OTAs, TMCs & corporate travel
An AI agent opens the airline's own website the minute check-in opens, checks your passenger in, picks the seat, and sends the boarding pass. Across 500+ airlines.
Not a scraper that breaks the next time an airline redesigns its site — an agent that reads the page and keeps going. 60,000+ check-ins completed in the last six months.
- Test on real PNRs, no integration
- First 100 check-ins free
- Live in ~2 days
Watch the AI agent check a passenger in
A 2 min 11 sec walk through the test portal: a real booking pasted in, the agent working through the airline's own check-in flow, and the boarding pass coming back at the end. No slides, no mock data.
- Runs on your own PNRs, on the airlines and routes you sell
- First 100 check-ins free, no card required
- Portal access is sent as soon as you request it — no integration needed to start
500+ airlines, checked in by one AI agent
Full-service and low-cost carriers, domestic and international. A sample of the carriers partners run through the API most often — coverage is not limited to this list, and nothing here is hard-coded per airline.
India
- IndiGo
- Air India
- Air India Express
- SpiceJet
- Akasa Air
Middle East
- Emirates
- Qatar Airways
- Etihad Airways
- flydubai
- Air Arabia
- Saudia
Asia Pacific
- Singapore Airlines
- Thai Airways
- Malaysia Airlines
- AirAsia
- Cathay Pacific
- Vietnam Airlines
Europe & North America
- British Airways
- Lufthansa
- Air France
- KLM
- Turkish Airlines
- United Airlines
Not sure about a specific carrier or route? Confirm coverage during onboarding. Subscribe validates your itinerary; unavailable airline timing can lead to manual fulfillment reported as SCHEDULED. See which airlines are not supported.
Flyo AI Web Check-in API: key facts
| What it is | A REST API that completes airline web check-in for your passengers automatically and returns the boarding pass |
|---|---|
| How it works | An AI agent completes check-in on the airline's own website — the world's first, and not a hard-coded scraper |
| Built for | OTAs and booking platforms, TMCs, corporate travel desks |
| Airlines covered | 500+ worldwide, domestic and international, full-service and low-cost |
| Check-ins delivered | 60,000+ completed in the last six months |
| API uptime | 99.9%, measured monthly |
| Boarding pass delivery | Boarding-pass URLs through status, requests and your registered callback |
| Free tier | First 100 check-ins free, no card required |
| Testing | No-code portal on real PNRs, shared once you request access — no integration needed |
| Typical integration | About 2 days: three REST endpoints and one static API key |
| Security | CASA Tier 2 verified, encrypted in transit, API keys scoped per enterprise |
| Pricing | Free for the first 100, then $0.40 / $0.35 / $0.30 per completed check-in by monthly volume |
What is an AI web check-in API?
A web check-in API is a REST interface that lets a travel platform check passengers in with the airline automatically, without anyone visiting the airline's website. You send the PNR, flight, and passenger details once; the API completes the airline's check-in flow the moment the window opens and returns the boarding pass.
Flyo's is the world's first to do that work with an AI agent rather than a set of hard-coded scripts. The agent opens the airline's own site and works through check-in the way a person would, which is why it survives the redesigns, extra consent steps and new upsell screens that break conventional automation.
Check-in is the most repetitive job in post-booking operations. Every ticket generates one, the window opens between 24 and 48 hours before departure, and it almost always lands outside office hours. Most platforms handle it by hand: a service desk logging into dozens of airline websites, re-typing passport numbers, and emailing PDFs to travellers one at a time. If you want the traveller-side view of the same process, we wrote a plain guide to what web check-in is.
Automating it changes three things for an OTA, a TMC, or a corporate travel desk:
- Travellers get their boarding pass automatically, instead of a reminder to go and do it themselves.
- Check-in cost per booking stops scaling with volume — a desk that checked in 300 passengers a month can support 30,000.
- Check-in becomes a service you control and can charge for, and an upsell surface for seats, baggage, lounge access, and insurance.
One API call in, a boarding pass out
You hand over the booking once. Everything below happens without anyone on your team touching an airline website, or watching for a failure.
- 01The moment a ticket is issued
You send us the booking
One POST with the PNR, the flight and the passengers, days or weeks before departure. Or paste it into the portal if you have not integrated yet. Nothing else is asked of you after that.
- 02Until the window opens
Flyo watches for the check-in window
Every airline opens check-in at a different time, and moves it by route and fare class. Flyo holds your booking and tracks when yours opens. There is nothing for you to schedule, poll or remember.
- 03When the check-in run is due
The AI agent checks the passenger in
The agent opens the airline's own website and works through the real check-in flow the way a person would: passenger details, passport and APIS forms, consent screens, then the live seat map for the seat preference you sent.
Track the current outcomeIf automation encounters a problem, Flyo may continue fulfillment manually. Use the current status and missing_info to understand what is needed; do not create another subscription solely because an earlier run failed.
The boarding pass goes out
Available boarding-pass URLs are returned through the API and your callback for display in your app or delivery to the traveller. Check-in can be COMPLETED before a pass is available; inspect boarding_passes and sub_status and keep listening for updates.
You are told exactly what is blocking it
A passport number you never sent, a missing date of birth, a document the airline wants verified in person. You get a typed reason and a missing_info list with days still on the clock, not a silent failure on departure day.
Either way, your system is told
Every state change is pushed to your webhook — SCHEDULED, IN_PROGRESS, COMPLETED, FAILED — each with a human-readable message saying what happened. Nothing in this flow needs a person watching it.
The whole integration is one POST
Hand over the PNR, the flight and the passengers once and you are done. Three endpoints exist in total — subscribe a booking, read the status of one check-in, list your requests — and authentication is a single static X-API-Key header with no token refresh flow to build.
POST /extPartner/api/webcheckin/subscribe
X-API-Key: <your-dashboard-issued-key>
{
"pnr": "ABC123",
"flights": [
{
"airline": "6E",
"flight_number": "6E203",
"origin": "DEL",
"destination": "BOM",
"departure_datetime": "2030-09-20T10:00:00",
"arrival_datetime": "2030-09-20T12:00:00"
}
],
"passengers": [
{
"first_name": "John",
"last_name": "Doe",
"email": "john@example.com"
}
]
}Check-in is only half of it — we deliver the boarding pass too
Use the boarding-pass URLs returned through status and callbacks to display passes in your own product or deliver them through your own channels. A completed check-in can still be waiting for a boarding pass.
Deliver through your own channels
Use available boarding-pass URLs in your own app, email or messaging flow. Check boarding_passes before offering a download.
Or in your own app, under your brand
Available boarding-pass URLs are returned on the status endpoint and in the webhook. Render them in your app or confirmation email. COMPLETED can precede boarding-pass availability.
Or pull it, if you prefer
The same boarding_passes array comes back from the status and list endpoints, not just the webhook, so a push you missed is never a boarding pass you lost.
POST https://partner.example.com/webhooks/flyo
{
"event": "webcheckin.update",
"event_id": "9f8d7e6c5b4a32109f8d7e6c5b4a32109f8d7e6c5b4a32109f8d7e6c5b4a3210",
"occurredAt": "2030-09-18T05:00:00.000Z",
"checkin_id": "CHK-783245",
"changes": {
"status": "COMPLETED",
"sub_status": "BOARDING_PASS_AVAILABLE",
"checkin_message": "Checkin completed and boarding passes are available",
"missing_info": [],
"boarding_passes": [
"https://files.example.com/boarding-pass.pdf"
]
}
}What you get back
The pass arrives in your system as part of the same webcheckin.update event that tells you check-in finished. No second call, no polling loop, no file to fetch on a schedule.
boarding_passesis a flat array of available URLs; passenger and segment mapping is not exposed- Available on the status and list endpoints too, if you would rather pull than receive
- Render them under your own brand or send them through your own email or messaging flow
An AI agent, not a scraper
Conventional check-in automation hard-codes each airline's website. The moment that airline ships a redesign, adds a step, or moves a button, the script breaks — usually silently, usually in peak season.
It reads the page, not a selector
The agent looks at the airline's site the way a person does. A new layout, an extra interstitial, a reworded button, a fresh consent checkbox — it works out what the page is asking and carries on.
New airlines without new code
Because nothing is hard-coded per carrier, coverage extends to new airlines and routes without you waiting on anyone's release cycle.
Track fulfillment
Use status and callbacks to track the current outcome. Flyo may continue fulfillment manually when automation encounters an issue.
Building check-in in-house vs. the Flyo API
| Dimension | Building it yourself | Flyo AI Web Check-in API |
|---|---|---|
| Airline coverage | One hard-coded scraper per airline, built and owned by your team | 500+ airlines, one AI agent, nothing hard-coded per carrier |
| Time to first check-in | Months of engineering per carrier | Test this week in the portal, integrate in about 2 days |
| When an airline changes its site | The script breaks silently; your on-call engineer, at 3am, in check-in season | The agent reads the new page and carries on — nobody is paged, nothing changes for you |
| Boarding pass delivery | Build WhatsApp and email pipelines yourself | Boarding-pass URLs for your app or delivery channels |
| Retries on failure | Your own scheduler, queue and backoff logic | Track automation and manual fulfillment |
| Cost model | Fixed engineering headcount regardless of volume | First 100 free, then from $0.30 per completed check-in |
Test it on your own PNRs before you write any code
Request access through the form on this page and we send you portal credentials with your first 100 check-ins. Paste a real booking, watch the agent check the passenger in, and see exactly what your integration would receive — no API keys to wire up, no engineering time to commit.
Real PNRs, not mock data
Paste a live booking from an airline and route you actually sell, and watch the check-in run end to end. No sandbox stubs that behave differently in production.
See the failure cases too
Run a deliberately incomplete booking and the portal shows you the exact missing_info codes your integration would receive — missing passport, missing date of birth, departure too close — so you know what to collect before you build.
First 100 check-ins free
Enough to prove the flow across your busiest routes and carriers. No card, no contract, no minimum. You only start paying once it is doing real work.
Most teams run their first check-in in the portal before bringing engineering in at all, and only integrate once they have seen it work on their own bookings.
Get portal accessWhat you get out of the box
Everything needed to run check-in at scale, without owning a single airline integration.
500+ airlines, one AI agent
- Full-service and low-cost carriers, domestic and international
- No per-airline script to maintain — the agent handles each site as it finds it
- Confirm carrier and route coverage during onboarding
Boarding passes where travellers are
- Boarding-pass URLs for your app and delivery channels
- Arrives even when the traveller has no data connection at the airport
- Or take the boarding pass URLs and render them in your own app
Webhooks instead of polling
- Register a callback URL and an auth header once
- Every webcheckin.update event pushed through a queued, retried pipeline
- Status and list endpoints available if you would rather pull
Seat preferences and ancillaries
- Row preference (front, middle, rear) and column preference per passenger
- Applied during check-in wherever the airline allows free selection
- Turns check-in into an upsell surface for seats, baggage, and lounge access
Missing-info handling built in
- Incomplete passenger data waits instead of failing the request
- A typed missing_info list tells you exactly what to collect
- Update eligible bookings with the complete passenger list
Enterprise-grade by default
- CASA Tier 2 verified and encrypted in transit
- API keys scoped per enterprise, issued and revoked from the dashboard
- 60 requests/minute and 1,000/hour per key, with quota on every response
Built for OTAs, TMCs and corporate travel desks
If you hold the booking, you can own the check-in — and everything that happens on departure day.
Own the trip after checkout
Every ticket you sell gets checked in automatically, and the boarding pass arrives from you rather than the airline's app. The traveller comes back to your platform on departure day instead of leaving it.
Stop paying consultants to check people in
Thousands of business travellers checked in without anyone opening an airline website. Your service desk stops absorbing check-in tickets at 2am, and check-in cost per booking stops scaling with headcount.
Every traveller boarded, on the record
Seats assigned and boarding passes issued for every employee trip, with an auditable status per booking. No more chasing travellers the night before a flight to confirm they checked themselves in.
Running a larger platform with more than check-in to automate? See the full enterprise platform.
Limits, edge cases and fine print
Every buyer asks these on the first call, and the answers are the ones with a caveat or a no in them. Here they are in public, before you look at the price.
Which airlines are not supported?
Check coverage for your airline and route with the Flyo team before integrating. Subscribe validates the itinerary, but does not detect every airline restriction. If check-in timing is unavailable, the request can be accepted as SCHEDULED for manual fulfillment rather than immediately rejected. Use status and missing_info to track the outcome.
What happens on low-cost carriers where every seat is paid?
Check-in still completes and the boarding pass is still issued — the agent takes whatever the airline assigns for free rather than buying anything. On carriers that charge for every seat, that usually means the airline allocates a seat at check-in and the agent accepts it. The agent never spends money on your behalf: paid seats, baggage and extras are surfaced back to you so you can offer them to the traveller in your own flow and keep the margin, which is the whole reason check-in is worth owning. If you want a specific paid seat taken automatically, that is a per-partner configuration rather than a default.
Does it work on codeshare bookings?
Send the operating airline and its flight number, with the PNR that airline recognizes. Subscribe does not look up codeshares or translate marketing-carrier details into operating-carrier details. Confirm these details with your booking provider before submitting.
Where is passenger data stored, and how long do you keep it?
Confirm data residency, retention and document access requirements with the Flyo team during onboarding. The API reference does not promise automatic passport deletion after departure or a fixed boarding-pass URL expiry. Handle passenger details and document URLs as sensitive data and agree the required policies for your environment.
What does CASA certified actually mean?
CASA is the Cloud Application Security Assessment run by the App Defense Alliance, the security programme Google, Amazon and Meta founded. Flyo holds a Tier 2 verification, which means an independent assessor tested the application against the OWASP Application Security Verification Standard and checked how it authenticates, authorises and stores data — it is an audited assessment, not a self-declaration. In practice it is the bar a security reviewer at an OTA or a corporate procurement team asks for. It is not the same thing as SOC 2 or ISO 27001; if your review requires one of those specifically, ask us where that sits rather than assuming CASA substitutes for it.
What if the traveller already checked themselves in?
Subscribe does not query the airline to detect a check-in completed independently by the traveller. ALREADY_SUBSCRIBED means Flyo has an active matching request. An existing completed Flyo attempt returns HTTP 422 REJECTED; use its original checkin_id to retrieve status and any available boarding-pass URLs.
Can it handle group and multi-passenger bookings?
Multi-passenger PNRs are the normal case — the passengers array takes as many travellers as the booking holds, each with their own passport details and seat preference, and the agent checks them in together in one pass so the group is seated together where the airline allows it. True group bookings held in a separate group PNR, the sort with twenty or more seats and a negotiated fare, are worth flagging during onboarding, because a few airlines handle those outside their normal web check-in flow entirely.
How is this different from a GDS or an NDC check-in?
GDS and NDC give you booking, ticketing and servicing, but check-in is largely outside what they expose — which is exactly why so many OTAs still have a service desk logging into airline websites by hand despite a full GDS integration. This API sits after the ticket is issued and is deliberately agnostic about where the ticket came from: it takes a PNR and passenger details, whether the booking originated in Amadeus, Sabre, an NDC connection, a consolidator, or your own inventory. It replaces the manual work at the end of the funnel rather than any part of your booking stack.
Integration, webhooks, boarding pass delivery and the rest are answered in the frequently asked questions further down.
AI web check-in API pricing
Pay per completed check-in. No setup fee, no platform minimum, no charge for check-ins that never ran.
Your first 100 check-ins are free, and you can run them from the portal on real PNRs before writing any code. Billing starts only once you go past them.
- No card required
- No integration required
- Cancel any time
Starter
1 - 3,000 check-ins / month
- All three REST endpoints
- Webhook delivery
- Boarding-pass URLs for your channels
- Email support
Growth
3,001 - 10,000 check-ins / month
- Everything in Starter
- Priority check-in scheduling
- Shared Slack channel
- Integration support during onboarding
Scale
10,000+ check-ins / month
- Everything in Growth
- Custom rate limits and quotas
- Dedicated solutions engineer
- Annual contracting and invoicing
Above 50,000 check-ins a month? Talk to us about custom pricing and dedicated capacity.
AI web check-in API: frequently asked questions
Coverage exclusions, codeshare bookings, low-cost carriers, data residency and the CASA certification are answered under limits, edge cases and fine print higher up the page.
A web check-in API is a REST interface that lets a travel platform check passengers in with the airline automatically, without anyone visiting the airline's website. You send the PNR, flight details, and passenger details; the API completes the airline's check-in flow when the window opens and returns the boarding pass. Flyo's is the world's first to do that work with an AI agent rather than hard-coded scripts: the agent opens the airline's own site and works through check-in the way a person would.
A scraper is written against one airline's page structure — specific buttons, specific field names. When that airline ships a redesign, adds a consent step, or moves a button, the script breaks, usually silently and usually in peak season. Flyo's agent reads the page instead of following hard-coded selectors, so a new layout, an extra interstitial or a reworded button does not stop it. It also means coverage extends to new airlines and routes without waiting on a release.
Flyo schedules check-in for the airline window and works through the airline website using the supplied passenger details and seat preferences. Available boarding-pass URLs are returned through status and callbacks for your system to display or deliver.
Over 500 airlines worldwide, covering both full-service and low-cost carriers on domestic and international routes — IndiGo, Air India, Air India Express, SpiceJet and Akasa Air in India, Emirates, Qatar Airways, Etihad, flydubai and Air Arabia across the Gulf, and Singapore Airlines, Thai, AirAsia, British Airways, Lufthansa, Turkish and United further afield. Flyo has completed more than 60,000 check-ins across them in the last six months. You integrate once against a single schema rather than building a separate check-in flow for each airline. Confirm carrier and route coverage during onboarding. Missing check-in timing can lead to manual fulfillment, reported as SCHEDULED, rather than immediate rejection.
Yes. IndiGo, Air India, Air India Express, SpiceJet and Akasa Air are among the most-used carriers on the API, and Indian domestic routes are the highest-volume traffic Flyo handles. IndiGo in particular is worth automating because it charges for check-in at the airport counter if the passenger has not checked in online, so an automatic web check-in removes a fee your traveller would otherwise be surprised by. International carriers out of India — Emirates, Qatar Airways, Etihad, flydubai, Singapore Airlines, Thai, Lufthansa, British Airways and Turkish among them — are covered on the same integration.
The first 100 check-ins are free. After that Flyo prices per completed check-in on a volume-tiered basis: $0.40 per check-in up to 3,000 a month, $0.35 from 3,001 to 10,000, and $0.30 above 10,000. There are no setup fees and no platform minimums, and you are not charged for check-ins that never ran. Volumes above 50,000 a month are quoted directly.
Your first 100 check-ins are free, with no card and no contract. They run against real PNRs rather than sandbox stubs, which is enough to prove the flow across your busiest routes and carriers. Billing only starts once you go past the first 100.
Yes. There is a two-minute walkthrough on this page showing a real booking pasted into the portal, the AI agent working through the airline's check-in flow, and the boarding pass coming back at the end. It is also on the Flyo YouTube channel if you want to forward it to a colleague before booking a call.
Yes, and without writing any code. Request access through the form on this page and we send you portal credentials along with your first 100 free check-ins. In the portal you paste a real PNR and watch the check-in run end to end on the airlines and routes you actually sell. You can also run deliberately incomplete bookings to see the exact missing_info codes your integration would receive — missing passport, missing date of birth, departure too close — so you know what data to collect before engineering starts.
Most partners are live in about two days once they start integrating, and can test in the portal first before committing any engineering time. There are four endpoints — subscribe a booking, get its status, list requests, and update missing passenger details or a PNR — plus an optional webhook. Authentication is a single static X-API-Key header with no token refresh flow to build.
Both. Send a callbackData object when you subscribe a booking and Flyo pushes webcheckin.update events to your callback URL, forwarding an auth header you choose so you can verify each request. If you would rather pull, the status and list endpoints return the same normalized payload on your own schedule.
Follow status and checkin_message to track fulfillment. Failed automation may be handled manually; do not assume a retry schedule or a successful boarding pass. If you configured a callback, reconcile webhook updates with the status endpoint. Collect any missing passenger information and send a complete passenger update when requested.
For most international routes the airline requires passport number, expiry date, and nationality. You do not need them at the moment you subscribe: the attempt is stored as SCHEDULED with a MISSING_INFO sub-status and a typed missing_info list, so you can collect exactly what is missing from the traveller before the check-in window opens.
Yes. Each passenger accepts a seat_preference object with a row preference (front, middle, or rear) and a column preference (window, aisle, or middle). Flyo applies it during check-in wherever the airline allows free seat selection, which makes check-in a natural place to upsell paid seats and other ancillaries.
Available boarding-pass URLs are returned in boarding_passes on status, requests and callback events. Your system can display them in your app or send them through your own email or messaging flow. COMPLETED does not always mean a pass is already available.
Yes. Use the URLs in boarding_passes to display available passes inside your own app or send them through your own confirmation email. The array may be empty even when check-in is COMPLETED; use sub_status and keep checking for updates. Passenger or segment mapping is not exposed in this array.
Yes. Traffic is encrypted in transit, and Flyo holds a CASA Tier 2 verification, which is explained in full under limits, edge cases and fine print, along with where passenger data is stored and how long it is kept. Every API key is scoped to a single enterprise, so a check-in belonging to another enterprise is indistinguishable from one that does not exist. Keys are issued and revoked from the partner dashboard, and rate limits are enforced per key at 60 requests per minute and 1,000 per hour.
OTAs and booking platforms, TMCs, and in-house corporate travel desks — any team that holds the booking and is currently checking passengers in by hand. It is designed for organisations where check-in volume has outgrown the service desk, and where the boarding pass should come from you rather than the airline's own app.
More than 60,000 completed web check-ins in the last six months, across over 500 airlines. That volume is the reason the agent handles the awkward cases — the extra consent screen, the interstitial that only appears on one route, the airline that reworded a button last week — rather than only the clean ones.
Run your first check-in this week
Tell us your volume and where check-in sits in your booking flow. We reply with portal access and your first 100 free check-ins so you can test on your own PNRs, plus API keys when you are ready to integrate.
- First 100 check-ins free, no card required
- Portal access to test real PNRs with zero integration
- Reply within one business day
- CASA Tier 2 verified, encrypted in transit
Prefer email? Write to nitish@flyo.ai.