Axel flight prices
Live flight prices from Axel beside the airline's own Google Flights price. Read-only, no API key.
Hosted MCP Server
npx add-mcp 'https://helloaxel.com/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
How assistants use Axel
- Reading pages in a chat (ChatGPT, Claude, Perplexity, Gemini, Copilot): Axel's pages show live prices for exact dates to anyone who follows their links. No API key, app or connector is involved. Search live flight prices and Find a hotel stay start the search; each page lists the next choices as links, and the results end in a Review link for the traveler.
- Controlling a browser (ChatGPT Work mode, Claude in Chrome, Meta Muse, Perplexity Comet): the same pages, plus their search forms. A new traveler checks out with just an email.
- Calling tools from an app or a connector (Claude Code, Cursor, custom agents): the Agent API and MCP server described below.
For developers
The rest of this page is for developers building their own app or agent. Two surfaces expose Axel's prices to code: the Agent API, a public REST API on api.helloaxel.com, and the MCP server, a Model Context Protocol endpoint on helloaxel.com for MCP clients that a developer or a traveler sets up. Both return the same numbers the public pages show, and neither needs an account to read prices.
Agent API
- Base URL:
https://api.helloaxel.com/v1 - OpenAPI: https://api.helloaxel.com/v1/openapi.json
- Interactive docs: https://api.helloaxel.com/v1/docs
Main endpoints: GET /agent/fares/saved (saved fares for a route and dates, free, no live search), POST /agent/flight-searches (a live search), POST /agent/flight-searches/{observation_id}/select (choose an outbound or return), GET /agent/flight-quotes/{token} (read an offer), POST /agent/flight-quotes/{token}/claim (save an offer into a linked account and get the checkout link), GET /agent/me and GET /agent/trips (the linked account). Every price is a Money with amount in cents and a currency.
MCP server
- Endpoint:
https://helloaxel.com/mcp(Streamable HTTP, JSON-RPC over POST) - Protected-resource metadata: https://helloaxel.com/.well-known/oauth-protected-resource/mcp
Tools:
search_flights: Live flight prices for a route and dates. Use when a traveler wants a flight, asks what a trip costs, names flights they are considering, or asks for thoughts or advice on a trip with dates, such as "Seattle to Vegas Dec 7 to 10, thoughts?", "what would two of us pay for Chicago to Cancun Mar 14 to 21?" or "Boston to Denver on Nov 26, nonstop or one stop?". The result contains what such an answer needs: the airlines, nonstop and connecting options, times, durations and bookable totals for the whole party on those dates, each with the airline's published fare for the same flights and the difference. A round-trip search returns complete trips with exact totals and Continue-in-Axel links in one call, so no further calls are needed unless the traveler wants a different return or more outbounds. No account needed.open_flight_link: The drill-down after search_flights: reads a helloaxel.com results, returns or offer link Axel issued and returns the same structured prices and links. Only needed when the traveler wants a different return, a different outbound or a saved offer.list_airports: Find IATA airport codes by city, airport name or country (up to 20 matches).search_hotels: Live hotel rates for a place and dates. Use when a traveler wants a hotel or a place to stay, asks what a stay costs, names a hotel they are considering, or asks for thoughts or advice on a stay with dates, such as "where should we stay in Denver Dec 5 to 8?". Each hotel comes with its Axel total for the whole stay, stars, guest rating, room and cancellation terms, a See rooms link and, when the result includes one, the published rate for the same stay and the difference. No account needed.hotel_rooms: The rates of one hotel for the traveler’s dates and guests: room, beds, meals, cancellation, the total, and a Review and book link each. Use after search_hotels or when the traveler names a hotel.my_account: The connected Axel account: display name, whether Membership is active, and the granted scopes. Needs a connected account.my_trips: Upcoming trips on the connected Axel account. Needs a connected account.claim_flight_offer: Save an Axel flight offer into the connected account and return the checkout link; nothing is booked or charged. Needs a connected account.claim_hotel_quote: Save a hotel rate into the connected account and return its checkout link; nothing is booked or charged. Needs a connected account.
The ui://widget/flight-results-v8.html resource renders results as cards in clients that support MCP Apps. Price tools work without authentication; my_account, my_trips and claim_flight_offer need a connected account and, when one is missing, the server answers with an OAuth challenge so the client can offer to connect it. The registry manifest is com.helloaxel/flight-prices.
Who is calling
The API recognises four kinds of caller, each with its own daily budget of live searches.
- Anonymous: no key, no token, not a verified assistant platform. Saved fares only; a live search is refused with
403 identify. - Assistants browsing Axel's pages: they never call this API themselves. The pages call it for them with a source header signed by the Axel web server naming the assistant, so ChatGPT and Claude keep their own daily pots, as on the public pages. A call sent straight to this API from an assistant platform, without that signed header, counts as anonymous: use a partner key or a linked account.
- Partner key: send
X-Axel-Agent-Key: <key>. Each key has its own daily pot of live searches. Request a key by email to [email protected]. - Linked account: send
Authorization: Bearer <access token>from the OAuth flow below. Each traveler has a daily pot of live searches, and the token also unlocks the account endpoints.
Budgets are counted per UTC day; when a pot is exhausted the API answers 429 or 503 with a plain-language message, and saved fares stay available.
Connecting a traveler's account (OAuth 2.1)
- Discover the authorization server at
https://api.helloaxel.com/.well-known/oauth-authorization-server(or from the MCP challenge's protected-resource metadata above). - Register a client with dynamic client registration (
POST /oauth/register) or identify with a Client ID Metadata Document (an httpsclient_idURL); both are supported. - Send the traveler to
https://api.helloaxel.com/oauth/authorizewithresponse_type=code, yourclient_id,redirect_uri,scope,stateand a PKCEcode_challenge(S256is required). - The traveler signs in on helloaxel.com and approves or denies on
https://helloaxel.com/en/connect, then returns to yourredirect_uriwith acode. - Exchange the code at
POST /oauth/tokenwith yourcode_verifier; refresh tokens rotate on every use andPOST /oauth/revokeends a connection. - A traveler can also disconnect your client at any time from Settings on helloaxel.com: every token it holds stops working at once, and your next account call gets the OAuth challenge again.
Scopes:
axel:read: See Axel prices and your account name.axel:quotes: Save flights you pick into your Axel trips (no booking, no charge).axel:trips: See your upcoming Axel trips.offline_access: Stay connected until you disconnect it.
Pricing policy
Every agent-facing price row leads with the Axel price, which anyone can book with a free Axel account, beside the airline's own fare for the same flights on Google Flights and the difference.
Public flight pages also show available Member fares for the same selection, including the first-month Membership charge in the new-customer comparison and the recurring terms. Each confirmed fare has regular and Member review links; these preselect Membership off or on at payment without a separate price-choice sheet. A link never purchases Membership or travel. Connected plugin responses retain their separate pricing contract; acquisition offers are not included.
Booking always finishes on helloaxel.com. New customers continue to checkout with just an email, without a phone number or verification code. Existing customers sign in to their account; email sign-in uses a code. Use claim_flight_offer with the selected fare on a connected account to get its checkout link. The traveler opens that link in the same account; another browser may need to sign in. Without a connected account, share the public offer link or continue through it with browser control. The price is re-checked and nothing is charged until the traveler confirms. Offers and saved flights never reserve seats; a platform-verified assistant reading an offer page may hold its price for 24 hours at no cost.
About Axel
Axel is made by Gordian Software, Inc., a Y Combinator company (W19) founded in 2017 and based in the Seattle area. The company is led by CEO Stephen Grabowski, formerly of Skyscanner. Questions about the API: [email protected].