Content

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.

IntegrationsOct 16, 2026

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:

  1. Allow list. Only an action you added with swy add method can run.
  2. Schema check. Inputs are checked against that action before the request is sent.
  3. Policy. Rules in policies.json can allow, deny, or hold a call, and can read the arguments, such as an amount.
  4. 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.
  5. Execution. The request goes from your machine straight to BitGo.
  6. Retry. Swytchcode backs off on rate limits. A create or an update is retried only when an idempotency key is already set.
  7. Response check. A success status whose body says the action failed is not treated as success.
  8. 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 swytchcode

On Windows PowerShell:

irm https://cli.swytchcode.com/install.ps1 | iex

On macOS or Linux:

curl -fsSL https://cli.swytchcode.com/install.sh | sh

Then swy --version. See the CLI quickstart.

2. Follow this step to sign in

swy login

This 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=sandbox

Use cursor or codex if needed. See Set up a project.

4. Follow this step to download BitGo

swy get bitgo

This does not enable every action.

5. Follow this step to find a wallet list

swy discover "list wallets" --project bitgo

Use 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 bitgo

It 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.

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