<!-- BusyBot node reference — https://busybot.net/tools/brevo/ -->

> Node: Brevo (`brevo`) · Action (binary) · v1
> Category: Communication · Credentials: Brevo (`brevoApi`)
> Updated: 2026-08-16

# 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](https://busybot.net/credentials/brevo-api/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Contact | `contact` |
| Contact Attribute | `attribute` |
| Email | `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 |
| Email | Send | `send` | Send a transactional email |
| 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 <email>" or "email". Supports expressions. |
| 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. |
| — 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 <email>" or "email". Supports expressions. |
| 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. |
| — 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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "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:

```json
{
  "type": "brevo",
  "parameters": {
    "resource": "contact",
    "operation": "update",
    "identifier": "existinguser@example.com",
    "attributes": {
      "FIRSTNAME": "Jane",
      "COMPANY": "Acme Corp"
    }
  }
}
```

List recently modified contacts, newest first:

```json
{
  "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:

```json
{
  "type": "brevo",
  "parameters": {
    "resource": "attribute",
    "operation": "create",
    "attributeCategory": "normal",
    "attributeName": "DEPARTMENT",
    "attributeType": "text"
  }
}
```

Create a category attribute with its allowed values:

```json
{
  "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:

```json
{
  "type": "brevo",
  "parameters": {
    "resource": "attribute",
    "operation": "update",
    "updateAttributeCategory": "global",
    "updateAttributeName": "COMPANY_NAME",
    "updateAttributeValue": "New Company Name Inc."
  }
}
```

Create a sender identity:

```json
{
  "type": "brevo",
  "parameters": {
    "resource": "sender",
    "operation": "create",
    "senderName": "Customer Support",
    "senderEmail": "support@mycompany.com"
  }
}
```

Delete a sender by ID:

```json
{
  "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 `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.