Reference · Tools
Brevo integration
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.
- Works as
- Action (binary)
- Tool name
brevo- Operations
- 15 — Contact: Create , Contact: Create or Update , Contact: Delete , Contact: Get , Contact: Get Many and 10 more
- Parameters
- 45
- Outputs
- Output, Error
- Credentials
- Brevo
- Official docs
- Brevo docs developers.brevo.com
What you can build with Brevo
- 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.
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.
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 }}.
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
This tool sends emails and manages contacts, attributes, and senders through the Brevo service. It is ideal for sending transactional or template-based emails, or for creating, updating, deleting, or retrieving contacts, attributes, and senders. It produces sent emails, or updated, created, deleted, or retrieved contact, attribute, and sender information.
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 Brevo
Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Brevo credentials first.
Open BusyBotLast reviewed . Spotted something wrong? Tell us.