| title | CLI |
|---|---|
| description | Install the official AnyAPI CLI, manage auth, discover APIs, and run SKUs from your terminal. |
The official AnyAPI CLI is the npm package anyapi-cli with the anyapi binary.
Use it to install agent skills, register MCP, mint or store a key, discover APIs, and
run SKUs from a terminal.
Run the one-line setup:
npx -y anyapi-cli@latest initanyapi init installs the AnyAPI agent skills into detected agents, offers MCP
registration, and mints a free trial key if no key is available.
For a global binary:
npm i -g anyapi-cli
anyapi initRepo: github.com/getanyapi-com/cli
| Command | What it does |
|---|---|
anyapi signup [--label <label>] [--show-key] |
Mints a free trial key, saves it locally, and prints trial guidance. The secret is hidden unless you pass --show-key. |
anyapi connect |
Starts an OAuth flow to connect a wallet and upgrade past the trial (anyapi-cli >= 0.3.0). |
anyapi login |
Signs in to an AnyAPI account with the cross-device OAuth device flow. It does not bind a localhost callback. |
anyapi login --api-key aa_live_... |
Stores an existing dashboard key locally without starting OAuth. |
anyapi search [query] [--category <category>] [--platform <platform>] |
Searches the public catalog and prints matching SKUs, names, and USD price terms. The query is optional when you pass --category or --platform (anyapi-cli >= 0.9.0). |
anyapi list [--category <category>] |
Lists catalog APIs, optionally filtered by category. |
anyapi describe <sku> |
Prints the authenticated API definition, including schemas and USD pricing. |
anyapi run <sku> --input '<json>' [-i file] [--no-wait] [--fields a,b] [--max-items N] [--summary] [-o path] [--json] |
Runs an API with JSON input and waits for durable completion by default. |
anyapi requests get <request-id> |
Gets the current state of a durable Request. |
anyapi requests wait <request-id> |
Waits for a durable Request and prints its result. |
anyapi balance |
Prints the remaining USD balance for the active key. |
anyapi report-bug <summary> [--details <text>] [--sku <sku>] [--request-id <id>] [--contact <email>] |
Reports something broken: a wrong or empty result, a misleading error, a price that looks off. Free, never charged (anyapi-cli >= 0.8.0). |
anyapi feedback <summary> [--details <text>] [--sku <sku>] [--request-id <id>] [--contact <email>] |
Sends feedback that is not a defect: a missing API, a missing field, confusing docs. Free, never charged (anyapi-cli >= 0.8.0). |
anyapi init [--all] [--yes] |
Installs bundled agent skills, shows or applies MCP setup snippets, and mints a free trial key if none is stored. |
anyapi setup skills |
Installs only the bundled skills. |
anyapi search uses the dedicated ranked catalog search, which takes any
non-empty combination of a query, --category, and --platform: naming only a
scope is a complete search, and ranking falls back from semantic to keyword.
anyapi list only browses the catalog and accepts an optional category. Both commands display the
customer-safe USD offer returned by discovery; they never expose an internal
accounting unit or upstream provider.
Static discovery pricing is nested. pricing.from is either a flat offer
(model, unit: "request", maxUsd, maxPer1kUsd) or a linear offer (model,
unit, baseUsd, perUnitUsd, maxUsd, maxPer1kUsd). pricing.failoverMaxUsd
is the greatest fallback ceiling, published beside its per-1,000-request twin
pricing.failoverMaxPer1kUsd. The optional failover boolean reports whether AnyAPI
currently has an alternate route. Use the displayed unit when estimating a linear
call, or run anyapi describe <sku> to inspect the complete offer before execution.
Every maximum arrives in two denominations: maxUsd for one request and
maxPer1kUsd for 1,000 of them. Per 1,000 requests is the denomination AnyAPI
quotes customers in, because most of the catalog costs a fraction of a cent per call
and per-request figures cannot be compared by eye. Read the published per-1k field
instead of multiplying maxUsd, which drifts in floating point (0.0966 * 1000 is
96.60000000000001 in most languages). baseUsd and perUnitUsd have no per-1k
twin, because they are charged per billable item inside one call, and the costUsd of
a completed run and the balance from anyapi balance stay per request.
The gateway owns input validation, provider normalization, pricing, lane order, routing, failover, health semantics, and billing. The CLI is a thin transport and presentation adapter. It projects the discovery fields it displays, tolerates safe new fields, and preserves input and output schemas as opaque JSON.
Treat pricing.from, pricing.failoverMaxUsd, failover, and lane order as
gateway-published facts. The CLI does not derive them from one another or repair
their relationships.
The CLI resolves auth in this order:
--api-keyflagANYAPI_API_KEYenvironment variable~/.anyapi/config.json- Interactive self-signup for commands that require auth
Application code should read ANYAPI_API_KEY. Do not make production app code depend
on ~/.anyapi/config.json.
Run anyapi login to use account-backed OAuth immediately:
anyapi loginThe CLI prints a verification URL and user code, then opens the complete URL when
possible. You can approve from any browser or device while the CLI polls at the
server-provided interval. It saves the access token, refresh token, expiry, and scope
to ~/.anyapi/config.json after approval, then refreshes the account session
automatically before the access token expires.
This device flow does not bind a localhost callback. It is separate from
anyapi connect, which upgrades a saved free trial and preserves its trial receipt.
To use an existing dashboard key without OAuth, store it locally:
anyapi login --api-key aa_live_...Use anyapi signup to call the same self-signup endpoint documented in
Let your agent onboard itself:
npx -y anyapi-cli@latest signup --label my-agentThis mints a free trial key, stores it in ~/.anyapi/config.json, and prints trial
guidance. It does not print the secret key unless you pass --show-key. The trial key
carries a budget of about $0.05, creates no account, and self-expires in 7 days.
By default, anyapi run writes JSON to:
.anyapi/<sku>-<timestamp>.json
The command prints the output path, costUsd, and item count. Use --json to print the
response JSON to stdout instead, or -o path to choose the output file.
The gateway normalizes the successful response. The CLI preserves the output object
as customer data instead of recursively deleting or rewriting its keys.
For a long-running API, the CLI waits and polls the returned Request by default. Pass --no-wait
to return its Request ID immediately. If you press Ctrl-C after acceptance, the CLI prints the
anyapi requests wait <request-id> command you can use to resume. Automatic idempotency uses a
fresh random key for each logical CLI invocation.
Use these flags when a result would be too large for an agent context window:
| Flag | Effect |
|---|---|
--fields a,b |
Keeps only selected keys on each result item. |
--max-items N |
Caps returned rows. |
--summary |
Returns a structural outline instead of the bulk data. |
These flags trim only what is returned to you. They do not change the amount charged.
costUsd reflects the full result the API produced.
A free trial key is capped at about $0.05 of requests. When the trial budget is spent, a
run returns 402 trial_cap_reached. To keep going, connect a wallet (anyapi-cli >= 0.3.0):
anyapi connectThis starts an OAuth flow with a localhost callback and prints a single consent URL. Hand that URL to a human: they open it, sign in at the dashboard, set a spend limit, and approve. The CLI then holds an OAuth access token and the agent keeps working on the same session.
If a human already has a funded account, they can create a full, non-expiring key at the
dashboard and store it with
anyapi login --api-key aa_live_... instead.