BitGo API for Custody Agents
A custody assistant can list wallets and show what is waiting for approval. Sending value is a different action, and a chat approval is not a signature on the wallet.
Key takeaways
- -In this article we explore the BitGo API for a custody agent, and how approval already belongs in the product before an assistant is added.
- -To understand how custody approval works: more than one party is expected to agree before value moves. That agreement happens at BitGo. It is not a sentence in the chat.
- -A Swytchcode hold in Slack or Telegram is your checkpoint before the request is sent. It does not count as a signature on the wallet. It is on Business and Enterprise, and it fails closed after 48 hours.
- -Start with a read, such as listing wallets. A read does not include permission to send.
- -Connect BitGo with swy get bitgo and swy auth connect bitgo. The credential stays out of the chat.
You want an assistant that can tell you which wallet is which, what is pending, and whether something is still waiting on a person. That is a good custody assistant. It does not need permission to send.
BitGo is built for custody. Moving value is already meant to wait for more than one approval. People sometimes add an assistant and then treat a "yes" in the same chat as that second approval. It is not. The person who asked is still one person. The wallet's own policy is a different system from the chat.
This article connects BitGo so the assistant can read first. The next section defines Swytchcode. After that are five custody agents you can start by pasting a prompt.
BitGo in the directory is here. A transfer that cannot be rewound by retrying is in this article: Paxos API and Digital-Asset Infrastructure.
What Swytchcode is
Swytchcode is a production runtime for AI agents. The model decides which API call to make. Swytchcode runs that call. It does not become a signer on a BitGo wallet.
On every call it does eight checks:
- Allow list. Only an action you added with
swy add methodcan run. - Schema check. Inputs are checked against that action before the request is sent.
- Policy. Rules in
policies.jsoncan allow, deny, or hold a call, and can read the arguments, such as an amount. - Credentials. The BitGo credential is added when the call runs. It is not put in the chat. You store it with
swy auth connect. There is no project env file for it. - Execution. The request goes from your machine straight to BitGo.
- Retry. Swytchcode backs off on rate limits. A create or an update is retried only when an idempotency key is already set.
- Response check. A success status whose body says the action failed is not treated as success.
- Audit. The call and the policy decision are written to a local log.
Test or live mode is chosen once with swy init and stored in .swytchcode/tooling.json. On Business and Enterprise, a held call can go to Slack or Telegram. If nobody approves within 48 hours, it never runs. That hold is not a BitGo signature.
BitGo agents you can build
Paste one prompt into Claude Code, Cursor, or Codex. None of them sends funds.
1. Wallet list agent
Lists wallets and their labels.
Set up https://www.swytchcode.com/skills.md and build a BitGo wallet-list agent. List wallets and labels. Do not send funds. Do not change wallet policy or approvers.2. Pending-approval agent
Shows transfers that are still waiting on a person inside BitGo.
Set up https://www.swytchcode.com/skills.md and build a BitGo pending-approval agent. List transfers or requests that are waiting for approval. Do not approve them. Do not send funds.3. Balance agent
Reads balances. It does not move them.
Set up https://www.swytchcode.com/skills.md and build a BitGo balance agent. For the wallet I name, show the balance from a read action. Use the action name swy discover prints. Do not withdraw or send.4. Policy explainer
Describes who must approve a send, from a read of the wallet setup. It does not change that setup.
Set up https://www.swytchcode.com/skills.md and build a BitGo policy agent. Explain which approvals a send on the wallet I name still needs. Do not change policy. Do not send.5. Transfer status agent
Looks up one transfer after a timeout, instead of creating another.
Set up https://www.swytchcode.com/skills.md and build a BitGo transfer-status agent. When I give you a transfer id, look up its status. If a request timed out, look it up. Do not create a second send.BitGo custody approval versus a Slack hold
BitGo's own flow is about the wallet. Depending on how the wallet was set up, a send can wait for more than one key or more than one person inside BitGo. That policy is BitGo's. Swytchcode does not become one of those signers because a message was posted to Slack.
Swytchcode can still pause your request before it is sent. On the Business and Enterprise plans, that pause goes to Slack or Telegram. If nobody approves within 48 hours, the request never runs. Free and Pro can allow or deny an action. They do not include the pause. Details are in this article: human approval for AI agents.
Read that pause as your checkpoint, the way you would for a bank payment. It happens before your system asks BitGo. It does not satisfy BitGo's own policy. If BitGo still wants its approvers, you still need them.
A timeout has the same shape as any other send. You may not have heard the answer, and the request may already be in flight. Look it up. Do not create a second send to be sure. Swytchcode retries a create only when an idempotency key is already set. If you do not know that this BitGo action stores that key, do not retry the send. The plain explanation is Idempotency Explained.
What to read before you add a send
Turn on a list or a status read. "Which wallets do we have?" and "what is waiting?" answer the questions a desk asks.
Leave send, whitelist changes, and policy changes off. Changing who is allowed to approve is a bigger step than one transfer. Add a send only when you can name that action, name the amount rule, and name the person who approves it on your side, knowing BitGo may still ask for its own approval after that.
Test mode is set once with swy init --mode=sandbox and saved in .swytchcode/tooling.json. Connect a test credential until a wallet list looks right. The assistant cannot switch the project to live in the chat.
Follow these steps to connect BitGo
swy is the short name for the Swytchcode program.
1. Follow this step to install the CLI
If you use Node.js:
npm install -g swytchcodeOn Windows PowerShell:
irm https://cli.swytchcode.com/install.ps1 | iexOn macOS or Linux:
curl -fsSL https://cli.swytchcode.com/install.sh | shThen swy --version. See the CLI quickstart.
2. Follow this step to sign in
swy loginThis is the Swytchcode account, not the BitGo key. See the authentication docs.
3. Follow this step to start in test mode
swy init --editor=claude --mode=sandboxUse cursor or codex if needed. See Set up a project.
4. Follow this step to download BitGo
swy get bitgoThis does not enable every action.
5. Follow this step to find a wallet list
swy discover "list wallets" --project bitgoUse the name it prints. Do not copy a method name from this article or from memory.
6. Follow this step to read the fields
swy info <id from discover>Replace <id from discover> with the name from step 5. Run it after step 4.
7. Follow this step to turn that read on
swy add method <id from discover>Do not add a send in the same sitting.
8. Follow this step to store the BitGo credential
swy auth connect bitgoIt stays on your machine, outside the chat. Explore this article: credential brokering.
FAQ
Can the assistant send from a BitGo wallet?
Only if you turned that action on, your own rule passed, any person you require has approved, and BitGo's own policy is satisfied. Listing wallets does not include permission to send.
Does a Slack approval replace multi-party custody approval?
No. Slack or Telegram is your hold before the request is sent. It is available on Business and Enterprise. BitGo still applies the wallet's own approvals. One does not count as the other.
What if the send might have happened twice?
Look up the first request. A new send is a new request. A shared reference helps only when that action stores it.
Where does the BitGo key live?
Outside the chat and outside the project files, stored by swy auth connect bitgo.
Read next
- Explore this article on a person approving the call: human approval for AI agents.
- Explore this article on transfers you should look up instead of repeating: Paxos API and Digital-Asset Infrastructure.
List wallets before anyone talks about sending
Start at step 1 if the CLI is not installed. Ask for the wallet list in a test account. Do not ask for a send.
You can give Claude Code, Cursor, or Codex skills.md and ask it to follow these steps in test mode.
If you cannot tell a read from a send, ask before you add the action. Discord is the quick place. The contact form is better if the wallet details are sensitive.
More content
How to Log Every API Call an AI Agent Makes
Log the call where it is sent, not where it is described. Record the operation, the actor, the idempotency key, the policy decision and the outcome. Never record the credential. If the agent writes its own log, the calls that were blocked quietly disappear.
How to Connect GitHub to an AI Agent (2026)
Most of what you want an agent to do on GitHub needs no push access at all. Working that out first is the difference between a useful teammate and a token that can rewrite your main branch.
Composio Pricing Compared with Nango, Arcade, Pipedream, and Swytchcode
Composio is free for 100,000 tool calls a month, then $29. Nango is $50 pay-as-you-go. Arcade Team is $25 plus a cent a call. Pipedream Startup is $99 billed annually. Swytchcode is $149 for a million. The headline prices are the least useful part, so here is the arithmetic.
