Coinbase
BUSINESS · COMMERCE & FINANCE
Wallets, balances, and transaction history in the Coinbase account they connected.
Connecting Coinbase in practice
10,000 requests per hour per API key or per OAuth-authorised user is generous; the friction is elsewhere. Scopes are declared when the app is registered and Coinbase warns they are "difficult to change later" because adding one forces every existing user to re-authorize, and sending above a user’s 2FA limit fails with a 400 two_factor_required that retrying never clears.
Scopes that draw scrutiny
wallet:transactions:send"Send bitcoin or ethereum" — the scope that moves other people’s money out of the account, and the one that runs into the two_factor_required limit.wallet:withdrawals:create"Create a new withdrawal", so it reaches fiat rails rather than only on-chain balances.wallet:payment-methods:delete"Remove existing payment methods" — destructive against the user’s linked bank accounts, and not implied by reading them.wallet:user:emailReads the current user’s email address as a scope of its own, separate from wallet:user:read, which is the join key most integrations want and most reviewers ask about.offline_accessThe only way to get a refresh token, which turns a session into standing access that lasts 1.5 years.
Rate limits
- 10,000 requests per hour per API key, or per OAuth-authenticated Coinbase user.
- For OAuth apps the allowance scales with the number of unique users who have granted access, each allotted 10,000 per hour.
- Exceeding it returns 429 with {"id":"rate_limit_exceeded","message":"Too many requests"}; there is also a separate resource_exhausted 429.
- Pagination is cursor based: limit accepts 0–100 with a default of 25, ordered desc unless order=asc.
Worth knowing
- The consent screen carries an account-access dropdown alongside the scopes, and the two multiply: account=all with wallet:buys:create can buy on every wallet the user has, while the same scope with a single account cannot. The app does not choose which.
- Refresh tokens expire after 1.5 years, so a long-lived integration has a hard re-consent date rather than an indefinite grant.
- Legacy API keys stopped working on 5 February 2025; CDP API keys are now required, so older integrations fail at authentication rather than at authorization.
- The pagination limit is advisory: "the response list might in some cases return less objects than specified by the limit parameter" because of permissions and access-level control, so a short page does not mean the walk is finished.
- Outbound notifications ceased on 17 February 2025 and Coinbase says to poll the Transactions API instead, which turns an event-driven design into a polling one.
Checked against Coinbase App rate limiting (2026-09-29), Coinbase App OAuth2 scopes (2026-09-29), Coinbase App error messages (2026-09-29), Coinbase App pagination (2026-09-29)
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
Often connected alongside
Put Coinbase behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.