# Brevo

Send transactional email and SMS through Brevo, keep contacts, lists and attributes up to date, and create and send email campaigns.

## Connect Brevo

1. In the sidebar, open **Connections** and press **Add connection**.
2. Type `brevo` and choose **Brevo**.
3. Fill in the fields. Each one says **Required** or **Optional**.
4. Press **Test and save**. GoRunner checks the connection before it saves anything.

The sheet asks for:

- **API key · Required**: The v3 API key (xkeysib-…), shown once when you make it. An SMTP key does not work here.

Paste a Brevo API key (Settings › SMTP & API › API Keys › Generate a new API key). It works for the whole account.

[Connections](https://docs.gorunner.io/build/connections) says how to sign in again, rename or delete it. In a product that embeds GoRunner, **Add connection** can be missing: then [your provider makes connections](https://docs.gorunner.io/embed/customer-connections) for you.

## Start a workflow

Add a trigger and choose **Brevo**. The trigger uses the same connection as the steps.

### On Email Event

Fires when Brevo reports one of the chosen events. Publishing the workflow creates the webhook in Brevo; unpublishing removes it. Brevo does not sign its webhooks, so the check is a random token of this webhook's own, which Brevo sends with every delivery (as a bearer token and in a header); a delivery without it is refused. A retry of the same event starts no second run.

- **Kind · Required**: Transactional email (sent through the API or SMTP), marketing email (campaigns, contacts), or inbound email Brevo parsed. Options: Transactional email, Marketing email, Inbound email. Default: Transactional email.
- **Inbound Domain · Required**: The domain Brevo receives the email on (set up under Inbound parsing). Shows when **Kind** is **Inbound email**.
- **Events · Required**: Which transactional email events start the workflow. Options: Sent, Delivered, Opened, Opened for the first time, Clicked, Soft bounce, Hard bounce, Invalid address, Deferred, Blocked, Marked as spam, Unsubscribed. Shows when **Kind** is **Transactional email**.
- **Events · Required**: Which marketing events start the workflow. Options: Delivered, Opened, Clicked, Soft bounce, Hard bounce, Marked as spam, Unsubscribed, Added to a list, Contact updated, Contact deleted. Shows when **Kind** is **Marketing email**.

A later step can use its data, such as `{{trigger.date}}`, `{{trigger.email}}`, `{{trigger.event}}` and 4 more. See [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Do things in Brevo

Add a **Brevo** step, choose a **Resource**, then an **Operation**. Choose a row to see its fields.

- [Contact](https://docs.gorunner.io/apps/brevo#fields-f-contact): Create · Create or Update · Get · Get Many · Update · Delete
- [List](https://docs.gorunner.io/apps/brevo#fields-f-list): Create · Get · Get Many · Update · Delete · Add Contacts · Remove Contacts · Get Contacts
- [Contact Attribute](https://docs.gorunner.io/apps/brevo#fields-f-attribute): Create · Get Many · Update · Delete
- [Transactional Email](https://docs.gorunner.io/apps/brevo#fields-f-email): Send · Send Template
- [Transactional SMS](https://docs.gorunner.io/apps/brevo#fields-f-sms): Send
- [Email Campaign](https://docs.gorunner.io/apps/brevo#fields-f-campaign): Create · Get · Get Many · Update · Send Now · Send Test · Delete
- [Sender](https://docs.gorunner.io/apps/brevo#fields-f-sender): Create · Get Many · Delete

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

## Limits

- A reply from Brevo can be up to 16 MB (a file download can have its own limit). A larger one fails the step; it is never cut short.
- When Brevo says to slow down (429), the step waits as long as it asks, if the step’s time allows. Otherwise it fails and says when to try again.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Brevo is `pieceId: "brevo"` with `actionId: "brevo"`, set by `resource` and an `operation_…` field, such as `operation_attribute`. Its trigger is `brevotrigger` / `brevo_event`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It can change something outside the run (`writes_external`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Brevo › Contact

### Create and Create or Update

- **Email · Required**: The contact's email address.
- **Attributes · Optional**: Attribute values by name, in capitals, such as {"FIRSTNAME": "Sam", "LASTNAME": "Lee", "SMS": "+4915112345678"}. Contact Attribute › Get Many lists them.
- **Add to Lists · Optional**: List ids, separated by commas.
- **External ID · Optional**: Your own id for the contact.
- **Email Blocklist · Optional**: Stop or allow marketing and transactional email to the contact. Empty leaves it as it is. Options: Blocklist (no more emails / texts), Remove from the blocklist.
- **SMS Blocklist · Optional**: Stop or allow texts to the contact. Empty leaves it as it is. Options: Blocklist (no more emails / texts), Remove from the blocklist.

### Get and Delete

- **Contact · Required**: The contact's email address or id.

### Get Many

- **Changed After · Optional**: Only contacts changed after this time (ISO 8601, such as 2026-11-01T00:00:00Z).
- **Created After · Optional**: Only contacts created after this time (ISO 8601).
- **On Lists · Optional**: Only contacts on these lists (ids, separated by commas).
- **Order · Optional**: By when the contact was created. Options: Newest first, Oldest first. Default: Newest first.
- **Return All · Optional**: Read every contact, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many contacts to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **Contact · Required**: The contact's email address or id.
- **Attributes · Optional**: Attribute values by name, in capitals, such as {"FIRSTNAME": "Sam", "LASTNAME": "Lee", "SMS": "+4915112345678"}. Contact Attribute › Get Many lists them.
- **Add to Lists · Optional**: List ids, separated by commas.
- **Remove from Lists · Optional**: List ids to take the contact off, separated by commas.
- **External ID · Optional**: Your own id for the contact.
- **Email Blocklist · Optional**: Stop or allow marketing and transactional email to the contact. Empty leaves it as it is. Options: Blocklist (no more emails / texts), Remove from the blocklist.
- **SMS Blocklist · Optional**: Stop or allow texts to the contact. Empty leaves it as it is. Options: Blocklist (no more emails / texts), Remove from the blocklist.

### Brevo › List

### Create

- **Name · Optional**: The list's name.
- **Folder · Optional**: The folder the list goes in.

### Get and Delete

- **List · Required**: The list.

### Get Many

- **Return All · Optional**: Read every item, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many items to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **List · Required**: The list.
- **Name · Optional**: The list's name.
- **Folder · Optional**: The folder the list goes in.

### Add Contacts

- **List · Required**: The list.
- **Contacts · Optional**: Email addresses or contact ids, separated by commas (at most 150).

### Remove Contacts

- **List · Required**: The list.
- **Contacts · Optional**: Email addresses or contact ids, separated by commas (at most 150).
- **Remove Everyone · Optional**: Take every contact off the list. Off by default.

### Get Contacts

- **List · Required**: The list.
- **Changed After · Optional**: Only contacts changed after this time (ISO 8601).
- **Return All · Optional**: Read every item, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many items to return (1–5000). Default: 50. Shows when **Return All** is off.

### Brevo › Contact Attribute

### Create

- **Category · Required**: Normal (a value per contact), Transactional, Category (one of fixed choices), Calculated or Global (a formula). Options: Normal, Transactional, Category, Calculated, Global. Default: Normal.
- **Name · Required**: The attribute's name (letters, digits and _; Brevo shows it in capitals).
- **Type · Optional**: What a Normal attribute holds. Options: Text, Date, Number, Yes/No, Multiple choice. Default: Text. Shows when **Category** is **Normal**.
- **Formula · Optional**: The formula of a Calculated or Global attribute, such as COUNT[ORDER_ID,ORDER_DATE,>,NOW(-30)]. Shows when **Category** is **Calculated** or **Global**.
- **Choices · Optional**: The choices of a Category attribute: [{"value": 1, "label": "Gold"}, {"value": 2, "label": "Silver"}]. Shows when **Category** is **Category**.

### Get Many

Nothing to fill in.

### Update

- **Category · Required**: Normal (a value per contact), Transactional, Category (one of fixed choices), Calculated or Global (a formula). Options: Normal, Transactional, Category, Calculated, Global. Default: Normal.
- **Name · Required**: The attribute's name (letters, digits and _; Brevo shows it in capitals).
- **Formula · Optional**: The formula of a Calculated or Global attribute, such as COUNT[ORDER_ID,ORDER_DATE,>,NOW(-30)]. Shows when **Category** is **Calculated** or **Global**.
- **Choices · Optional**: The choices of a Category attribute: [{"value": 1, "label": "Gold"}, {"value": 2, "label": "Silver"}]. Shows when **Category** is **Category**.

### Delete

- **Category · Required**: Normal (a value per contact), Transactional, Category (one of fixed choices), Calculated or Global (a formula). Options: Normal, Transactional, Category, Calculated, Global. Default: Normal.
- **Name · Required**: The attribute's name (letters, digits and _; Brevo shows it in capitals).

### Brevo › Transactional Email

### Send

- **From Email · Optional**: A sender address set up in Brevo (Senders, Domains & Dedicated IPs). With a template, empty uses the template's sender.
- **From Name · Optional**: The sender's name.
- **To · Required**: Recipient addresses, separated by commas.
- **CC · Optional**: Addresses to copy, separated by commas.
- **BCC · Optional**: Addresses to copy unseen, separated by commas.
- **Reply To · Optional**: Where replies go.
- **Subject · Optional**: The subject line. With a template, empty uses the template's subject.
- **HTML · Optional**: Write the body as HTML instead of plain text. Off by default.
- **HTML · Required**: The email's HTML. Shows when **HTML** is on.
- **Text · Required**: The email's text. Shows when **HTML** is off.
- **Attachments · Optional**: Attach one file per row, or switch the field to an expression to pass a whole list from an earlier step (such as {{steps.unzip.files}}). Brevo takes pdf, docx, xlsx, csv, png, jpg, zip and many more types.
- **Tags · Optional**: Tags for Brevo's statistics, separated by commas.
- **Send At · Optional**: Schedule the email (ISO 8601 time). Empty sends now.
- **Headers · Optional**: Extra email headers, such as {"X-Order-Id": "42"}.

### Send Template

- **From Email · Optional**: A sender address set up in Brevo (Senders, Domains & Dedicated IPs). With a template, empty uses the template's sender.
- **From Name · Optional**: The sender's name.
- **To · Required**: Recipient addresses, separated by commas.
- **CC · Optional**: Addresses to copy, separated by commas.
- **BCC · Optional**: Addresses to copy unseen, separated by commas.
- **Reply To · Optional**: Where replies go.
- **Subject · Optional**: The subject line. With a template, empty uses the template's subject.
- **Template · Required**: The saved template (Campaigns › Templates).
- **Template Parameters · Optional**: Values the template reads as {{ params.name }}, such as {"Name": "Sam", "ORDER": 42}.
- **Attachments · Optional**: Attach one file per row, or switch the field to an expression to pass a whole list from an earlier step (such as {{steps.unzip.files}}). Brevo takes pdf, docx, xlsx, csv, png, jpg, zip and many more types.
- **Tags · Optional**: Tags for Brevo's statistics, separated by commas.
- **Send At · Optional**: Schedule the email (ISO 8601 time). Empty sends now.
- **Headers · Optional**: Extra email headers, such as {"X-Order-Id": "42"}.

### Brevo › Transactional SMS

### Send

- **Sender · Required**: The name shown as the sender (at most 11 letters and digits) or a number (at most 15 digits).
- **To · Required**: The mobile number with its country code, such as 4915112345678.
- **Message · Required**: The text. Over 160 characters it is sent as several messages.
- **Type · Optional**: Transactional, or marketing (needed when the text holds a [stop CODE]). Options: Transactional, Marketing. Default: Transactional.
- **Tag · Optional**: A label for Brevo's statistics.
- **Unicode · Optional**: Send the text as Unicode (accents, emoji; fewer characters per message). Off by default.
- **Brand Prefix · Optional**: A brand name put before the text (US carriers ask for one).

### Brevo › Email Campaign

### Create

- **Name · Optional**: The campaign's name (people never see it).
- **Subject · Optional**: The email's subject line.
- **From Email · Optional**: A sender address set up in Brevo.
- **From Name · Optional**: The sender's name.
- **Reply To · Optional**: Where replies go.
- **Preview Text · Optional**: The text shown after the subject in the inbox.
- **HTML · Optional**: The email's HTML. Use this or a Template.
- **Template · Optional**: A saved template to send instead of HTML.
- **Lists · Optional**: The lists it goes to (ids, separated by commas).
- **Send At · Optional**: Schedule it (ISO 8601 time). Empty keeps it a draft.

### Get, Send Now and Delete

- **Campaign · Required**: The campaign's id.

### Get Many

- **Status · Optional**: Only campaigns in this state. Empty lists every campaign. Options: Draft, Sent, Scheduled, Suspended, Sending, Archived.
- **Include HTML · Optional**: Return each campaign's HTML too (large). Off by default.
- **Return All · Optional**: Read every campaign, page by page (at most 5000; past that the step fails rather than stop early). Off by default.
- **Limit · Optional**: How many campaigns to return (1–5000). Default: 50. Shows when **Return All** is off.

### Update

- **Campaign · Required**: The campaign's id.
- **Name · Optional**: The campaign's name (people never see it).
- **Subject · Optional**: The email's subject line.
- **From Email · Optional**: A sender address set up in Brevo.
- **From Name · Optional**: The sender's name.
- **Reply To · Optional**: Where replies go.
- **Preview Text · Optional**: The text shown after the subject in the inbox.
- **HTML · Optional**: The email's HTML. Use this or a Template.
- **Template · Optional**: A saved template to send instead of HTML.
- **Lists · Optional**: The lists it goes to (ids, separated by commas).
- **Send At · Optional**: Schedule it (ISO 8601 time). Empty keeps it a draft.

### Send Test

- **Campaign · Required**: The campaign's id.
- **Test Addresses · Required**: Where the test goes (addresses of the account's test list), separated by commas.

### Brevo › Sender

### Create

- **Name · Required**: The sender's name.
- **Email · Required**: The sender's address; Brevo emails it a code to confirm it.

### Get Many

Nothing to fill in.

### Delete

- **Sender · Required**: The sender's id.

Source: https://docs.gorunner.io/apps/brevo
