Developers
Build on Miles
Three ways in: the catalog, the tools, or Miles itself. What separates them is how much of Miles you get, and who supplies the reasoning.
Full reference, per section: Docs.
Catalog
- Endpoint
- https://api.askmiles.ai/v1
- What you get
- Card, transfer-partner and valuation JSON — free, keyless, and read-only.
- Whose account
- No account.
- Reasoning
- None — data only
Tools
- Endpoint
- https://mcp.askmiles.ai/mcp
- What you get
- 47 tools your agent calls against a member's wallet.
- Whose account
- Your user's Miles account.
- Reasoning
- You supply the reasoning
Chat
- Endpoint
- https://askmiles.ai/v1
- What you get
- Miles itself, in one call. Ask the question; get Miles' answer.
- Whose account
- Your user's Miles account.
- Reasoning
- Miles supplies the reasoning
Catalog
The public catalog API
Free, keyless, and read-only: credit card, transfer partner, and point valuation data. It isn’t the full catalog the site runs on: reward multipliers, transfer ratios, and detailed benefit amounts stay out of the free schema. See What’s not here.
curl "https://api.askmiles.ai/v1/public/credit-cards?issuer=Chase&limit=5"- Base URL
- https://api.askmiles.ai/v1
- Authentication
- None. No key, no signup, no header required.
- Rate limit
- None published today; nothing is enforced in the worker. That could change without notice; don’t build against a ceiling that isn’t documented here.
- Freshness
- Cached per data center and per isolate for 5 minutes. Query parameters don’t bust the cache: a change you just made in the dataset can take up to 5 minutes to show up here. That’s expected, not a bug.
- Card coverage
- Open cards only: 185 of 207 tracked. Discontinued, product-change-only, and closed cards are dropped before this API ever sees them; there’s no parameter to include them.
- CORS
- Open to every origin (
Access-Control-Allow-Origin: *), so you can call it straight from a browser. - What’s not here
- Reward multipliers, welcome-offer amounts, ongoing-value estimates, and application links are account-level data Miles computes per person. Transfer ratios, bonus sizes and expiry dates, and which transfer path is worth taking are the dataset’s own judgment. This API returns what exists: catalog data, the same for every caller.
Catalog endpoints
Every route: cards, transfer partners, valuations, and their export forms, each with its parameters, a curl command, and a real response. See Catalog endpoints.
Catalog errors
Every error is JSON, with the status code for a missing card, a malformed body, or an unavailable dataset. See Catalog errors.
The catalog as an MCP server
The same catalog, reachable by an AI agent without writing a client: five keyless, read-only tools, unrelated to the account-scoped tools below. See MCP overview.
claude mcp add --transport http miles-catalog https://api.askmiles.ai/mcpTools
47 tools, inside your agent
Your agent calls Miles’ tools against your user’s own wallet: their cards, their valuations, their balances. Miles returns data and arithmetic; your model does the reasoning, on your tokens. If you want to connect Miles to an AI you already use rather than build on it, start at Connect.
The URL, scopes, Membership gating and framing resource are on MCP overview; the ceilings and the refusal payloads are on Quotas and refusals; every tool, grouped by domain, is on MCP tools.
- Base URL
- https://mcp.askmiles.ai/mcp
Chat
Miles itself, in one call
An OpenAI-compatible endpoint. Point a server-side OpenAI client at it and ask a card or points question the way a person would. What comes back is the answer Miles would give on the site (same tools, same citations, same caveats) instead of the ingredients for one. Two credentials reach it: a personal API key you mint in Settings and paste like any other, or an OAuth access token, which expires hourly and has to be refreshed.
curl https://askmiles.ai/v1/chat/completions \
-H "Authorization: Bearer $MILES_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "miles", "messages": [{"role": "user", "content": "Which card should I use at Costco?"}]}'from openai import OpenAI
client = OpenAI(base_url="https://askmiles.ai/v1", api_key=MILES_API_KEY)
response = client.chat.completions.create(
model="miles",
messages=[{"role": "user", "content": "Which card should I use at Costco?"}],
)
print(response.choices[0].message.content)- Base URL
- https://askmiles.ai/v1
- Authentication
- A bearer token, either kind. For your own Miles account, a personal API key; for someone else’s, an OAuth access token with scope
miles:chat. Either way the credential belongs to a Miles account, not to you. - Reasoning
- Miles supplies the reasoning.
The model id, statelessness, and what is not supported are on Chat API overview; a full request and a streaming call are on Requests and streaming; the ceilings and every header are on Rate limits; every status and cause is on Errors. Minting a personal key is on Personal API key.
Personal agents
The endpoint above comes packaged as a skill a personal agent (Claude Code, OpenClaw, anything skill-shaped) can install. Paste this to install it, and see Skills for what it teaches an agent and the OpenClaw install path.
Fetch https://askmiles.ai/skills/ask-miles.md and install it as a skill named ask-miles. Then tell me what one-time authorization step I need to complete.More
Full data, on your own account
Catalog data is the same for every caller. Tools and Chat, both documented above, need your user’s own Miles account: that’s where reward multipliers, ongoing-value estimates, and recommendations against a real wallet live. If you just want those answers yourself, use askmiles.ai directly, or connect Miles to the AI you already use.