CLI

Run any Wabi op from a terminal, a script or CI.

The CLI is @meterapp/wabi on npm. It needs Node 20 or later and no install: run it with npx. It reads the op catalog from the API at runtime, so every op the API has is a command, including ones added after your version was published.

npx @meterapp/wabi --help

Authentication

Run npx @meterapp/wabi login. It prints a short code and opens https://getwabi.dev/activate; sign in, check the code matches and approve, and the CLI receives an organization API key. Over SSH or from an agent, open the printed URL on any device. In CI and scripts, set WABI_API_KEY instead. WABI_HOST overrides the API origin (default https://getwabi.dev).

Commands

CommandWhat it does
login [--no-browser]Sign in with your browser: approve the code it shows and the CLI saves a new organization API key named for your machine.
login --key wabi_…Save an existing API key instead (scripts, machines without a browser).
logoutForget the saved key. Revoke it in Integrations to stop it working.
whoamiThe organization, your role and the key in use.
opsList every op, read live from the API.
<op> [--field value…] [--json '{…}' | @file | -]Run any op. Flags map to the op's input fields; --json passes the whole input inline, from a file or from stdin.
pricing [--json]Every plan, price and allowance. Works without signing in.
accountYour plan, usage against every limit and what the next plan adds.
upgrade --plan <plan> [--yearly]A Stripe Checkout link for a person to pay. Nothing is charged by the CLI.
billing portalThe Stripe portal for invoices, the card and cancelling.
feedback …The feedback board: list, request, report (--last attaches the last failed call), upvote, comment.
mcpA stdio MCP bridge to the hosted server, for MCP hosts without HTTP support.

Examples

# The sandbox: your simulated number and its test customersnpx @meterapp/wabi get_sandbox
# Make a test customer write innpx @meterapp/wabi simulate_inbound_message --text "Hi, where is my order?"
# A scoped key for your backendnpx @meterapp/wabi create_api_key --json '{"name":"backend","scopes":["messages:write","templates:read"]}'
# Prices and a checkout link for a personnpx @meterapp/wabi pricingnpx @meterapp/wabi upgrade --plan growth --yearly

Output is JSON: pretty in a terminal, one line when piped, so it composes with jq. A failed call exits non-zero and prints the problem's code and request_id (see Errors).

In CI

.github/workflows/notify.yml
- run: npx @meterapp/wabi get_account  env:    WABI_API_KEY: ${{ secrets.WABI_API_KEY }}