Scopes
Scopes declare what a Brevo user is consenting your app to do on their behalf. You include them in the authorization request, the user sees them on the consent screen, and they’re embedded in the issued access token.
Naming convention
resource— the API area (e.g.contacts,crm,webhooks)sub-resource— optional, used to split large areas (e.g.transactional.email,campaigns.sms)action— eitherread(GET access) orwrite(create/update/delete access)
:write does not imply :read. If your app needs to both read and modify a resource — for example, list contacts before updating them — request both scopes.
Scope catalog
Each scope’s name, what it grants, and the API paths it authorizes. Paths are prefixes — /contacts covers every endpoint under /contacts/.... :read authorizes GET requests on those paths; :write authorizes POST, PUT, PATCH and DELETE on the same paths.
Scopes are grouped by category — the same grouping returned by brevo app available-scopes. Use the filter to find a scope by name, description or endpoint.
account:readRead account info, senders and inbound feeds.account:writeModify senders, sending domains and inbound feeds.organization:readRead organization-level settings and members.organization:writeModify organization-level settings and members.webhooks:readList webhook subscriptions.webhooks:writeCreate, modify or delete webhook subscriptions.campaigns.email:readRead email campaigns and their statistics.campaigns.email:writeCreate, modify, send and delete email campaigns.campaigns.sms:readRead SMS campaigns and their statistics.campaigns.sms:writeCreate, modify, send and delete SMS campaigns.campaigns.whatsapp:readRead WhatsApp campaigns and their statistics.campaigns.whatsapp:writeCreate, modify, send and delete WhatsApp campaigns.contacts:readRead contacts, lists, segments, attributes and folders.contacts:writeCreate, modify or delete contacts, lists, segments, attributes and folders.crm:readRead companies, deals, tasks, notes and pipelines.crm:writeCreate, modify or delete companies, deals, tasks, notes and pipelines.conversations:readRead live chat conversations.conversations:writeSend messages and manage conversations.objects:readRead custom objects.objects:writeCreate, modify or delete custom objects.ecommerce:readRead products, orders and categories.ecommerce:writeCreate, modify or delete products, orders and categories.events:readRead tracked events.events:writeTrack new events.loyalty:readRead loyalty programs, balances, tiers and rewards.loyalty:writeCreate, modify or delete loyalty programs, balances, tiers and rewards.transactional.email:readRead transactional email statistics, templates and blocked addresses.transactional.email:writeSend transactional emails and manage templates and blocklists.transactional.sms:readRead transactional SMS statistics and templates.transactional.sms:writeSend transactional SMS and manage templates.transactional.whatsapp:readRead transactional WhatsApp statistics.transactional.whatsapp:writeSend transactional WhatsApp messages.Prefer the terminal? Run brevo app available-scopes --web to browse this same catalog in a local page, or brevo app available-scopes --json for the raw list.
Requesting scopes
Scopes go in the scope query parameter of the authorization request, space-separated and URL-encoded.
Decoded, scope=contacts:read contacts:write transactional.email:write.
The user sees a consent screen listing the human-readable name and description of each requested scope before authorizing.
Inspecting scopes in a token
Every issued access token is a signed JWT and includes a scope claim — a space-separated string of the scopes granted to that specific token. Decode the JWT or call the introspection endpoint to verify what a token can do.
Response (RFC 7662):
Errors
The error_description field carries the specific reason — for example, requested scope exceeds scopes allowed for this client.
Discovering scopes programmatically
The OAuth server publishes standard discovery metadata at:
The scopes_supported field is sourced live from the catalog — this is the same list you get from brevo app available-scopes.
Choosing scopes for your app
A few common combinations:
Start with the minimum your app needs. You can widen scopes later by editing auth.scopes in app-config.json and running brevo app upload — see the CLI reference. For an approved public app, a scope change requires a new review: run brevo app submit after the upload. See Private and public apps.