--- name: brevo description: | Brevo API integration with managed OAuth. Email marketing, transactional emails, SMS, contacts, and CRM. Use this skill when users want to send emails, manage contacts, create campaigns, or work with Brevo lists and templates. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. metadata: author: maton version: "1.0" clawdbot: emoji: 🧠requires: env: - MATON_API_KEY --- # Brevo Access the Brevo API with managed OAuth authentication. Send transactional emails, manage contacts and lists, create email campaigns, and work with templates. ## Quick Start ```bash # Get account info python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/brevo/v3/account') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ## Base URL ``` https://gateway.maton.ai/brevo/v3/{resource} ``` The gateway proxies requests to `api.brevo.com` and automatically injects your OAuth token. ## Authentication All requests require the Maton API key in the Authorization header: ``` Authorization: Bearer $MATON_API_KEY ``` **Environment Variable:** Set your API key as `MATON_API_KEY`: ```bash export MATON_API_KEY="YOUR_API_KEY" ``` ### Getting Your API Key 1. Sign in or create an account at [maton.ai](https://maton.ai) 2. Go to [maton.ai/settings](https://maton.ai/settings) 3. Copy your API key ## Connection Management Manage your Brevo OAuth connections at `https://ctrl.maton.ai`. ### List Connections ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=brevo&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Create Connection ```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'brevo'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Get Connection ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` **Response:** ```json { "connection": { "connection_id": "b04dd695-d056-433b-baf9-0fb4eb3bde9e", "status": "ACTIVE", "creation_time": "2026-02-09T19:51:00.932629Z", "last_updated_time": "2026-02-09T19:51:30.123456Z", "url": "https://connect.maton.ai/?session_token=...", "app": "brevo", "metadata": {} } } ``` Open the returned `url` in a browser to complete OAuth authorization. ### Delete Connection ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Specifying Connection If you have multiple Brevo connections, specify which one to use with the `Maton-Connection` header: ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/brevo/v3/account') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', 'b04dd695-d056-433b-baf9-0fb4eb3bde9e') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` If omitted, the gateway uses the default (oldest) active connection. ## API Reference ### Account #### Get Account Info ```bash GET /brevo/v3/account ``` **Response:** ```json { "email": "user@example.com", "firstName": "John", "lastName": "Doe", "companyName": "Acme Inc", "relay": { "enabled": true, "data": { "userName": "user@smtp-brevo.com", "relay": "smtp-relay.brevo.com", "port": 587 } } } ``` ### Contacts #### List Contacts ```bash GET /brevo/v3/contacts ``` **Query Parameters:** - `limit` - Number of results per page (default: 50, max: 500) - `offset` - Index of first result (0-based) - `modifiedSince` - Filter by modification date (ISO 8601) **Response:** ```json { "contacts": [ { "id": 1, "email": "contact@example.com", "emailBlacklisted": false, "smsBlacklisted": false, "createdAt": "2026-02-09T20:33:59.705+01:00", "modifiedAt": "2026-02-09T20:35:19.529+01:00", "listIds": [2], "attributes": { "FIRSTNAME": "John", "LASTNAME": "Doe" } } ], "count": 1 } ``` #### Get Contact ```bash GET /brevo/v3/contacts/{identifier} ``` The identifier can be email address, phone number, or contact ID. **Query Parameters:** - `identifierType` - Type of identifier: `email_id`, `phone_id`, `contact_id`, `ext_id` #### Create Contact ```bash POST /brevo/v3/contacts Content-Type: application/json { "email": "newcontact@example.com", "attributes": { "FIRSTNAME": "Jane", "LASTNAME": "Smith" }, "listIds": [2], "updateEnabled": false } ``` **Response:** ```json { "id": 2 } ``` Set `updateEnabled: true` to update the contact if it already exists. #### Update Contact ```bash PUT /brevo/v3/contacts/{identifier} Content-Type: application/json { "attributes": { "FIRSTNAME": "Updated", "LASTNAME": "Name" } } ``` Returns 204 No Content on success. #### Delete Contact ```bash DELETE /brevo/v3/contacts/{identifier} ``` Returns 204 No Content on success. #### Get Contact Campaign Stats ```bash GET /brevo/v3/contacts/{identifier}/campaignStats ``` ### Lists #### List All Lists ```bash GET /brevo/v3/contacts/lists ``` **Response:** ```json { "lists": [ { "id": 2, "name": "Newsletter Subscribers", "folderId": 1, "uniqueSubscribers": 150, "totalBlacklisted": 2, "totalSubscribers": 148 } ], "count": 1 } ``` #### Get List ```bash GET /brevo/v3/contacts/lists/{listId} ``` #### Create List ```bash POST /brevo/v3/contacts/lists Content-Type: application/json { "name": "New List", "folderId": 1 } ``` **Response:** ```json { "id": 3 } ``` #### Update List ```bash PUT /brevo/v3/contacts/lists/{listId} Content-Type: application/json { "name": "Updated List Name" } ``` Returns 204 No Content on success. #### Delete List ```bash DELETE /brevo/v3/contacts/lists/{listId} ``` Returns 204 No Content on success. #### Get Contacts in List ```bash GET /brevo/v3/contacts/lists/{listId}/contacts ``` #### Add Contacts to List ```bash POST /brevo/v3/contacts/lists/{listId}/contacts/add Content-Type: application/json { "emails": ["contact1@example.com", "contact2@example.com"] } ``` #### Remove Contacts from List ```bash POST /brevo/v3/contacts/lists/{listId}/contacts/remove Content-Type: application/json { "emails": ["contact1@example.com"] } ``` ### Folders #### List Folders ```bash GET /brevo/v3/contacts/folders ``` **Response:** ```json { "folders": [ { "id": 1, "name": "Marketing", "uniqueSubscribers": 500, "totalSubscribers": 480, "totalBlacklisted": 20 } ], "count": 1 } ``` #### Get Folder ```bash GET /brevo/v3/contacts/folders/{folderId} ``` #### Create Folder ```bash POST /brevo/v3/contacts/folders Content-Type: application/json { "name": "New Folder" } ``` **Response:** ```json { "id": 4 } ``` #### Update Folder ```bash PUT /brevo/v3/contacts/folders/{folderId} Content-Type: application/json { "name": "Renamed Folder" } ``` Returns 204 No Content on success. #### Delete Folder ```bash DELETE /brevo/v3/contacts/folders/{folderId} ``` Deletes folder and all lists within it. Returns 204 No Content on success. #### Get Lists in Folder ```bash GET /brevo/v3/contacts/folders/{folderId}/lists ``` ### Attributes #### List Attributes ```bash GET /brevo/v3/contacts/attributes ``` **Response:** ```json { "attributes": [ { "name": "FIRSTNAME", "category": "normal", "type": "text" }, { "name": "LASTNAME", "category": "normal", "type": "text" } ] } ``` #### Create Attribute ```bash POST /brevo/v3/contacts/attributes/{category}/{attributeName} Content-Type: application/json { "type": "text" } ``` Categories: `normal`, `transactional`, `category`, `calculated`, `global` #### Update Attribute ```bash PUT /brevo/v3/contacts/attributes/{category}/{attributeName} Content-Type: application/json { "value": "new value" } ``` #### Delete Attribute ```bash DELETE /brevo/v3/contacts/attributes/{category}/{attributeName} ``` ### Transactional Emails #### Send Email ```bash POST /brevo/v3/smtp/email Content-Type: application/json { "sender": { "name": "John Doe", "email": "john@example.com" }, "to": [ { "email": "recipient@example.com", "name": "Jane Smith" } ], "subject": "Welcome!", "htmlContent": "
Welcome to our service.
" } ``` **Response:** ```json { "messageId": "<202602092329.12910305853@smtp-relay.mailin.fr>" } ``` **Optional Parameters:** - `cc` - Carbon copy recipients - `bcc` - Blind carbon copy recipients - `replyTo` - Reply-to address - `textContent` - Plain text version - `templateId` - Use a template instead of htmlContent - `params` - Template parameters - `attachment` - File attachments - `headers` - Custom headers - `tags` - Email tags for tracking - `scheduledAt` - Schedule for later (ISO 8601) #### Get Transactional Emails ```bash GET /brevo/v3/smtp/emails ``` **Query Parameters:** - `email` - Filter by recipient email - `templateId` - Filter by template - `messageId` - Filter by message ID - `startDate` - Start date (YYYY-MM-DD) - `endDate` - End date (YYYY-MM-DD) - `limit` - Results per page - `offset` - Starting index #### Delete Scheduled Email ```bash DELETE /brevo/v3/smtp/email/{identifier} ``` The identifier can be a messageId or batchId. #### Get Email Statistics ```bash GET /brevo/v3/smtp/statistics/events ``` **Query Parameters:** - `limit` - Results per page - `offset` - Starting index - `startDate` - Start date - `endDate` - End date - `email` - Filter by recipient - `event` - Filter by event type: `delivered`, `opened`, `clicked`, `bounced`, etc. ### Email Templates #### List Templates ```bash GET /brevo/v3/smtp/templates ``` **Response:** ```json { "count": 1, "templates": [ { "id": 1, "name": "Welcome Email", "subject": "Welcome {{params.name}}!", "isActive": true, "sender": { "name": "Company", "email": "noreply@company.com" }, "htmlContent": "...", "createdAt": "2026-02-09 23:29:38", "modifiedAt": "2026-02-09 23:29:38" } ] } ``` #### Get Template ```bash GET /brevo/v3/smtp/templates/{templateId} ``` #### Create Template ```bash POST /brevo/v3/smtp/templates Content-Type: application/json { "sender": { "name": "Company", "email": "noreply@company.com" }, "templateName": "Welcome Email", "subject": "Welcome {{params.name}}!", "htmlContent": "