Reference · Tools

Brevo

Manage contacts, attributes, senders, and send transactional or template-based emails with optional binary attachments via the Brevo API.

Action (binary) Communication v1 Binary data

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

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Brevo credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Contactcontact
Contact Attributeattribute
Emailemail
Sendersender

Operations

ResourceOperationValueDescription
ContactCreatecreateCreate a contact
ContactCreate or UpdateupsertCreate or update a contact
ContactDeletedeleteDelete a contact
ContactGetgetGet a contact
ContactGet ManygetAllGet many contacts
ContactUpdateupdateUpdate a contact
Contact AttributeCreatecreateCreate a contact attribute
Contact AttributeDeletedeleteDelete a contact attribute
Contact AttributeGet ManygetAllGet many contact attributes
Contact AttributeUpdateupdateUpdate a contact attribute
EmailSendsendSend a transactional email
EmailSend TemplatesendTemplateSend an email with an existing template
SenderCreatecreateCreate a sender
SenderDeletedeleteDelete a sender
SenderGet ManygetAllGet many senders

Parameters

Contact: Create

ParameterTypeRequiredDefaultDescription
Email (email)stringYesEmail address of the contact. Supports expressions.
AttributesjsonNo{}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

ParameterTypeRequiredDefaultDescription
Email (email)stringYesEmail address of the contact. Supports expressions.
AttributesjsonNo{}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

ParameterTypeRequiredDefaultDescription
Contact IdentifierstringYesEmail (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions.

Contact: Get

ParameterTypeRequiredDefaultDescription
Contact IdentifierstringYesEmail (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions.

Contact: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)
SortoptionsNodescSort order for contacts.
Options: asc (Ascending), desc (Descending)
Modified SincestringNoFilter contacts modified after this UTC date-time (YYYY-MM-DDTHH:mm:ss.SSSZ).

Contact: Update

ParameterTypeRequiredDefaultDescription
Contact IdentifierstringYesEmail (URL-encoded), numeric ID, or SMS attribute value of the contact. Supports expressions.
AttributesjsonNo{}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

ParameterTypeRequiredDefaultDescription
Category (attributeCategory)optionsYesnormalCategory of the attribute.
Options: calculated, category, global, normal, transactional
Name (attributeName)stringYesName of the attribute.
TypeoptionsYestextType of the normal attribute. (shown when Category is normal)
Options: boolean, date, float, text
Value (attributeValue)stringYesValue of the attribute (for global and calculated categories). (shown when Category is global, calculated)
Enumeration (attributeEnumeration)jsonNo[]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

ParameterTypeRequiredDefaultDescription
Category (deleteAttributeCategory)optionsNonormalCategory of the attribute to delete.
Options: calculated, category, global, normal, transactional
Name (deleteAttributeName)stringNoName of the attribute to delete.

Contact Attribute: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. (shown when Return All is false)

Contact Attribute: Update

ParameterTypeRequiredDefaultDescription
Category (updateAttributeCategory)optionsNocalculatedCategory of the attribute to update.
Options: calculated, category, global
Name (updateAttributeName)stringNoName of the existing attribute.
Value (updateAttributeValue)stringNoNew value for the attribute. (hidden when Category is category)
Enumeration (updateAttributeEnumeration)jsonNo[]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

ParameterTypeRequiredDefaultDescription
Send HTMLbooleanNofalseWhether to send the email as HTML.
SenderstringYesSender email address. Format: “Name email@example.com” or “email@example.com”.
RecipientsstringYesComma-separated list of recipient email addresses. Format: “Name ” or “email”. Supports expressions.
SubjectstringNoSubject of the email. Supports expressions.
Text ContentstringNoPlain text content of the email. Supports expressions. (shown when Send HTML is false)
HTML ContentstringNoHTML content of the email. Supports expressions. (shown when Send HTML is true)
Binary Property NamestringNoComma-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.
CCstringNoComma-separated CC recipient addresses.
BCCstringNoComma-separated BCC recipient addresses.
TagsstringNoComma-separated tags to associate with the email.
Scheduled AtstringNoOptional ISO-8601 datetime to schedule the email (e.g., “2026-12-31T09:00:00.000Z”). Brevo will queue the send until this time.
Reply TocollectionNo{}Optional Reply-To header for the email.
— EmailstringNoReply-to email address.
— NamestringNoOptional reply-to display name.

Email: Send Template

ParameterTypeRequiredDefaultDescription
Template IDstringYesID of the Brevo email template to use. Find template IDs in your Brevo dashboard. Must be a positive whole number.
RecipientsstringYesComma-separated list of recipient email addresses. Format: “Name ” or “email”. Supports expressions.
Binary Property NamestringNoComma-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.
TagsstringNoComma-separated tags to associate with the email.
Scheduled AtstringNoOptional ISO-8601 datetime to schedule the email (e.g., “2026-12-31T09:00:00.000Z”). Brevo will queue the send until this time.
Reply TocollectionNo{}Optional Reply-To header for the email.
— EmailstringNoReply-to email address.
— NamestringNoOptional reply-to display name.
Template ParametersstringNoComma-separated key=value pairs to pass as template parameters. Example: “firstName=John,orderId=12345”.

Sender: Create

ParameterTypeRequiredDefaultDescription
Name (senderName)stringYesName of the sender.
Email (senderEmail)stringYesEmail address of the sender.

Sender: Delete

ParameterTypeRequiredDefaultDescription
Sender IDstringYesID of the sender to delete. Supports expressions.

Sender: Get Many

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo10Max number of results to return. (shown when Return All is false)

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo10Maximum 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 / OperationOutput
Contact / createThe created contact’s id
Contact / upsertThe contact’s id when Brevo returns one, otherwise success: true
Contact / deletesuccess: true
Contact / getThe contact record — id, email, attributes, list membership and timestamps
Contact / getAllOne item per contact. When the list is empty, a single item with contacts: []
Contact / updatesuccess: true
Contact Attribute / createsuccess: true
Contact Attribute / deletesuccess: true
Contact Attribute / getAllOne item per attribute. When there are none, a single item with attributes: []
Contact Attribute / updatesuccess: true
Email / sendmessageId — the identifier Brevo assigned to the message
Email / sendTemplatemessageId — the identifier Brevo assigned to the message
Sender / createThe created sender’s id
Sender / deletesuccess: true
Sender / getAllOne 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

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes 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 FIRSTNAME works and firstName does 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=value list 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 BusyBot

Last updated . Spotted something wrong? Tell us.