Access the Brevo API with managed OAuth authentication. Send transactional emails, manage contacts and lists, create email campaigns, and work with templates.
Reference
Get Account Info
GET /brevo/v3/accountResponse:
{
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Inc",
"relay": {
"enabled": true,
"data": {
"userName": "user@smtp-brevo.com",
"relay": "smtp-relay.brevo.com",
"port": 587
}
}
}List Contacts
GET /brevo/v3/contactsQuery Parameters:
limit- Number of results per page (default: 50, max: 500)offset- Index of first result (0-based)modifiedSince- Filter by modification date (ISO 8601)
Response:
{
"contacts": [
{
"id": 1,
"email": "contact@example.com",
"emailBlacklisted": false,
"smsBlacklisted": false,
"createdAt": "2026-02-09T20:33:59.705+01:00",
"modifiedAt": "2026-02-09T20:35:19.529+01:00",
"listIds": [2],
"attributes": {
"FIRSTNAME": "John",
"LASTNAME": "Doe"
}
}
],
"count": 1
}Get Contact
GET /brevo/v3/contacts/{identifier}The identifier can be email address, phone number, or contact ID.
Query Parameters:
identifierType- Type of identifier:email_id,phone_id,contact_id,ext_id
Create Contact
POST /brevo/v3/contacts
Content-Type: application/json
{
"email": "newcontact@example.com",
"attributes": {
"FIRSTNAME": "Jane",
"LASTNAME": "Smith"
},
"listIds": [2],
"updateEnabled": false
}Response:
{
"id": 2
}Set updateEnabled: true to update the contact if it already exists.
Update Contact
PUT /brevo/v3/contacts/{identifier}
Content-Type: application/json
{
"attributes": {
"FIRSTNAME": "Updated",
"LASTNAME": "Name"
}
}Returns 204 No Content on success.
Delete Contact
DELETE /brevo/v3/contacts/{identifier}Returns 204 No Content on success.
Get Contact Campaign Stats
GET /brevo/v3/contacts/{identifier}/campaignStatsList All Lists
GET /brevo/v3/contacts/listsResponse:
{
"lists": [
{
"id": 2,
"name": "Newsletter Subscribers",
"folderId": 1,
"uniqueSubscribers": 150,
"totalBlacklisted": 2,
"totalSubscribers": 148
}
],
"count": 1
}Get List
GET /brevo/v3/contacts/lists/{listId}Create List
POST /brevo/v3/contacts/lists
Content-Type: application/json
{
"name": "New List",
"folderId": 1
}Response:
{
"id": 3
}Update List
PUT /brevo/v3/contacts/lists/{listId}
Content-Type: application/json
{
"name": "Updated List Name"
}Returns 204 No Content on success.
Delete List
DELETE /brevo/v3/contacts/lists/{listId}Returns 204 No Content on success.
Get Contacts in List
GET /brevo/v3/contacts/lists/{listId}/contactsAdd Contacts to List
POST /brevo/v3/contacts/lists/{listId}/contacts/add
Content-Type: application/json
{
"emails": ["contact1@example.com", "contact2@example.com"]
}Remove Contacts from List
POST /brevo/v3/contacts/lists/{listId}/contacts/remove
Content-Type: application/json
{
"emails": ["contact1@example.com"]
}List Folders
GET /brevo/v3/contacts/foldersResponse:
{
"folders": [
{
"id": 1,
"name": "Marketing",
"uniqueSubscribers": 500,
"totalSubscribers": 480,
"totalBlacklisted": 20
}
],
"count": 1
}Get Folder
GET /brevo/v3/contacts/folders/{folderId}Create Folder
POST /brevo/v3/contacts/folders
Content-Type: application/json
{
"name": "New Folder"
}Response:
{
"id": 4
}Update Folder
PUT /brevo/v3/contacts/folders/{folderId}
Content-Type: application/json
{
"name": "Renamed Folder"
}Returns 204 No Content on success.
Delete Folder
DELETE /brevo/v3/contacts/folders/{folderId}Deletes folder and all lists within it. Returns 204 No Content on success.
Get Lists in Folder
GET /brevo/v3/contacts/folders/{folderId}/listsList Attributes
GET /brevo/v3/contacts/attributesResponse:
{
"attributes": [
{
"name": "FIRSTNAME",
"category": "normal",
"type": "text"
},
{
"name": "LASTNAME",
"category": "normal",
"type": "text"
}
]
}Create Attribute
POST /brevo/v3/contacts/attributes/{category}/{attributeName}
Content-Type: application/json
{
"type": "text"
}Categories: normal, transactional, category, calculated, global
Update Attribute
PUT /brevo/v3/contacts/attributes/{category}/{attributeName}
Content-Type: application/json
{
"value": "new value"
}Delete Attribute
DELETE /brevo/v3/contacts/attributes/{category}/{attributeName}Send Email
POST /brevo/v3/smtp/email
Content-Type: application/json
{
"sender": {
"name": "John Doe",
"email": "john@example.com"
},
"to": [
{
"email": "recipient@example.com",
"name": "Jane Smith"
}
],
"subject": "Welcome!",
"htmlContent": "<html><body><h1>Hello!</h1><p>Welcome to our service.</p></body></html>"
}Response:
{
"messageId": "<202602092329.12910305853@smtp-relay.mailin.fr>"
}Optional Parameters:
cc- Carbon copy recipientsbcc- Blind carbon copy recipientsreplyTo- Reply-to addresstextContent- Plain text versiontemplateId- Use a template instead of htmlContentparams- Template parametersattachment- File attachmentsheaders- Custom headerstags- Email tags for trackingscheduledAt- Schedule for later (ISO 8601)
Get Transactional Emails
GET /brevo/v3/smtp/emailsQuery Parameters:
email- Filter by recipient emailtemplateId- Filter by templatemessageId- Filter by message IDstartDate- Start date (YYYY-MM-DD)endDate- End date (YYYY-MM-DD)limit- Results per pageoffset- Starting index
Delete Scheduled Email
DELETE /brevo/v3/smtp/email/{identifier}The identifier can be a messageId or batchId.
Get Email Statistics
GET /brevo/v3/smtp/statistics/eventsQuery Parameters:
limit- Results per pageoffset- Starting indexstartDate- Start dateendDate- End dateemail- Filter by recipientevent- Filter by event type:delivered,opened,clicked,bounced, etc.
List Templates
GET /brevo/v3/smtp/templatesResponse:
{
"count": 1,
"templates": [
{
"id": 1,
"name": "Welcome Email",
"subject": "Welcome {{params.name}}!",
"isActive": true,
"sender": {
"name": "Company",
"email": "noreply@company.com"
},
"htmlContent": "<html>...</html>",
"createdAt": "2026-02-09 23:29:38",
"modifiedAt": "2026-02-09 23:29:38"
}
]
}Get Template
GET /brevo/v3/smtp/templates/{templateId}Create Template
POST /brevo/v3/smtp/templates
Content-Type: application/json
{
"sender": {
"name": "Company",
"email": "noreply@company.com"
},
"templateName": "Welcome Email",
"subject": "Welcome {{params.name}}!",
"htmlContent": "<html><body><h1>Hello {{params.name}}!</h1></body></html>"
}Response:
{
"id": 1
}Update Template
PUT /brevo/v3/smtp/templates/{templateId}
Content-Type: application/json
{
"templateName": "Updated Template Name",
"subject": "New Subject"
}Returns 204 No Content on success.
Delete Template
DELETE /brevo/v3/smtp/templates/{templateId}Returns 204 No Content on success.
Send Test Email
POST /brevo/v3/smtp/templates/{templateId}/sendTest
Content-Type: application/json
{
"emailTo": ["test@example.com"]
}List Campaigns
GET /brevo/v3/emailCampaignsQuery Parameters:
type- Filter by type:classic,triggerstatus- Filter by status:draft,sent,archive,queued,suspended,in_processlimit- Results per pageoffset- Starting index
Response:
{
"count": 1,
"campaigns": [
{
"id": 2,
"name": "Monthly Newsletter",
"subject": "Our March Update",
"type": "classic",
"status": "draft",
"sender": {
"name": "Company",
"email": "news@company.com"
},
"createdAt": "2026-02-09T23:29:39.000Z"
}
]
}Get Campaign
GET /brevo/v3/emailCampaigns/{campaignId}Create Campaign
POST /brevo/v3/emailCampaigns
Content-Type: application/json
{
"name": "March Newsletter",
"subject": "Our March Update",
"sender": {
"name": "Company",
"email": "news@company.com"
},
"htmlContent": "<html><body><h1>March News</h1></body></html>",
"recipients": {
"listIds": [2]
}
}Response:
{
"id": 2
}Update Campaign
PUT /brevo/v3/emailCampaigns/{campaignId}
Content-Type: application/json
{
"name": "Updated Campaign Name",
"subject": "Updated Subject"
}Returns 204 No Content on success.
Delete Campaign
DELETE /brevo/v3/emailCampaigns/{campaignId}Returns 204 No Content on success.
Send Campaign Now
POST /brevo/v3/emailCampaigns/{campaignId}/sendNowSend Test Email
POST /brevo/v3/emailCampaigns/{campaignId}/sendTest
Content-Type: application/json
{
"emailTo": ["test@example.com"]
}Update Campaign Status
PUT /brevo/v3/emailCampaigns/{campaignId}/status
Content-Type: application/json
{
"status": "suspended"
}List Senders
GET /brevo/v3/sendersResponse:
{
"senders": [
{
"id": 1,
"name": "Company",
"email": "noreply@company.com",
"active": true,
"ips": []
}
]
}Get Sender
GET /brevo/v3/senders/{senderId}Create Sender
POST /brevo/v3/senders
Content-Type: application/json
{
"name": "Marketing",
"email": "marketing@company.com"
}Update Sender
PUT /brevo/v3/senders/{senderId}
Content-Type: application/json
{
"name": "Updated Name"
}Delete Sender
DELETE /brevo/v3/senders/{senderId}List Blocked Contacts
GET /brevo/v3/smtp/blockedContactsUnblock Contact
DELETE /brevo/v3/smtp/blockedContacts/{email}List Blocked Domains
GET /brevo/v3/smtp/blockedDomainsAdd Blocked Domain
POST /brevo/v3/smtp/blockedDomains
Content-Type: application/json
{
"domain": "spam-domain.com"
}Remove Blocked Domain
DELETE /brevo/v3/smtp/blockedDomains/{domain}