Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
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.
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.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Manage contacts, send emails, and automate marketing via Brevo's REST API.
BREVO_KEY=$(cat ~/.config/brevo/api_key) All requests require header: api-key: $BREVO_KEY
https://api.brevo.com/v3
ActionMethodEndpointCreate contactPOST/contactsGet contactGET/contacts/{email}Update contactPUT/contacts/{email}Delete contactDELETE/contacts/{email}List contactsGET/contacts?limit=50&offset=0Get blacklistedGET/contacts?emailBlacklisted=true
ActionMethodEndpointGet all listsGET/contacts/listsCreate listPOST/contacts/listsGet list contactsGET/contacts/lists/{listId}/contactsAdd to listPOST/contacts/lists/{listId}/contacts/addRemove from listPOST/contacts/lists/{listId}/contacts/remove
ActionMethodEndpointSend transactionalPOST/smtp/emailSend campaignPOST/emailCampaignsGet templatesGET/smtp/templates
curl -X POST "https://api.brevo.com/v3/contacts" \ -H "api-key: $BREVO_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "user@example.com", "listIds": [10], "updateEnabled": true, "attributes": { "NOMBRE": "John", "APELLIDOS": "Doe" } }'
curl "https://api.brevo.com/v3/contacts/user@example.com" \ -H "api-key: $BREVO_KEY"
curl -X PUT "https://api.brevo.com/v3/contacts/user@example.com" \ -H "api-key: $BREVO_KEY" \ -H "Content-Type: application/json" \ -d '{ "listIds": [10, 15], "attributes": { "CUSTOM_FIELD": "value" } }'
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": "noreply@example.com"}, "to": [{"email": "user@example.com", "name": "John"}], "subject": "Welcome!", "htmlContent": "<p>Hello {{params.name}}</p>", "params": {"name": "John"} }'
curl -X POST "https://api.brevo.com/v3/smtp/email" \ -H "api-key: $BREVO_KEY" \ -H "Content-Type: application/json" \ -d '{ "to": [{"email": "user@example.com"}], "templateId": 34, "params": { "NOMBRE": "John", "FECHA": "2026-02-01" } }'
curl "https://api.brevo.com/v3/contacts/lists?limit=50" \ -H "api-key: $BREVO_KEY"
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": ["user1@example.com", "user2@example.com"] }'
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]}")
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.
CodeMeaning200Success (GET)201Created (POST)204Success, no content (PUT/DELETE)400Bad request (check payload)401Invalid API key404Contact/resource not found
Always check blacklist before importing contacts Use updateEnabled: true to update existing contacts instead of failing Use templates for consistent transactional emails Batch operations when adding many contacts to lists Store list IDs in config, not hardcoded Log imports for audit trail
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": "user@example.com", "attributes": {"NOMBRE": "John"}} ] }'
# 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/user@example.com" -H "api-key: $BREVO_KEY" # Get account info curl "https://api.brevo.com/v3/account" -H "api-key: $BREVO_KEY"
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.