For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Help CenterAPI KeysStatusSign In
GuidesAPI ReferenceChangelog
GuidesAPI ReferenceChangelog
  • Getting started
    • Overview
    • Quickstart
    • Authentication
      • API key authentication
        • Overview
        • Quickstart
        • Integration guide
        • Scopes
        • CLI reference
      • IP security
    • Rate limits
  • Messaging API
    • Send transactional email
    • Send transactional SMS
    • Send transactional WhatsApp
  • Marketing Platform
    • Manage your contacts
    • Track website activity
    • Send WhatsApp campaigns
    • Weekly event exports
  • Webhooks
    • Getting started
    • Conversations webhooks
    • Payment webhooks
    • Marketing webhooks
    • Transactional webhooks
    • Loyalty webhooks
    • Batched webhooks
    • Secure webhook calls
    • Meetings and phone webhooks
    • Push notification webhooks
    • Sales CRM webhooks
  • Conversations
    • Getting started
    • Customize the chat widget
    • JavaScript API reference
    • REST API reference
    • Conversations webhooks
  • eCommerce
    • Activate eCommerce app
    • Manage product categories
    • Manage products
    • Manage orders
    • Coupon collections
    • eCommerce tracker events
  • Loyalty
    • Overview
    • Set up a program
    • Enroll members
    • Credit & debit points
    • Read member data
    • Best practices
  • Custom Objects
    • Custom objects management
  • Brevo tracker and events
    • Getting started
    • JavaScript implementation
    • REST implementation
    • Legacy tracker documentation
    • Events
  • Accounts and settings
    • Senders and domains
    • User activity logs
    • External feeds
    • Invited users
LogoLogo
Help CenterAPI KeysStatusSign In
On this page
  • Naming convention
  • Scope catalog
  • Messaging
  • Contacts & CRM
  • Account
  • Requesting scopes
  • Inspecting scopes in a token
  • Errors
  • Discovering scopes programmatically
  • Choosing scopes for your app
Getting startedAuthenticationOAuth 2.0

Scopes

Permissions your OAuth app requests from a Brevo user
Was this page helpful?
Previous

CLI reference

Complete reference for the Brevo CLI — install, authenticate, and manage OAuth apps

