MailerLite
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 gr
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 gr
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Access the MailerLite API with managed OAuth authentication. Manage subscribers, groups, campaigns, automations, forms, fields, segments, and webhooks.
# 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_KEY
Environment Variable: Set your API key as
MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your MailerLite OAuth connections at
https://ctrl.maton.ai.
python <<'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
python <<'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
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:
{ "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.
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
If you have multiple MailerLite connections, specify which one to use with the
Maton-Connection header:
python <<'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.
GET /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: groupsGET /mailerlite/api/subscribers/{subscriber_id_or_email}
POST /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.
PUT /mailerlite/api/subscribers/{subscriber_id} Content-Type: application/json{ "fields": { "name": "Jane Doe" }, "status": "active" }
DELETE /mailerlite/api/subscribers/{subscriber_id}
GET /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)POST /mailerlite/api/subscribers/{subscriber_id}/forget
GET /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)POST /mailerlite/api/groups Content-Type: application/json{ "name": "Newsletter Subscribers" }
PUT /mailerlite/api/groups/{group_id} Content-Type: application/json{ "name": "Updated Group Name" }
DELETE /mailerlite/api/groups/{group_id}
GET /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 cursorPOST /mailerlite/api/subscribers/{subscriber_id}/groups/{group_id}
DELETE /mailerlite/api/subscribers/{subscriber_id}/groups/{group_id}
GET /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)GET /mailerlite/api/campaigns/{campaign_id}
POST /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"] }
PUT /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.
POST /mailerlite/api/campaigns/{campaign_id}/schedule Content-Type: application/json{ "delivery": "instant" }
For scheduled delivery:
{ "delivery": "scheduled", "schedule": { "date": "2026-03-15", "hours": "10", "minutes": "30" } }
POST /mailerlite/api/campaigns/{campaign_id}/cancel
Reverts a ready campaign to draft status.
DELETE /mailerlite/api/campaigns/{campaign_id}
GET /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)GET /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)GET /mailerlite/api/automations/{automation_id}
POST /mailerlite/api/automations Content-Type: application/json{ "name": "Welcome Series" }
Creates a draft automation.
GET /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)DELETE /mailerlite/api/automations/{automation_id}
GET /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)POST /mailerlite/api/fields Content-Type: application/json{ "name": "Company", "type": "text" }
PUT /mailerlite/api/fields/{field_id} Content-Type: application/json{ "name": "Organization" }
DELETE /mailerlite/api/fields/{field_id}
GET /mailerlite/api/segments
Query parameters:
limit - Results per page (max 250)page - Page number (starts from 1)GET /mailerlite/api/segments/{segment_id}/subscribers
Query parameters:
filter[status] - Filter by status: active, unsubscribed, unconfirmed, bounced, junklimit - Results per pagecursor - Pagination cursorPUT /mailerlite/api/segments/{segment_id} Content-Type: application/json{ "name": "High Engagement Subscribers" }
DELETE /mailerlite/api/segments/{segment_id}
GET /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)GET /mailerlite/api/forms/{form_id}
PUT /mailerlite/api/forms/{form_id} Content-Type: application/json{ "name": "Newsletter Signup" }
DELETE /mailerlite/api/forms/{form_id}
GET /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 cursorGET /mailerlite/api/webhooks
GET /mailerlite/api/webhooks/{webhook_id}
POST /mailerlite/api/webhooks Content-Type: application/json{ "name": "Subscriber Updates", "events": ["subscriber.created", "subscriber.updated"], "url": "https://example.com/webhook" }
PUT /mailerlite/api/webhooks/{webhook_id} Content-Type: application/json{ "name": "Updated Webhook", "enabled": true }
DELETE /mailerlite/api/webhooks/{webhook_id}
MailerLite uses cursor-based pagination for most endpoints and page-based pagination for some.
GET /mailerlite/api/subscribers?limit=25&cursor=eyJpZCI6MTIzNDU2fQ
Response includes pagination links:
{ "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 } }
GET /mailerlite/api/groups?limit=25&page=2
Response includes page metadata:
{ "data": [...], "meta": { "current_page": 2, "from": 26, "last_page": 4, "per_page": 25, "to": 50, "total": 100 } }
const 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();
import os import requestsresponse = requests.get( 'https://gateway.maton.ai/mailerlite/api/subscribers', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'limit': 10} ) data = response.json()
import os import requestsresponse = 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:echo $MATON_API_KEY
python <<'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/subscribersNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.