The Pandascrow CLI is out. Install it from npm as pandascrow-cli, and you can create escrows, check balances, send transfers, issue invoices, watch your API logs and test your webhook endpoint without opening the dashboard or writing a line of code.
We built it for the jobs that don't need a whole integration. Checking why a payment failed. Releasing an escrow for a customer on a support call. Firing a test webhook at your laptop while you build. A script that pays out every Friday.
Install the Pandascrow CLI
npm install -g pandascrow-cli
pandascrow login
It needs Node.js 20.12 or newer. The CLI ships as one file with no runtime dependencies and starts in under 100 ms.
login asks for your API key from Dashboard → Developers, then your email and password so it can find your account ID. If your account uses a sign-in code, it asks for that too. Your password goes only to Pandascrow and is never saved. The key and account ID are stored in a config file that only your user can read.
Like our SDKs, the CLI starts in sandbox. Add --live when you mean it:
pandascrow login --live
pandascrow whoami # account, environment, key and webhook URL
pandascrow use live # make live the default
Run pandascrow on its own for a menu of common tasks.
Create and release escrows
escrow create walks you through each field, or you can pass everything as flags:
pandascrow escrow create --role seller --title "iPhone 15" --description "128GB, UK used" \
--amount 950000 --currency NGN --buyer-name "Tolu" --buyer-email tolu@example.com \
--metadata order_id=A-1001
Milestone escrows take one -m per stage, with a title, amount and due date:
pandascrow escrow create --type milestone --role buyer --title "Website" --description "Company site" \
--currency NGN --seller-email studio@example.com \
-m "Design:150000:2026-11-30" -m "Build:350000:2026-12-15"
Then manage it from the same place:
pandascrow escrow list --status pending
pandascrow escrow show 42
pandascrow escrow release 42 --otp 123456
pandascrow escrow payment-link 42 # fresh link when the old one expired
pandascrow escrow dispute open 42 --reason "Item not as described"
Move money, with a check first
Wallets, bank transfers and payouts work the same way:
pandascrow wallet balance
pandascrow bank verify 0123456789 058 # account name lookup
pandascrow bank transfer -a 25000 --account-number 0123456789 --bank-code 058 --narration "Refund A-1001"
pandascrow payouts create -a 50000 -c NGN
ImportantAny command that moves money shows you what will happen and asks before it does it. In scripts, pass
--yesto skip the question.
You can also issue invoices, create payment links, open virtual accounts and run Nigerian KYC lookups (BVN, NIN, CAC, NUBAN and more). The README on GitHub lists every command.
Test webhooks on your laptop
This is the part we use most. Webhooks are hard to test because Pandascrow can't reach localhost, and you don't want to fund a real escrow just to see your handler run.
webhook trigger sends a sample event straight to your local server:
pandascrow webhook trigger escrow.paid --url http://localhost:3000/webhooks/pandascrow
The sample is signed with your secret key exactly the way Pandascrow signs real events: HMAC-SHA256 of the raw body, in the X-Pandascrow-Signature header. So you're testing your signature check too, not just your event handling.
To see what your sandbox would send, start a local receiver and forward events to your app:
pandascrow webhook listen --forward http://localhost:3000/webhooks/pandascrow
It listens on port 4242, verifies each signature and prints the event. Pair it with a fake bank transfer into a sandbox virtual account to test the whole payment flow:
pandascrow va simulate 9912345678 -a 5000 --webhook-url http://localhost:4242
Watch your API logs live
When a request fails in production, you want the request and the response, not a guess. app logs shows recent calls to the API from your account:
pandascrow app logs --status failed -v # with request and response bodies
pandascrow app logs --follow # stream requests as they happen
pandascrow app usage --range week # chart of calls, successes and failures
You can also rotate keys from here. app roll-keys switches the CLI to your new public key for you.
Script it
Every command takes --json and prints the API's data object, so it pipes into jq:
pandascrow escrow list --status pending --json | jq '.[].escrow._id'
pandascrow wallet balance --json | jq -r '.balances.NGN.balance'
On a server or in CI, skip the interactive login and use environment variables instead:
export PANDASCROW_API_KEY=pk_live_...
export PANDASCROW_UUID=your-account-id
Without a terminal, the CLI never stops to prompt. A missing value fails straight away with the flag you need to pass, and exit codes tell your script what happened: 0 for success, 1 when Pandascrow refused the request, 2 for bad input, 3 for an auth problem and 4 for network errors.
For an endpoint without its own command, pandascrow api calls it with your key and account ID already added:
pandascrow api GET /escrow/single escrow_id=4
CLI or SDK?
Use the Pandascrow CLI for one-off tasks, support work, local testing and shell scripts. When escrow is part of your product's code, use the Node.js SDK or the PHP SDK. They share the same API and the same webhook signatures, so you can test with the CLI and ship with the SDK.
Get started
- Create a free account and get your sandbox key from the dashboard.
- Run
npm install -g pandascrow-cliand thenpandascrow login. - Try
pandascrow escrow create, or browse the quick start on our developer page and the API reference.
The CLI is open source under the MIT licence on GitHub. Found a bug or want a command we don't have yet? Open an issue there or email hi@pandascrow.io.
New to escrow? See how Pandascrow escrow protects both sides of a deal.
