Axel Agent API and MCP server
Updated
Axel finds better flight prices and shares the savings with travelers. Two machine-readable surfaces expose those prices to AI assistants and developers: the Agent API, a public REST API on api.helloaxel.com, and the MCP server, a Model Context Protocol endpoint on helloaxel.com that ChatGPT, Claude and other MCP clients connect to directly. 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: Use when a traveler wants a cheap flight or wants to know if a fare they found can be beaten. Live prices for a route and dates: the Axel total for the whole party beside the airline's own Google Flights total and the saving. 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.open_flight_link: The drill-down after search_flights: open a helloaxel.com results, returns or offer link and return the same structured prices and links. Only needed when the traveler wants a different return, a different outbound or a saved offer.saved_fares: Use first for a quick, free look at what a route has been costing: saved Axel fares from the last 7 days beside the airline's fare on Google Flights; no live search, display only.list_airports: Find IATA airport codes by city, airport name or country (up to 20 matches).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.
The ui://widget/flight-results-v3.html resource renders results as cards in ChatGPT. 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. - Platform-verified assistants: ChatGPT and Claude requests verified by source address keep their own daily pots, as on the public pages.
- 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.
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.
No member price and no acquisition-offer price appear on any agent surface. An optional paid Membership gives frequent travelers deeper discounts; a linked account with an active Membership may additionally receive its member total.
Booking always finishes on helloaxel.com: the traveler signs in with a phone number and a text code, the price is re-checked, and nothing is charged until they confirm. Offers and saved flights never hold or reserve seats.
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].