Next
Built with

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}[.{sub-resource}]:{action}
  • resource — the API area (e.g. contacts, crm, webhooks)
  • sub-resource — optional, used to split large areas (e.g. transactional.email, campaigns.sms)
  • action — either read (GET access) or write (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

Expand a resource to see its scope names, what each one 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.

Messaging

Transactional email

transactional.email:read — Read transactional email statistics, templates and blocked addresses.

transactional.email:write — Send transactional emails and manage templates and blocklists.

Endpoints covered: /smtp/email, /smtp/templates, /smtp/emails, /smtp/statistics, /smtp/blockedContacts, /smtp/blockedDomains

Transactional SMS

transactional.sms:read — Read transactional SMS statistics and templates.

transactional.sms:write — Send transactional SMS and manage templates.

Endpoints covered: /transactionalSMS/send, /transactionalSMS/sms, /transactionalSMS/statistics, /transactionalSMS/templates

Transactional WhatsApp

transactional.whatsapp:read — Read transactional WhatsApp statistics.

transactional.whatsapp:write — Send transactional WhatsApp messages.

Endpoints covered: /whatsapp/sendMessage, /whatsapp/statistics

Email campaigns

campaigns.email:read — Read your email campaigns and their statistics.

campaigns.email:write — Create, modify, send and delete email campaigns.

Endpoints covered: /emailCampaigns

SMS campaigns

campaigns.sms:read — Read your SMS campaigns and their statistics.

campaigns.sms:write — Create, modify, send and delete SMS campaigns.

Endpoints covered: /smsCampaigns

WhatsApp campaigns

campaigns.whatsapp:read — Read your WhatsApp campaigns and their statistics.

campaigns.whatsapp:write — Create, modify, send and delete WhatsApp campaigns.

Endpoints covered: /whatsappCampaigns

Contacts & CRM

Contacts & lists

contacts:read — Read your contacts, lists, segments, attributes and folders.

contacts:write — Create, modify or delete your contacts, lists, segments, attributes and folders.

Endpoints covered: /contacts, /contacts/lists, /contacts/folders, /contacts/attributes, /contacts/segments, /contacts/import, /contacts/export

CRM

crm:read — Read your companies, deals, tasks, notes and pipelines.

crm:write — Create, modify or delete companies, deals, tasks, notes and pipelines.

Endpoints covered: /companies, /crm/deals, /crm/tasks, /crm/notes, /crm/files, /crm/attributes, /crm/pipeline

E-commerce

ecommerce:read — Read your products, orders and categories.

ecommerce:write — Create, modify or delete products, orders and categories.

Endpoints covered: /products, /orders, /categories, /ecommerce

Loyalty

loyalty:read — Read loyalty programs, balances, tiers and rewards.

loyalty:write — Create, modify or delete loyalty programs, balances, tiers and rewards.

Endpoints covered: /loyalty

Events

events:read — Read tracked events.

events:write — Track new events.

Endpoints covered: /events

Custom objects

objects:read — Read your custom objects.

objects:write — Create, modify or delete your custom objects.

Endpoints covered: /objects

Account

Account & senders

account:read — Read account information, senders and inbound feeds.

account:write — Modify senders, sending domains and inbound feeds.

Endpoints covered: /account, /senders, /senders/domains, /inbound, /feeds, /processes

Organization

organization:read — Read organization-level settings and members.

organization:write — Modify organization-level settings and members.

Endpoints covered: /organization

Webhooks

webhooks:read — List your webhook subscriptions.

webhooks:write — Create, modify or delete webhook subscriptions.

Endpoints covered: /webhooks

Conversations

conversations:read — Read your live chat conversations.

conversations:write — Send messages and manage conversations.

Endpoints covered: /conversations

Requesting scopes

Scopes go in the scope query parameter of the authorization request, space-separated and URL-encoded.

https://oauth.brevo.com/realms/partner/oauth/authorize
?response_type=code
&client_id=<CLIENT_ID>
&redirect_uri=<REDIRECT_URI>
&scope=contacts%3Aread%20contacts%3Awrite%20transactional.email%3Awrite
&state=<RANDOM_STATE>

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.

$curl --request POST \
> --url https://oauth.brevo.com/realms/partner/oauth/introspect \
> --header 'Content-Type: application/x-www-form-urlencoded' \
> --user '<CLIENT_ID>:<CLIENT_SECRET>' \
> --data-urlencode 'token=<ACCESS_TOKEN>'

Response (RFC 7662):

1{
2 "active": true,
3 "scope": "contacts:read contacts:write transactional.email:write",
4 "client_id": "<CLIENT_ID>",
5 "exp": 1735689600,
6 "iat": 1735686000,
7 "sub": "user-uuid",
8 "token_type": "Bearer"
9}

Errors

HTTP statuserrorWhen
400invalid_scopeThe requested scope isn’t in the catalog, or exceeds the scopes registered on your app
400invalid_requestscope parameter is missing or malformed

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:

https://oauth.brevo.com/realms/partner/.well-known/oauth-authorization-server

The scopes_supported field is sourced live from the catalog — this is the same list you get from brevo app available-scopes.

$curl https://oauth.brevo.com/realms/partner/.well-known/oauth-authorization-server \
> | jq '.scopes_supported'

Choosing scopes for your app

A few common combinations:

Use caseScopes
Sync external contacts into Brevocontacts:read contacts:write
Send transactional email on behalf of a usertransactional.email:write
Read campaign performancecampaigns.email:read campaigns.sms:read
Build a CRM-side integrationcrm:read crm:write contacts:read
Webhook-driven integrationwebhooks:read webhooks:write + the resource scopes you’ll consume

Start with the minimum your app needs. You can widen scopes later with brevo app update --scope <scope> — see the CLI reference.