A Bun-powered CLI for the Wise Platform API.
It compiles to a single native binary and supports the main personal-token workflows
for profiles, balances, recipients, quotes, and transfers, while wise raw exposes
the rest of the OpenAPI surface.
- Bun 1.0+
- A Wise Personal API Token from Wise → Settings → Connect and manage apps → API tokens
bun install
bun run build
# Interactive setup; validates the token with GET /me
wise auth setup
# Or put WISE_API_TOKEN in .env.local and validate it
wise auth status
wise profilesThe project-local .env.local is ignored by Git. wise auth setup writes the
token there with mode 0600. WISE_API_TOKEN and WISE_BASE_URL environment
variables override the file. Production is the default; use --sandbox or set
WISE_BASE_URL=https://api.wise-sandbox.com/2026Q3 for sandbox requests.
wise me
wise profiles [get <profileId>]
wise balances --profile <profileId> --types STANDARD,SAVINGS
wise balances get <balanceId> --profile <profileId>
wise balances create --profile <profileId> --currency EUR --type STANDARD
wise balances delete <balanceId> --profile <profileId>
wise recipients [--profile <profileId>] [--all]
wise recipients get <accountId>
wise recipients create --data '{...}'
wise recipients delete <accountId>
wise recipients requirements <quoteId>
wise recipients compatibility <accountId> <quoteId>
wise quotes create --profile <profileId> --data '{...}'
wise quotes create --unauthenticated --data '{...}'
wise quotes get <quoteId> --profile <profileId>
wise quotes update <quoteId> --profile <profileId> --data '{...}'
wise transfers [--all] [--profile <profileId>]
wise transfers get <transferId>
wise transfers create --data '{...}'
wise transfers cancel <transferId>
wise transfers requirements --data '{...}'
wise transactions --profile <profileId> --balance <balanceId> --currency USD --from 2026-07-01 --to 2026-07-31
wise currencies
wise rates --source EUR --target USD
Writes accept --data JSON so that conditional Wise fields are not hidden by
the CLI. Balance creation generates X-idempotence-uuid when omitted. Transfer
creation generates customerTransactionId when omitted and preserves it for
safe retries within the request.
Use raw access for any path in the supplied Wise OpenAPI document:
wise raw GET /me
wise raw GET /accounts --param profileId=<profileId>
wise raw POST /quotes --data '{"sourceCurrency":"GBP","targetCurrency":"USD","sourceAmount":100}'
wise raw PATCH /profiles/<profileId>/quotes/<quote-id> \
--content-type application/merge-patch+json \
--data '{"targetAccount":12345}'
wise raw GET /transfers/<id>/receipt.pdf --output receipt.pdf
wise raw GET /some/path --no-authRaw requests support --param, --header, --data, --data-file,
--content-type, --output, and --no-auth.
wise config set profileId <profileId>
wise config set outputFormat json
wise config set cacheTtl 300
wise config set environment sandbox
wise config show
wise cache stats
wise cache clearConfiguration and cached JSON responses live under ~/.wise-cli/. Read commands
cache for five minutes by default. Use --refresh to replace a cached response
or --no-cache to bypass and skip writing the cache.
bun run start -- --help
bun test
bun run buildThe live smoke checks intentionally use only GET /me and GET /profiles.
Mutating command tests use mocked requests and do not create Wise resources.
Never commit a Wise API token. Keep local credentials in the ignored .env.local
file or in environment variables. The Husky pre-commit hook runs lint-staged and
scans staged text for Wise token, bearer credential, and UUID-shaped secret
patterns.
Report bugs through the GitHub issue tracker. Report sensitive vulnerabilities privately as described in SECURITY.md.
MIT. See LICENSE.