← Back to Skills Marketplace
yujesyoga

Brevo

by yuj es yoga · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
2517
Downloads
3
Stars
1
Active Installs
1
Versions
Install in OpenClaw
/install brevo
Description
Brevo (formerly Sendinblue) email marketing API for managing contacts, lists, sending transactional emails, and campaigns. Use when importing contacts, sending emails, managing subscriptions, or working with email automation.
README (SKILL.md)

Brevo Email Marketing API

Manage contacts, send emails, and automate marketing via Brevo's REST API.

Authentication

BREVO_KEY=$(cat ~/.config/brevo/api_key)

All requests require header: api-key: $BREVO_KEY

Base URL

https://api.brevo.com/v3

Common Endpoints

Contacts

Action Method Endpoint
Create contact POST /contacts
Get contact GET /contacts/{email}
Update contact PUT /contacts/{email}
Delete contact DELETE /contacts/{email}
List contacts GET /contacts?limit=50&offset=0
Get blacklisted GET /contacts?emailBlacklisted=true

Lists

Action Method Endpoint
Get all lists GET /contacts/lists
Create list POST /contacts/lists
Get list contacts GET /contacts/lists/{listId}/contacts
Add to list POST /contacts/lists/{listId}/contacts/add
Remove from list POST /contacts/lists/{listId}/contacts/remove

Emails

Action Method Endpoint
Send transactional POST /smtp/email
Send campaign POST /emailCampaigns
Get templates GET /smtp/templates

Examples

Create/Update Contact

curl -X POST "https://api.brevo.com/v3/contacts" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "listIds": [10],
    "updateEnabled": true,
    "attributes": {
      "NOMBRE": "John",
      "APELLIDOS": "Doe"
    }
  }'

Get Contact Info

curl "https://api.brevo.com/v3/contacts/[email protected]" \
  -H "api-key: $BREVO_KEY"

Update Contact Attributes

curl -X PUT "https://api.brevo.com/v3/contacts/[email protected]" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "listIds": [10, 15],
    "attributes": {
      "CUSTOM_FIELD": "value"
    }
  }'

Send Transactional Email

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sender": {"name": "My App", "email": "[email protected]"},
    "to": [{"email": "[email protected]", "name": "John"}],
    "subject": "Welcome!",
    "htmlContent": "\x3Cp>Hello {{params.name}}\x3C/p>",
    "params": {"name": "John"}
  }'

Send with Template

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": [{"email": "[email protected]"}],
    "templateId": 34,
    "params": {
      "NOMBRE": "John",
      "FECHA": "2026-02-01"
    }
  }'

List All Contact Lists

curl "https://api.brevo.com/v3/contacts/lists?limit=50" \
  -H "api-key: $BREVO_KEY"

Add Contacts to List (Bulk)

curl -X POST "https://api.brevo.com/v3/contacts/lists/10/contacts/add" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "emails": ["[email protected]", "[email protected]"]
  }'

Safe Import Pattern

When importing contacts, always respect unsubscribes:

import requests

BREVO_KEY = "your-api-key"
HEADERS = {'api-key': BREVO_KEY, 'Content-Type': 'application/json'}
BASE = 'https://api.brevo.com/v3'

def get_blacklisted():
    """Get all unsubscribed/blacklisted emails"""
    blacklisted = set()
    offset = 0
    while True:
        r = requests.get(
            f'{BASE}/contacts?limit=100&offset={offset}&emailBlacklisted=true',
            headers=HEADERS
        )
        contacts = r.json().get('contacts', [])
        if not contacts:
            break
        for c in contacts:
            blacklisted.add(c['email'].lower())
        offset += 100
    return blacklisted

def safe_import(emails, list_id):
    """Import contacts respecting unsubscribes"""
    blacklisted = get_blacklisted()
    
    for email in emails:
        if email.lower() in blacklisted:
            print(f"Skipped (unsubscribed): {email}")
            continue
        
        r = requests.post(f'{BASE}/contacts', headers=HEADERS, json={
            'email': email,
            'listIds': [list_id],
            'updateEnabled': True
        })
        
        if r.status_code in [200, 201, 204]:
            print(f"Imported: {email}")
        else:
            print(f"Error: {email} - {r.text[:50]}")

Contact Attributes

Brevo uses custom attributes for contact data:

{
  "attributes": {
    "NOMBRE": "John",
    "APELLIDOS": "Doe",
    "FECHA_ALTA": "2026-01-15",
    "PLAN": "premium",
    "CUSTOM_FIELD": "any value"
  }
}

Create attributes in Brevo dashboard: Contacts → Settings → Contact attributes.

Response Codes

Code Meaning
200 Success (GET)
201 Created (POST)
204 Success, no content (PUT/DELETE)
400 Bad request (check payload)
401 Invalid API key
404 Contact/resource not found

Best Practices

  1. Always check blacklist before importing contacts
  2. Use updateEnabled: true to update existing contacts instead of failing
  3. Use templates for consistent transactional emails
  4. Batch operations when adding many contacts to lists
  5. Store list IDs in config, not hardcoded
  6. Log imports for audit trail

