# Ancilair — the ancillary shelf for your agent > **The travel shelf after the ticket.** Insurance, eSIM, lounges, bag protection, fast track, transfers, hotels, visas, entry rules, disruption cover, and the seats and bags an airline sells beside a ticket. One token. Supplier credentials stay on the server. The price is quoted on the call, passed through at the supplier's own rate, 0% markup. This file is the agent contract. Same body at https://ancilair.com/llm.txt. It does not list partner endpoints. Search the catalog and read one tool for its parameters and its price. Base URL: https://api.ancilair.com MCP: https://mcp.ancilair.com CLI: `anc`, installed from https://ancilair.com/install.sh Flights stay with the air API the product already uses. Ancilair does not shop air. Duffel and Gordian in this catalog sell seats and extra bags on a ticket you already hold, or on a Duffel offer you are about to order. They are not a second flight search. Nuitee in this catalog is hotels. Start from the job, then search the catalog. `anc catalog search` finds a tool. `anc catalog get ` returns that tool's parameters and the price. Call the routed id and the ladder chooses the supplier, or call a named supplier and that supplier is the only one that runs. The price is on the call, not in this file. ## The one mechanic: /call/ One endpoint, one token. ``` curl "https://api.ancilair.com/call/anc.lounge.search" \ -H "X-Anc-Token: $ANC_TOKEN" \ -H "Content-Type: application/json" \ -d '{"airport":"CDG","terminal":"2E","date":"2026-10-14","adults":1}' ``` ``` curl "https://api.ancilair.com/call/anc.esim.plans" \ -H "X-Anc-Token: $ANC_TOKEN" \ -H "Content-Type: application/json" \ -d '{"destination":"FR","days":7}' ``` - Method, path, query, and body pass through. The supplier response comes back verbatim. A supplier schema change is not Ancilair's to rewrite. - Auth: `X-Anc-Token`. `Authorization: Bearer` is the same token. An agent token is scoped to one team. - `anc catalog get ` is the parameter schema. Tools are strict. An unknown field, or a missing required field, is **422** before anything is forwarded, and nothing is billed. - No per-token concurrency limit. Supplier rate limits are relayed as the supplier sent them. If Ancilair itself is saturated, the answer is **503** with `Retry-After` and no charge. ### Retrying a booking: Idempotency-Key Lookups that fail are not billed. The case that matters is a booking or issuance: the supplier may have charged or issued, and the answer was lost on the way back. Send the same `Idempotency-Key` when you repeat that call. The stored answer is returned, the supplier is not called again, and the replay costs nothing. The replay headers are `X-Anc-Idempotent-Replay: true` and `X-Anc-Cost-Micro: 0`. Use a new key for new work, even with the same parameters. A second search to see what changed is a new call. Reusing one key for a different request is refused (422). Keys are scoped to the caller and kept 24 hours. Book, bind, order, issue, or apply only after an explicit yes from the traveller. Pass the same key on every retry of that yes. ### Reselling the shelf A platform that bills its own agencies tags each call from its backend, not from the model: ``` curl "https://api.ancilair.com/call/anc.insurance.quote" \ -H "X-Anc-Token: $ANC_TOKEN" \ -H "X-Anc-Meta: customer=agency_8123, workspace=brand_fr" \ -H "Idempotency-Key: 4c1e-9a" \ -H "Content-Type: application/json" \ -d '{"destination":"JP","departure_date":"2026-11-02","return_date":"2026-11-12","travellers":2}' ``` Up to five `key=value` pairs. A malformed tag is a 422 before the call is relayed. - `X-Anc-Call-Id` is on every response. Join your ledger to it. - `GET /orgs/{id}/usage/by-tag?key=customer&days=30` is the invoice rollup. - `PUT /orgs/{id}/budgets/customer/agency_8123` with `{"daily_cap_micro": 5000000}` sets a daily ceiling. Caps stack. The refusal names which one hit. The team balance is the hard stop. - An agent token pinned to one tag (`anc org agent-new agency-bot --pin customer=agency_8123`) can bill and read only that tag. Your margin is yours. The supplier price is the traveller price. The fee is on the call, not a markup on the sale. ## How to call 1. Name the job, then search: `anc catalog search "insure a trip"`. 2. Call the routed id (`anc.insurance.quote`) to let the ladder choose, or the named id (`battleface.insurance.quote`) to pin that supplier. 3. Read the quote. This file has no price list. The price is quoted on the call. 4. A quote, a search, a plan list, a seat map, a hotel rate, a requirements check, or an eligibility result is not a booking. 5. The follow-up id (bind, book, order, purchase, add, apply) runs only after the traveller says yes, with an `Idempotency-Key`. **Routed id.** `anc.` picks the supplier: the team's own contract first, then the cheapest quote that can honour the filters. The response names who answered (`X-Anc-Served-By`). - `X-Anc-Route-Max-Cost` — refuse with nothing charged if the reserve would exceed it. - `X-Anc-Route-Waterfall: 0` — stop at the first miss. - `X-Anc-Route-Strict-Filters` — 422 if a supplier cannot honour a filter, instead of silently dropping it. **Named id.** `battleface.insurance.quote` runs battleface and nothing else. Ancilair does not switch suppliers on a named call. On a routed call it may, and it says so in `X-Anc-Served-By`. **Credential ladder**, in order: 1. The team registered its own contract for that supplier. That key. Never metered. 2. The team stored a supplier secret. Injected as a virtual tool. Never metered. 3. The endpoint has a verified public route (open data). No supplier key. Free. 4. Otherwise Ancilair's own supplier account. Metered at the supplier's rate, 0% markup, quoted before the call. Your key always beats Ancilair's. If the supplier does not return a price, the call is refused. Nothing is guessed, and nothing is served free. **Choosing.** 1. Match the inputs you actually have. A Duffel seat call needs a Duffel offer id. A lounge call needs an airport and a date. A hotel call needs dates, a place, and who is staying. An entry-rules call does not file a visa. 2. On a routed call, the team's contract wins, then the cheapest quoted option that fits. Read `X-Anc-Served-By`. 3. Read the quoted cost on the call. Do not round it into a headline, and do not copy a figure from a marketing page. 4. Do not fail over to another supplier on a 4xx. That is usually the parameters. A 429, 5xx, or timeout may be tried on the next supplier only when you already know that supplier's parameters, and you say which one you switched to. **Bookings and issuance are not lookups.** Quote first. Book only after an explicit yes. A wait for a policy, a visa, or a claim is an async task: the submit returns a task id and `X-Anc-Async` saying where to poll. The fee is reserved on submit, charged only when the supplier confirms, refunded in full if it fails or is refused. Money: - The call fee is the response header `X-Anc-Cost-Micro` (integer micro-euros). It is not a number buried in the supplier body, and it is not a markup on the traveller's price. - Store `X-Anc-Call-Id` with it. - A failed supplier call (4xx/5xx), a timeout, an empty result, a 422, a saturation 503, and an idempotent replay cost nothing. - A cache hit on a question this team already asked is 10% of the call. `Cache-Control: no-cache` forces a live call. `X-Anc-Max-Age` accepts only a younger cached answer. A hit on your own key is free. - Out of balance is **402** with `balance_micro`, `estimated_cost_micro`, and `topup_url`. Recover by topping up or by connecting the team's own supplier key. - Supplier capacity exhausted on Ancilair's account is **503** with `resets_at` and `alternatives`. Your own key is unaffected. ## The catalog Jobs, sequences, and suppliers are pages, not a list in this file. - One page per job, also Markdown: https://ancilair.com/use-cases and https://ancilair.com/use-cases/.md - A sequence of jobs: https://ancilair.com/workflows - One supplier: https://ancilair.com/tools/ - The index: https://ancilair.com/catalog ``` anc catalog search "insure a trip" anc catalog get ``` `anc catalog get ` is the parameter schema and the price for that one tool. Do not copy a price from a marketing page. If the supplier does not return a price, the call is refused. The shelf covers insurance, eSIM, lounges, delayed or lost bags, fast track, transfers, hotels, visas and entry rules, disruption, and seats and bags beside a ticket. Flights stay with the air API. Searched and the shelf does not have it? MCP `catalog_request` on https://mcp.ancilair.com files the gap. Do not invent a supplier, a tool id, a success rate, a sample size, a latency, or an endpoint count. Building a product that calls this shelf: https://ancilair.com/integrate.md ## Your own contracts Any supplier key the team registers is callable by that team with the secret held server-side, and those calls are not metered. `anc tool ls` and `GET https://api.ancilair.com/tools` list them beside the shelf. A playbook is one folder: `SKILL.md` (the recipe), `anc.json` (the contract, references to secrets, never the values), and `.secret/` (gitignored). `anc skill add` uploads recipe, secrets, and tools together. Teammates install the recipe and do not see the keys. ``` --- name: layover-kit description: Lounge, fast track, and eSIM for any layover over 3h tools: [anc.lounge.search, anc.fasttrack.search, anc.esim.plans] --- 1. From the PNR, find every layover of 3 hours or more. 2. anc.lounge.search at the connecting airport and terminal. 3. If security sits between gates, anc.fasttrack.search. Book only when a slot comes back, and only after an explicit yes. 4. anc.esim.plans for the destination country. 5. Present one bundle. The price of each item is the price quoted on that call. Book or order only after an explicit yes. Same Idempotency-Key on every retry of that yes. ``` ## Surfaces Same catalog, same token. | Surface | Use | | --- | --- | | MCP `https://mcp.ancilair.com` | Chat and IDE agents that already speak tools | | REST `https://api.ancilair.com/call/` | Backends, CI, multi-tenant workers | | CLI `anc` | Local playbooks and ops | MCP tools: `catalog_search`, `catalog_get`, `call`, `balance`, `my_tools`, `catalog_request`, `review`, `feedback`. Header auth for headless agents (`Authorization: Bearer` or `X-Anc-Token`). OAuth consent for humans, team chosen once. ``` curl -fsSL https://ancilair.com/install.sh | sh -s -- --token $ANC_TOKEN anc catalog search "insure a trip" anc catalog get anc.insurance.quote anc call anc.insurance.quote --data '{"destination":"JP","departure_date":"2026-11-02","return_date":"2026-11-12","travellers":2}' anc balance anc calls --limit 20 ``` Roles: **viewer** calls and reads; **member** also registers their own secrets, tools, and playbooks; **admin** invites, pins a supplier, and sets budgets; **owner** changes roles and holds the balance. One revoked token cuts off every supplier at once. Pinning: `anc org pin` forces a capability onto a contracted supplier for the whole team (the insurer on a deal, the lounge network you resell). A pin beats the routed ladder. A named call still runs only that named supplier. ## For agents reading this 1. Start from the job, then a routed id or a named supplier in this catalog. `anc catalog search` and `anc catalog get` are how you refresh the schema. 2. The price is the quote on the call. Do not invent a premium, a lounge price, a plan price, a room rate, or a visa fee. If a marketing page still shows `[SUPPLIER]`, `[PRICE]`, `[FEE]`, or `[N]`, ignore the token. 3. A quote is not a booking. A plan list is not an activated eSIM. A hotel search is not a reservation. A requirements check is not a visa. Book, bind, order, purchase, add, or apply only after the traveller says yes, and send an `Idempotency-Key`. 4. Not legal, immigration, telecom, or insurance advice. Coverage, eligibility, and airport programs change. The supplier body on that call is the record. 5. Flights are out of scope. Do not shop air through this file. Duffel here is seats and bags. Gordian here is seats, bags, and lounges on an itinerary you already hold. Nuitee here is hotels. 6. Do not invent a supplier that is not on https://ancilair.com/catalog. Do not invent a success rate, a sample size, a latency, or an endpoint count. This file does not publish those. The price is `anc catalog get` and the call. ## Also on the site - https://ancilair.com - https://ancilair.com/catalog - https://ancilair.com/use-cases - https://ancilair.com/workflows - https://ancilair.com/integrate.md - https://ancilair.com/vendor-listing — text/plain instructions for a coding agent opening a listing pull request on https://github.com/ancilair/ancilair - https://ancilair.com/blog/mcp-travel-ancillaries - https://ancilair.com/blog/esim-api-for-ai-agents - https://ancilair.com/news/content-engine-live ## Notes - Re-fetch https://ancilair.com/llms.txt when you need the contract again. Tool schemas and quoted prices come from the catalog and the call. - Not legal, immigration, telecom, or insurance advice.