Reference · Tools
Brevo
Manage contacts, attributes, senders, and send transactional or template-based emails with optional binary attachments via the Brevo API.
The Brevo node connects your workflows to the Brevo (formerly Sendinblue) API, letting you send transactional or template-based emails, attach files generated upstream, and create or update contacts. A typical use case: generate a PDF invoice in one node, then pass it directly to Brevo to email it to a customer with no manual upload step.
- Node type
- Action (binary)
- Parameters
- 45
- Outputs
- Output, Error
- Credentials
- Brevo
Brevo
Send transactional emails with attachments and manage contacts via Brevo
Overview
The Brevo tool interacts with the Brevo (formerly Sendinblue) email marketing and transactional email platform. It supports four resources: contact — create, get, get many, update, create-or-update and delete contacts; contact attribute — create, update, delete and list contact attributes; email — send transactional emails with text/HTML content or templates, with optional binary file attachments; and sender — create, delete and list email senders. Email send operations can attach binary files from upstream items.
Category: Communication
Tool Name: brevo
Version: 1
Appearance: Icon: si-brevo | Color: #0B996E
Node Type
Action (Binary) — handles file/binary data operations
Input / Output
| Direction | Port(s) |
|---|---|
| Input | Input |
| Output | Output, Error |
Credentials
This tool requires Brevo credentials. See the Credentials Guide for setup instructions.
Resources
| Resource | Value |
|---|---|
| Contact | contact |
| Contact Attribute | attribute |
email | |
| Sender | sender |
Operations
| Resource | Operation | Value | Description |
|---|---|---|---|
| Contact | Create | create | Create a contact |
| Contact | Create or Update | upsert | Create or update a contact |
| Contact | Delete | delete | Delete a contact |
| Contact | Get | get | Get a contact |
| Contact | Get Many | getAll | Get many contacts |
| Contact | Update | update | Update a contact |
| Contact Attribute | Create | create | Create a contact attribute |
| Contact Attribute | Delete | delete | Delete a contact attribute |
| Contact Attribute | Get Many | getAll | Get many contact attributes |
| Contact Attribute | Update | update | Update a contact attribute |
| Send | send | Send a transactional email | |
| Send Template | sendTemplate | Send an email with an existing template | |
| Sender | Create | create | Create a sender |
| Sender | Delete | delete | Delete a sender |
| Sender | Get Many | getAll | Get many senders |
Parameters
Contact: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Email (email) | string | Yes | — | Email address of the contact. Supports expressions. |
| Attributes | json | No | {} | Contact attributes as a JSON object. Keys are attribute names (e.g., {“FIRSTNAME”:“John”,“LASTNAME”:“Doe”}). Attribute names are case-sensitive — use ALLCAPS (FIRSTNAME, LASTNAME, SMS). Lowercase names are silently ignored. |
Contact: Create or Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Email (email) | string | Yes | — | Email address of the contact. Supports expressions. |
| Attributes | json | No | {} | Contact attributes as a JSON object. Keys are attribute names (e.g., {“FIRSTNAME”:“John”,“LASTNAME”:“Doe”}). Attribute names are case-sensitive — use ALLCAPS (FIRSTNAME, LASTNAME, SMS). Lowercase names are silently ignored. |
Contact: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Contact Identifier | string | Yes | — | Email (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions. |
Contact: Get
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Contact Identifier | string | Yes | — | Email (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions. |
Contact: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
| Sort | options | No | desc | Sort order for contacts. |
Options: asc (Ascending), desc (Descending) | ||||
| Modified Since | string | No | — | Filter contacts modified after this UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ). |
Contact: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Contact Identifier | string | Yes | — | Email (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions. |
| Attributes | json | No | {} | Contact attributes as a JSON object. Keys are attribute names (e.g., {“FIRSTNAME”:“John”,“LASTNAME”:“Doe”}). Attribute names are case-sensitive — use ALLCAPS (FIRSTNAME, LASTNAME, SMS). Lowercase names are silently ignored. |
Contact Attribute: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Category (attributeCategory) | options | Yes | normal | Category of the attribute. |
Options: calculated, category, global, normal, transactional | ||||
Name (attributeName) | string | Yes | — | Name of the attribute. |
| Type | options | Yes | text | Type of the normal attribute. (shown when Category is normal) |
Options: boolean, date, float, text | ||||
Value (attributeValue) | string | Yes | — | Value of the attribute (for global and calculated categories). (shown when Category is global, calculated) |
Enumeration (attributeEnumeration) | json | No | [] | Array of {value: number, label: string} for category type attributes. Example: [{“value”:1,“label”:“Hot”},{“value”:2,“label”:“Cold”}]. (shown when Category is category) |
Contact Attribute: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Category (deleteAttributeCategory) | options | No | normal | Category of the attribute to delete. |
Options: calculated, category, global, normal, transactional | ||||
Name (deleteAttributeName) | string | No | — | Name of the attribute to delete. |
Contact Attribute: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 50 | Max number of results to return. (shown when Return All is false) |
Contact Attribute: Update
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Category (updateAttributeCategory) | options | No | calculated | Category of the attribute to update. |
Options: calculated, category, global | ||||
Name (updateAttributeName) | string | No | — | Name of the existing attribute. |
Value (updateAttributeValue) | string | No | — | New value for the attribute. (hidden when Category is category) |
Enumeration (updateAttributeEnumeration) | json | No | [] | Array of {value: number, label: string} for category type. Example: [{“value”:1,“label”:“Hot”},{“value”:2,“label”:“Cold”}]. (shown when Category is category) |
Email: Send
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Send HTML | boolean | No | false | Whether to send the email as HTML. |
| Sender | string | Yes | — | Sender email address. Format: “Name email@example.com” or “email@example.com”. |
| Recipients | string | Yes | — | Comma-separated list of recipient email addresses. Format: “Name |
| Subject | string | No | — | Subject of the email. Supports expressions. |
| Text Content | string | No | — | Plain text content of the email. Supports expressions. (shown when Send HTML is false) |
| HTML Content | string | No | — | HTML content of the email. Supports expressions. (shown when Send HTML is true) |
| Binary Property Name | string | No | — | Comma-separated names of binary properties to attach to the email. Leave empty for no attachments. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. |
| CC | string | No | — | Comma-separated CC recipient addresses. |
| BCC | string | No | — | Comma-separated BCC recipient addresses. |
| Tags | string | No | — | Comma-separated tags to associate with the email. |
| Scheduled At | string | No | — | Optional ISO-8601 datetime to schedule the email (e.g., “2026-12-31T09:00:00.000Z”). Brevo will queue the send until this time. |
| Reply To | collection | No | {} | Optional Reply-To header for the email. |
string | No | — | Reply-to email address. | |
| — Name | string | No | — | Optional reply-to display name. |
Email: Send Template
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Template ID | string | Yes | — | ID of the Brevo email template to use. Find template IDs in your Brevo dashboard. Must be a positive whole number. |
| Recipients | string | Yes | — | Comma-separated list of recipient email addresses. Format: “Name |
| Binary Property Name | string | No | — | Comma-separated names of binary properties to attach to the email. Leave empty for no attachments. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. |
| Tags | string | No | — | Comma-separated tags to associate with the email. |
| Scheduled At | string | No | — | Optional ISO-8601 datetime to schedule the email (e.g., “2026-12-31T09:00:00.000Z”). Brevo will queue the send until this time. |
| Reply To | collection | No | {} | Optional Reply-To header for the email. |
string | No | — | Reply-to email address. | |
| — Name | string | No | — | Optional reply-to display name. |
| Template Parameters | string | No | — | Comma-separated key=value pairs to pass as template parameters. Example: “firstName=John,orderId=12345”. |
Sender: Create
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
Name (senderName) | string | Yes | — | Name of the sender. |
Email (senderEmail) | string | Yes | — | Email address of the sender. |
Sender: Delete
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Sender ID | string | Yes | — | ID of the sender to delete. Supports expressions. |
Sender: Get Many
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Return All | boolean | No | false | Whether to return all results or only up to a given limit. |
| Limit | number | No | 10 | Max number of results to return. (shown when Return All is false) |
All Operations
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Max Concurrency | number | No | 10 | Maximum number of items to process concurrently. |
Output Data
The Brevo response is merged into the item JSON — the incoming fields pass through and binary data is forwarded. Most operations produce one output item per input item; the three Get Many operations fan out to one output item per record.
| Resource / Operation | Output |
|---|---|
Contact / create | The created contact’s id |
Contact / upsert | The contact’s id when Brevo returns one, otherwise success: true |
Contact / delete | success: true |
Contact / get | The contact record — id, email, attributes, list membership and timestamps |
Contact / getAll | One item per contact. When the list is empty, a single item with contacts: [] |
Contact / update | success: true |
Contact Attribute / create | success: true |
Contact Attribute / delete | success: true |
Contact Attribute / getAll | One item per attribute. When there are none, a single item with attributes: [] |
Contact Attribute / update | success: true |
Email / send | messageId — the identifier Brevo assigned to the message |
Email / sendTemplate | messageId — the identifier Brevo assigned to the message |
Sender / create | The created sender’s id |
Sender / delete | success: true |
Sender / getAll | One item per sender. When there are none, a single item with senders: [] |
Reference any field downstream by expression, e.g. {{ $json.messageId }}.
Usage Examples
- Send a transactional email with a PDF attachment
- Create a new contact in Brevo with custom attributes
- Send a template email to multiple recipients
- Get all contacts modified since a specific date
- Delete a contact by email address
- Create a new sender identity
Example Configuration
Send an HTML transactional email:
{
"type": "brevo",
"parameters": {
"resource": "email",
"operation": "send",
"sendHTML": true,
"sender": "Support <support@example.com>",
"recipients": "john@example.com, jane@example.com",
"subject": "Welcome to our service",
"htmlContent": "<h1>Welcome!</h1><p>Thanks for joining us.</p>",
"cc": "manager@example.com",
"tags": "welcome,onboarding"
}
}
Send a plain-text confirmation built from the incoming item:
{
"type": "brevo",
"parameters": {
"resource": "email",
"operation": "send",
"sendHTML": false,
"sender": "noreply@example.com",
"recipients": "{{ $json.email }}",
"subject": "Order Confirmation",
"textContent": "Your order {{ $json.orderId }} has been confirmed. Thank you for your purchase!"
}
}
Send a stored template with parameters and two file attachments:
{
"type": "brevo",
"parameters": {
"resource": "email",
"operation": "sendTemplate",
"templateId": "123",
"recipients": "{{ $json.email }}",
"templateParameters": "firstName={{ $json.firstName }},orderId={{ $json.orderId }}",
"binaryPropertyName": "invoice,receipt"
}
}
Create a contact with attributes:
{
"type": "brevo",
"parameters": {
"resource": "contact",
"operation": "create",
"email": "newuser@example.com",
"attributes": {
"FIRSTNAME": "John",
"LASTNAME": "Doe",
"SMS": "+1234567890"
}
}
}
Create the contact if it is new, update it if it already exists:
{
"type": "brevo",
"parameters": {
"resource": "contact",
"operation": "upsert",
"email": "{{ $json.email }}",
"attributes": {
"FIRSTNAME": "{{ $json.firstName }}",
"LASTNAME": "{{ $json.lastName }}",
"SIGNUP_DATE": "{{ $json.signupDate }}"
}
}
}
Update an existing contact by email address:
{
"type": "brevo",
"parameters": {
"resource": "contact",
"operation": "update",
"identifier": "existinguser@example.com",
"attributes": {
"FIRSTNAME": "Jane",
"COMPANY": "Acme Corp"
}
}
}
List recently modified contacts, newest first:
{
"type": "brevo",
"parameters": {
"resource": "contact",
"operation": "getAll",
"returnAll": false,
"limit": 50,
"sort": "desc",
"modifiedSince": "2024-01-01T00:00:00.000Z"
}
}
Create a normal text attribute:
{
"type": "brevo",
"parameters": {
"resource": "attribute",
"operation": "create",
"attributeCategory": "normal",
"attributeName": "DEPARTMENT",
"attributeType": "text"
}
}
Create a category attribute with its allowed values:
{
"type": "brevo",
"parameters": {
"resource": "attribute",
"operation": "create",
"attributeCategory": "category",
"attributeName": "PRIORITY",
"attributeEnumeration": [
{ "value": 1, "label": "High" },
{ "value": 2, "label": "Medium" },
{ "value": 3, "label": "Low" }
]
}
}
Update a global attribute’s value:
{
"type": "brevo",
"parameters": {
"resource": "attribute",
"operation": "update",
"updateAttributeCategory": "global",
"updateAttributeName": "COMPANY_NAME",
"updateAttributeValue": "New Company Name Inc."
}
}
Create a sender identity:
{
"type": "brevo",
"parameters": {
"resource": "sender",
"operation": "create",
"senderName": "Customer Support",
"senderEmail": "support@mycompany.com"
}
}
Delete a sender by ID:
{
"type": "brevo",
"parameters": {
"resource": "sender",
"operation": "delete",
"senderId": "456"
}
}
Error Handling
| Mode | Behavior |
|---|---|
| stop | Halts workflow on first error |
| continue | Skips failed items, passes successful ones through |
| errorPort | Routes failed items to Error output port |
Tips
Send transactional emails with optional binary attachments, and manage contacts, attributes, and senders via the Brevo (Sendinblue) API.
Attachments
- Binary Property Name is a comma-separated list, so one email can carry several files:
"invoice,receipt". Each named property is attached with its original file name; when the file name has no extension, one is derived from its MIME type. - Names are case-sensitive. Check the upstream node’s Binary Data panel for the exact property names a run produced. A name that is not present on the item is skipped silently — the email still sends, without that attachment.
- Each attachment is capped at 7 MB. A larger file fails the item; host it and link to it from the message body instead.
Notes
- Attribute names are ALLCAPS. Brevo silently ignores lowercase keys in the Attributes object, so
FIRSTNAMEworks andfirstNamedoes not. - Template ID must be a positive whole number — the numeric ID from the Brevo dashboard, not the template’s name.
- Template Parameters is a flat
key=valuelist separated by commas, not JSON. - The Sender must be a verified sender identity in your Brevo account. Use Sender: Get Many to see which addresses are available.
- Send is deduplicated on retry. Transactional sends carry an idempotency key derived from the execution, so re-running a failed node does not send the same message twice.
- Scheduled At queues the message with Brevo; the workflow does not wait for the send time.
- Get Many fans out. Contacts, attributes and senders each arrive as separate items, ready to filter or loop over without a Split Out node.
Frequently asked questions
My contact attribute update isn't applying — what's wrong?
Brevo silently ignores attribute keys that aren't in ALLCAPS. Write `FIRSTNAME` and `LASTNAME`, not `firstName` or `lastname`. There's no error returned; the request succeeds but the field simply doesn't change, which makes this easy to miss.
How do I attach multiple files to one email?
Set the Binary Property Name field to a comma-separated list of property names from the upstream item, for example `invoice,receipt`. Each named binary is attached using its original file name. If a name doesn't exist on the item it's skipped silently and the email still sends — so double-check the exact property names in your upstream node's Binary Data panel, since they're case-sensitive.
Is there a file size limit for attachments?
Each individual attachment is capped at 7 MB. If a file exceeds that, the item fails. The recommended workaround is to host the file externally and include a download link in the message body instead.
If my workflow fails and I re-run the Brevo node, will it send the email twice?
No. Transactional send operations use an idempotency key derived from the execution, so retrying a failed node will not dispatch a duplicate message to the recipient.
How do I find the right sender address and template ID to use?
Use the Sender: Get Many operation to retrieve all verified sender identities in your Brevo account — only verified senders are accepted. For templates, the Template ID field requires the numeric ID shown in the Brevo dashboard, not the template's display name. Template Parameters are entered as a flat comma-separated `key=value` list, not as JSON.
Build with the Brevo node
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Brevo credentials first.
Open BusyBotLast updated . Spotted something wrong? Tell us.