Automations

Brevo automations trigger on:

  • Contact added to list
  • Contact attribute updated
  • Email opened/clicked
  • Custom events via API

Trigger automation manually:

curl -X POST "https://api.brevo.com/v3/contacts/import" \
  -H "api-key: $BREVO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "listIds": [10],
    "emailBlacklist": false,
    "updateExistingContacts": true,
    "emptyContactsAttributes": false,
    "jsonBody": [
      {"email": "[email protected]", "attributes": {"NOMBRE": "John"}}
    ]
  }'

Useful Queries

# Count contacts in list
curl "https://api.brevo.com/v3/contacts/lists/10" -H "api-key: $BREVO_KEY" | jq '.totalSubscribers'

# Get recent contacts
curl "https://api.brevo.com/v3/contacts?limit=10&sort=desc" -H "api-key: $BREVO_KEY"

# Check if email exists
curl "https://api.brevo.com/v3/contacts/[email protected]" -H "api-key: $BREVO_KEY"

# Get account info
curl "https://api.brevo.com/v3/account" -H "api-key: $BREVO_KEY"
Usage Guidance
This skill appears to be a straightforward Brevo API cookbook, but it implicitly expects an API key at ~/.config/brevo/api_key (or a BREVO_KEY env var) even though the registry metadata lists no credentials. Before installing or invoking it: - Confirm how the agent will supply the Brevo API key. Either ensure you place a key at ~/.config/brevo/api_key with appropriate permissions or modify the skill to expect a declared environment variable (and add that to the metadata). - Limit the API key's permissions to only what's necessary (sending emails / managing contacts) and rotate/revoke it if you stop using the skill. - If you don't want the agent to read files automatically, ask the skill author to change the instructions to read the key from a declared env var or to prompt the user at runtime. - Because the skill can be invoked autonomously by the agent (default), ensure the agent's execution policy and access to your home config directory are acceptable. These mismatches look like sloppy metadata rather than malicious intent, but treat the implicit file read as a secret-access risk until resolved.
Capability Analysis
Type: OpenClaw Skill Name: brevo Version: 1.0.0 The skill bundle is benign, providing instructions and examples for interacting with the legitimate Brevo (Sendinblue) email marketing API. It instructs the agent to retrieve the `BREVO_KEY` from `~/.config/brevo/api_key`, which is a standard and necessary practice for API authentication. All network requests are directed to the official `https://api.brevo.com/v3` domain, and there is no evidence of data exfiltration to unauthorized endpoints, malicious execution, persistence mechanisms, obfuscation, or prompt injection attempts against the agent in SKILL.md.
Capability Assessment
Purpose & Capability
The name/description (Brevo email API) align with the documented endpoints and examples in SKILL.md. The operations (contacts, lists, sending emails) are coherent with the stated purpose.
Instruction Scope
The runtime instructions explicitly read a local secret file (BREVO_KEY=$(cat ~/.config/brevo/api_key)) and then include that value in API requests. While reading an API key is expected for this integration, the skill's instructions reference a specific filesystem path that was NOT declared in the skill metadata. There are no other out-of-scope filesystem reads or unexpected network endpoints — all network calls are to api.brevo.com.
Install Mechanism
This is an instruction-only skill with no install spec or code files, so nothing is written to disk by an installer. That minimizes install-time risk.
Credentials
The registry metadata lists no required environment variables or primary credential, yet the SKILL.md expects BREVO_KEY (sourced from ~/.config/brevo/api_key) to authenticate requests. The skill implicitly assumes a local secret file or an environment variable, but the lack of declared required credentials is inconsistent and may lead the agent to read a local file unexpectedly.
Persistence & Privilege
The skill is not always-enabled and does not request persistent system-wide changes. It does not declare modifications to other skills or global agent configuration.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install brevo
  3. After installation, invoke the skill by name or use /brevo
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
- Initial release of Brevo email marketing API skill. - Provides guides for managing contacts, lists, transactional emails, and campaigns. - Includes authentication setup and common API endpoint references. - Offers practical code examples for importing contacts, sending emails, and managing lists. - Documents safe import patterns and best practices for handling unsubscribes and updates. - Lists useful queries and automation triggers for effective email marketing workflows.
Metadata
Slug brevo
Version 1.0.0
License
All-time Installs 1
Active Installs 1
Total Versions 1
Frequently Asked Questions

What is Brevo?

Brevo (formerly Sendinblue) email marketing API for managing contacts, lists, sending transactional emails, and campaigns. Use when importing contacts, sending emails, managing subscriptions, or working with email automation. It is an AI Agent Skill for Claude Code / OpenClaw, with 2517 downloads so far.

How do I install Brevo?

Run "/install brevo" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Brevo free?

Yes, Brevo is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Brevo support?

Brevo is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Brevo?

It is built and maintained by yuj es yoga (@yujesyoga); the current version is v1.0.0.

💬 Comments