Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MailerLite API integration with managed OAuth. Manage email subscribers, groups, campaigns, automations, and forms. Use this skill when users want to add subscribers, create email campaigns, manage groups, or work with MailerLite automations. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 199% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 500% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 193% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 466% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 298% | 0% |
Access the MailerLite API with managed OAuth authentication. Manage subscribers, groups, campaigns, automations, forms, fields, segments, and webhooks.
bash# List subscribers python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/mailerlite/api/subscribers?limit=10') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
https://gateway.maton.ai/mailerlite/{native-api-path}Replace {native-api-path} with the actual MailerLite API endpoint path. The gateway proxies requests to connect.mailerlite.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEYEnvironment Variable: Set your API key as MATON_API_KEY:
bashexport MATON_API_KEY="YOUR_API_KEY"
Manage your MailerLite OAuth connections at https://ctrl.maton.ai.
bashpython <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=mailerlite&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
bashpython <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'mailerlite'}).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
bashpython <<'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": "21fd90f9-5935-43cd-b6c8-bde9d915ca80", "status": "ACTIVE", "creation_time": "2025-12-08T07:20:53.488460Z", "last_updated_time": "2026-01-31T20:03:32.593153Z", "url": "https://connect.maton.ai/?session_token=...", "app": "mailerlite", "metadata": {} } }
Open the returned url in a browser to complete OAuth authorization.
bashpython <<'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
If you have multiple MailerLite connections, specify which one to use with the Maton-Connection header:
bashpython <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/mailerlite/api/subscribers') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
If omitted, the gateway uses the default (oldest) active connection.
bashGET /mailerlite/api/subscribers
Query parameters:
filter[status] - Filter by status: active, unsubscribed, unconfirmed, bounced, junklimit - Results per page (default: 25)cursor - Pagination cursorinclude - Include related data: groupsbashGET /mailerlite/api/subscribers/{subscriber_id_or_email}
bashPOST /mailerlite/api/subscribers Content-Type: application/json { "email": "subscriber@example.com", "fields": { "name": "John Doe", "company": "Acme Inc" }, "groups": ["12345678901234567"], "status": "active" }
Returns 201 for new subscribers, 200 for updates.
bashPUT /mailerlite/api/subscribers/{subscriber_id} Content-Type: application/json { "fields": { "name": "Jane Doe" }, "status": "active" }
bashDELETE /mailerlite/api/subscribers/{subscriber_id}
bashGET /mailerlite/api/subscribers/{subscriber_id}/activity-log
Query parameters:
filter[log_name] - Filter by activity type: campaign_send, automation_email_sent, email_open, link_click, email_bounce, spam_complaint, unsubscribedlimit - Results per page (default: 100)page - Page number (starts from 1)bashPOST /mailerlite/api/subscribers/{subscriber_id}/forget
bashGET /mailerlite/api/groups
Query parameters:
limit - Results per pagepage - Page number (starts from 1)filter[name] - Filter by name (partial match)sort - Sort by: name, total, open_rate, click_rate, created_at (prepend - for descending)bashPOST /mailerlite/api/groups Content-Type: application/json { "name": "Newsletter Subscribers" }
bashPUT /mailerlite/api/groups/{group_id} Content-Type: application/json { "name": "Updated Group Name" }
bashDELETE /mailerlite/api/groups/{group_id}
bashGET /mailerlite/api/groups/{group_id}/subscribers
Query parameters:
filter[status] - Filter by status: active, unsubscribed, unconfirmed, bounced, junklimit - Results per page (1-1000, default: 50)cursor - Pagination cursorbashPOST /mailerlite/api/subscribers/{subscriber_id}/groups/{group_id}
bashDELETE /mailerlite/api/subscribers/{subscriber_id}/groups/{group_id}
bashGET /mailerlite/api/campaigns
Query parameters:
filter[status] - Filter by status: sent, draft, readyfilter[type] - Filter by type: regular, ab, resend, rsslimit - Results per page: 10, 25, 50, or 100 (default: 25)page - Page number (starts from 1)bashGET /mailerlite/api/campaigns/{campaign_id}
bashPOST /mailerlite/api/campaigns Content-Type: application/json { "name": "My Newsletter", "type": "regular", "emails": [ { "subject": "Weekly Update", "from_name": "Newsletter", "from": "newsletter@example.com" } ], "groups": ["12345678901234567"] }
bashPUT /mailerlite/api/campaigns/{campaign_id} Content-Type: application/json { "name": "Updated Campaign Name", "emails": [ { "subject": "New Subject Line", "from_name": "Newsletter", "from": "newsletter@example.com" } ] }
Note: Only draft campaigns can be updated.
bashPOST /mailerlite/api/campaigns/{campaign_id}/schedule Content-Type: application/json { "delivery": "instant" }
For scheduled delivery:
json{ "delivery": "scheduled", "schedule": { "date": "2026-03-15", "hours": "10", "minutes": "30" } }
bashPOST /mailerlite/api/campaigns/{campaign_id}/cancel
Reverts a ready campaign to draft status.
bashDELETE /mailerlite/api/campaigns/{campaign_id}
bashGET /mailerlite/api/campaigns/{campaign_id}/reports/subscriber-activity
Query parameters:
filter[type] - Filter by activity: opened, unopened, clicked, unsubscribed, forwarded, hardbounced, softbounced, junkfilter[search] - Search by emaillimit - Results per page (10, 25, 50, or 100)page - Page number (starts from 1)bashGET /mailerlite/api/automations
Query parameters:
filter[enabled] - Filter by status: true or falsefilter[name] - Filter by namefilter[group] - Filter by group IDpage - Page number (starts from 1)limit - Results per page (default: 10)bashGET /mailerlite/api/automations/{automation_id}
bashPOST /mailerlite/api/automations Content-Type: application/json { "name": "Welcome Series" }
Creates a draft automation.
bashGET /mailerlite/api/automations/{automation_id}/activity
Query parameters:
filter[status] - Required: completed, active, canceled, failedfilter[date_from] - Start date (Y-m-d)filter[date_to] - End date (Y-m-d)filter[search] - Search by emailpage - Page number (starts from 1)limit - Results per page (default: 10)bashDELETE /mailerlite/api/automations/{automation_id}
bashGET /mailerlite/api/fields
Query parameters:
limit - Results per page (max 100)page - Page number (starts from 1)filter[keyword] - Filter by keyword (partial match)filter[type] - Filter by type: text, number, datesort - Sort by: name, type (prepend - for descending)bashPOST /mailerlite/api/fields Content-Type: application/json { "name": "Company", "type": "text" }
bashPUT /mailerlite/api/fields/{field_id} Content-Type: application/json { "name": "Organization" }
bashDELETE /mailerlite/api/fields/{field_id}
bashGET /mailerlite/api/segments
Query parameters:
limit - Results per page (max 250)page - Page number (starts from 1)bashGET /mailerlite/api/segments/{segment_id}/subscribers
Query parameters:
filter[status] - Filter by status: active, unsubscribed, unconfirmed, bounced, junklimit - Results per pagecursor - Pagination cursorbashPUT /mailerlite/api/segments/{segment_id} Content-Type: application/json { "name": "High Engagement Subscribers" }
bashDELETE /mailerlite/api/segments/{segment_id}
bashGET /mailerlite/api/forms/{type}
Path parameters:
type - Form type: popup, embedded, promotionQuery parameters:
limit - Results per pagepage - Page number (starts from 1)filter[name] - Filter by name (partial match)sort - Sort by: created_at, name, conversions_count, opens_count, visitors, conversion_rate, last_registration_at (prepend - for descending)bashGET /mailerlite/api/forms/{form_id}
bashPUT /mailerlite/api/forms/{form_id} Content-Type: application/json { "name": "Newsletter Signup" }
bashDELETE /mailerlite/api/forms/{form_id}
bashGET /mailerlite/api/forms/{form_id}/subscribers
Query parameters:
filter[status] - Filter by status: active, unsubscribed, unconfirmed, bounced, junklimit - Results per page (default: 25)cursor - Pagination cursorbashGET /mailerlite/api/webhooks
bashGET /mailerlite/api/webhooks/{webhook_id}
bashPOST /mailerlite/api/webhooks Content-Type: application/json { "name": "Subscriber Updates", "events": ["subscriber.created", "subscriber.updated"], "url": "https://example.com/webhook" }
bashPUT /mailerlite/api/webhooks/{webhook_id} Content-Type: application/json { "name": "Updated Webhook", "enabled": true }
bashDELETE /mailerlite/api/webhooks/{webhook_id}
MailerLite uses cursor-based pagination for most endpoints and page-based pagination for some.
bashGET /mailerlite/api/subscribers?limit=25&cursor=eyJpZCI6MTIzNDU2fQ
Response includes pagination links:
json{ "data": [...], "links": { "first": "https://connect.mailerlite.com/api/subscribers?cursor=...", "last": null, "prev": null, "next": "https://connect.mailerlite.com/api/subscribers?cursor=eyJpZCI6MTIzNDU2fQ" }, "meta": { "path": "https://connect.mailerlite.com/api/subscribers", "per_page": 25, "next_cursor": "eyJpZCI6MTIzNDU2fQ", "prev_cursor": null } }
bashGET /mailerlite/api/groups?limit=25&page=2
Response includes page metadata:
json{ "data": [...], "meta": { "current_page": 2, "from": 26, "last_page": 4, "per_page": 25, "to": 50, "total": 100 } }
javascriptconst response = await fetch( 'https://gateway.maton.ai/mailerlite/api/subscribers?limit=10', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json();
pythonimport os import requests response = requests.get( 'https://gateway.maton.ai/mailerlite/api/subscribers', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'limit': 10} ) data = response.json()
pythonimport os import requests response = requests.post( 'https://gateway.maton.ai/mailerlite/api/subscribers', headers={ 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'application/json' }, json={ 'email': 'newuser@example.com', 'fields': {'name': 'John Doe'}, 'status': 'active' } ) data = response.json()
X-Version: YYYY-MM-DD headercurl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning | |--------|---------| | 400 | Missing MailerLite connection | | 401 | Invalid or missing Maton API key | | 403 | Forbidden - insufficient permissions | | 404 | Resource not found | | 422 | Validation error | | 429 | Rate limited (120 req/min) | | 4xx/5xx | Passthrough error from MailerLite API |
MATON_API_KEY environment variable is set:bashecho $MATON_API_KEY
bashpython <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
mailerlite. For example:https://gateway.maton.ai/mailerlite/api/subscribershttps://gateway.maton.ai/api/subscribersOther measured skills in the registry, with their headline benchmark lift.