Skip to main content
Scopes allow you to specify fine-grained access for your OAuth2 applications. Getting your scopes right is key to developing safe and trustworthy applications.

Overview

With OAuth2, scopes are set in the authorization URL and determine what API endpoints your application can access. All authenticated endpoints, except GET /user, require a specific scope. With OAuth2, scopes should be considered as grants—users can select which scopes they allow for your application. To see which scopes a user has granted, use the GET /user/auth endpoint.
Plan your scopes carefully before launch. Scopes are declared when you register your OAuth application and are difficult to change later. Adding new scopes after users have already authorized your app requires them to re-authorize, which can disrupt their user experience.
Only request scopes your application needs. Users more readily grant access to limited, clearly described scopes.

Naming pattern

Scopes follow the pattern service:resource:action. The main services are wallet and data.
ActionDescription
readList or read resources (e.g., listing transactions)
createCreate new resources (some have specific actions like send)
updateUpdate existing resources
deleteDelete resources

Account access

In addition to scopes, Coinbase App applications can request different levels of access to user’s wallets. This access is defined by a dropdown selection on the consent page when the user connects to your app. Account access consent screen Account access works together with scopes. For example, account=all combined with scope=wallet:buys:create allows your app to create buys on all of the user’s wallets, but won’t give access to sell on any of their accounts.

Specifying scopes

Scopes are specified by including a scope parameter in your OAuth2 authorization request. Multiple scopes should be separated with a comma:
https://login.coinbase.com/oauth2/auth?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_CALLBACK_URL&scope=wallet:accounts:read,wallet:transactions:read
If you need to obtain more permissions later, you can re-authenticate the user, prompting them to authorize additional scopes.

Supported scopes

Below are listed all the available scopes for both Coinbase App application and API keys. For more information to understand which permission is required for a specific API action/endpoint, follow our API reference which includes Permissions section under each endpoint.
ScopeDescription
wallet:accounts:readList user’s accounts and their balances
wallet:accounts:updateUpdate account (e.g. change name)
wallet:accounts:createCreate a new account (e.g. BTC wallet)
wallet:accounts:deleteDelete existing account
wallet:addresses:readList account’s bitcoin or ethereum addresses
wallet:addresses:createCreate new bitcoin or ethereum addresses for wallets
wallet:buys:readList account’s buys
wallet:buys:createBuy bitcoin or ethereum
wallet:deposits:readList account’s deposits
wallet:deposits:createCreate a new deposit
wallet:notifications:readList user’s notifications
wallet:payment-methods:readList user’s payment methods (e.g. bank accounts)
wallet:payment-methods:deleteRemove existing payment methods
wallet:payment-methods:limitsGet detailed limits for payment methods (useful for performing buys and sells). This permission is to be used together with wallet:payment-methods:read
wallet:sells:readList account’s sells
wallet:sells:createSell bitcoin or ethereum
wallet:trades:readList trades
wallet:trades:createCreate trades
wallet:transactions:readList account’s transactions
wallet:transactions:sendSend bitcoin or ethereum
wallet:transactions:requestRequest bitcoin or ethereum from a Coinbase user
wallet:transactions:transferTransfer funds between user’s two bitcoin or ethereum accounts
wallet:user:readList detailed user information (public information is available without this permission)
wallet:user:updateUpdate current user
wallet:user:emailRead current user’s email address
wallet:withdrawals:readList account’s withdrawals
wallet:withdrawals:createCreate a new withdrawal
offline_accessReturn a refresh token in response