Agent skill

Mailchimp

by CraftOS-dev in CraftOS-dev/CraftBot

Mailchimp Marketing API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

MITAuto-check passedMarketing & SEO

Install Mailchimp

skills CLI
$ npx skills add CraftOS-dev/CraftBot --skill mailchimp -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install CraftOS-dev/CraftBot mailchimp --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/CraftOS-dev/CraftBot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mailchimp .claude/skills/mailchimp && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mailchimp
GitHub stars
392
Used in
1 other repo
Token cost
~5.9k tokens
SKILL.md length
887 words
Files
4
Skills in repo
89
Repo updated
First seen
Licence
MIT

At a glance

Mailchimp Marketing API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

  • Works in 3 steps: Sign in or create an account at maton.ai → Go to maton.ai/settings → Copy your API key
  • Users want to manage email marketing
  • SKILL.md covers Quick Start, Base URL, Authentication and Connection Management, plus 6 more sections
  • Calls python and curl; reaches gateway.maton.ai and ctrl.maton.ai; needs MATON_API_KEY

What it does

Mailchimp is an agent skill from CraftOS-dev/CraftBot. Mailchimp Marketing API integration with managed OAuth. Access audiences, campaigns, templates, automations, reports, and manage subscribers. Use this skill when users want to manage email marketing, subscriber lists, or automate email campaigns. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).

Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files (for example `.clawhub/origin.json` and `_meta.json`). Compatibility notes: Requires network access and valid Maton API key

It sits in Marketing & SEO, covering Email marketing. It works with Mailchimp. The repository describes itself as: One agent. Every kind of work. The licence is MIT.

When your agent uses it

  • Users want to manage email marketing
  • Subscriber lists
  • Automate email campaigns

Example prompts

  • “/mailchimp”

Requirements

  • Python 3
  • A credential in MATON_API_KEY
  • A credential in YOUR_API_KEY
  • Compatibility (from SKILL.md): Requires network access and valid Maton API key

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

What it can do on your machine

Read from SKILL.md and the folder at commit b50970c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • gateway.maton.ai
    • ctrl.maton.ai
    • mailchimp.com
    • connect.maton.ai

    Also links to:

    • maton.ai
    • discord.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • MATON_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Requires network access and valid Maton API key

    From compatibility in the SKILL.md frontmatter.

Context cost

Mailchimp loads about 5.9k tokens when it runs. Until then it costs about 88 tokens; SKILL.md has 887 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~88
When it runs · the whole SKILL.md, loaded when a task matches
~5.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from CraftOS-dev/CraftBot at commit b50970c, republished under its MIT licence (© CraftOS-dev). 887 words, ~5,926 tokens.

Download SKILL.mdSave it as .claude/skills/mailchimp/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
mailchimp
description
Mailchimp Marketing API integration with managed OAuth. Access audiences, campaigns, templates, automations, reports, and manage subscribers. Use this skill when users want to manage email marketing, subscriber lists, or automate email campaigns. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
compatibility
Requires network access and valid Maton API key
metadata.author
maton
metadata.version
1.0

Mailchimp

Access the Mailchimp Marketing API with managed OAuth authentication. Manage audiences, campaigns, templates, automations, reports, and subscribers for email marketing.

Quick Start

bash
# List all audiences
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists')
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/mailchimp/{native-api-path}

Replace {native-api-path} with the actual Mailchimp API endpoint path (e.g., 3.0/lists). The gateway proxies requests to your Mailchimp data center 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
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Mailchimp 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=mailchimp&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': 'mailchimp'}).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": "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": "mailchimp",
    "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 Mailchimp 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/mailchimp/3.0/lists')
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.

API Reference

Lists (Audiences)

Within the Mailchimp app, "audience" is the common term, but the API uses "lists" for endpoints.

Get All Lists
bash
GET /mailchimp/3.0/lists

Query parameters:

  • count - Number of records to return (default 10, max 1000)
  • offset - Number of records to skip (for pagination)
  • fields - Comma-separated list of fields to include
  • exclude_fields - Comma-separated list of fields to exclude

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists?count=10')
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
{
  "lists": [
    {
      "id": "abc123def4",
      "name": "Newsletter Subscribers",
      "contact": {
        "company": "Acme Corp",
        "address1": "123 Main St"
      },
      "stats": {
        "member_count": 5000,
        "unsubscribe_count": 100,
        "open_rate": 0.25
      }
    }
  ],
  "total_items": 1
}
Get a List
bash
GET /mailchimp/3.0/lists/{list_id}

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create a List
bash
POST /mailchimp/3.0/lists
Content-Type: application/json

{
  "name": "Newsletter",
  "contact": {
    "company": "Acme Corp",
    "address1": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "US"
  },
  "permission_reminder": "You signed up for our newsletter",
  "campaign_defaults": {
    "from_name": "Acme Corp",
    "from_email": "newsletter@acme.com",
    "subject": "",
    "language": "en"
  },
  "email_type_option": true
}
Update a List
bash
PATCH /mailchimp/3.0/lists/{list_id}
Delete a List
bash
DELETE /mailchimp/3.0/lists/{list_id}
List Members (Subscribers)

Members are contacts within an audience. The API uses MD5 hash of the lowercase email address as the subscriber identifier.

Get List Members
bash
GET /mailchimp/3.0/lists/{list_id}/members

Query parameters:

  • status - Filter by subscription status (subscribed, unsubscribed, cleaned, pending, transactional)
  • count - Number of records to return
  • offset - Number of records to skip

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4/members?status=subscribed&count=50')
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
{
  "members": [
    {
      "id": "f4b7c8d9e0",
      "email_address": "john@example.com",
      "status": "subscribed",
      "merge_fields": {
        "FNAME": "John",
        "LNAME": "Doe"
      },
      "tags": [
        {"id": 1, "name": "VIP"}
      ]
    }
  ],
  "total_items": 500
}
Get a Member
bash
GET /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}

The subscriber_hash is the MD5 hash of the lowercase email address.

Example:

bash
# For email "john@example.com", subscriber_hash = md5("john@example.com")
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4/members/b4c9a0d1e2f3g4h5')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Add a Member
bash
POST /mailchimp/3.0/lists/{list_id}/members
Content-Type: application/json

{
  "email_address": "newuser@example.com",
  "status": "subscribed",
  "merge_fields": {
    "FNAME": "Jane",
    "LNAME": "Smith"
  },
  "tags": ["Newsletter", "Premium"]
}

Example:

bash
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'email_address': 'newuser@example.com', 'status': 'subscribed', 'merge_fields': {'FNAME': 'Jane', 'LNAME': 'Smith'}}).encode()
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4/members', 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
Update a Member
bash
PATCH /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}

Example:

bash
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'merge_fields': {'FNAME': 'Jane', 'LNAME': 'Doe'}}).encode()
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4/members/b4c9a0d1e2f3g4h5', data=data, method='PATCH')
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
Add or Update a Member (Upsert)
bash
PUT /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}
Content-Type: application/json

{
  "email_address": "user@example.com",
  "status_if_new": "subscribed",
  "merge_fields": {
    "FNAME": "Jane",
    "LNAME": "Smith"
  }
}

Creates a new member or updates an existing one based on the email hash. Use status_if_new to set the status when creating a new member.

Delete a Member

Archives a member (can be re-added later):

bash
DELETE /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}

Returns 204 No Content on success.

To permanently delete (GDPR compliant):

bash
POST /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}/actions/delete-permanent
Member Tags
Get Member Tags
bash
GET /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}/tags
Add or Remove Tags
bash
POST /mailchimp/3.0/lists/{list_id}/members/{subscriber_hash}/tags
Content-Type: application/json

{
  "tags": [
    {"name": "VIP", "status": "active"},
    {"name": "Old Tag", "status": "inactive"}
  ]
}

Returns 204 No Content on success.

Segments
Get Segments
bash
GET /mailchimp/3.0/lists/{list_id}/segments

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists/abc123def4/segments')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create a Segment
bash
POST /mailchimp/3.0/lists/{list_id}/segments
Content-Type: application/json

{
  "name": "Active Subscribers",
  "options": {
    "match": "all",
    "conditions": [
      {
        "condition_type": "EmailActivity",
        "field": "opened",
        "op": "date_within",
        "value": "30"
      }
    ]
  }
}
Update a Segment
bash
PATCH /mailchimp/3.0/lists/{list_id}/segments/{segment_id}
Get Segment Members
bash
GET /mailchimp/3.0/lists/{list_id}/segments/{segment_id}/members
Delete a Segment
bash
DELETE /mailchimp/3.0/lists/{list_id}/segments/{segment_id}

Returns 204 No Content on success.

Campaigns
Get All Campaigns
bash
GET /mailchimp/3.0/campaigns

Query parameters:

  • type - Campaign type (regular, plaintext, absplit, rss, variate)
  • status - Campaign status (save, paused, schedule, sending, sent)
  • list_id - Filter by list ID
  • count - Number of records to return
  • offset - Number of records to skip

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/campaigns?status=sent&count=20')
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
{
  "campaigns": [
    {
      "id": "campaign123",
      "type": "regular",
      "status": "sent",
      "settings": {
        "subject_line": "Monthly Newsletter",
        "from_name": "Acme Corp"
      },
      "send_time": "2025-02-01T10:00:00Z",
      "report_summary": {
        "opens": 1500,
        "clicks": 300,
        "open_rate": 0.30,
        "click_rate": 0.06
      }
    }
  ],
  "total_items": 50
}
Get a Campaign
bash
GET /mailchimp/3.0/campaigns/{campaign_id}
Create a Campaign
bash
POST /mailchimp/3.0/campaigns
Content-Type: application/json

{
  "type": "regular",
  "recipients": {
    "list_id": "abc123def4"
  },
  "settings": {
    "subject_line": "Your Monthly Update",
    "from_name": "Acme Corp",
    "reply_to": "hello@acme.com"
  }
}

Example:

bash
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'type': 'regular', 'recipients': {'list_id': 'abc123def4'}, 'settings': {'subject_line': 'February Newsletter', 'from_name': 'Acme Corp', 'reply_to': 'newsletter@acme.com'}}).encode()
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/campaigns', 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
Update a Campaign
bash
PATCH /mailchimp/3.0/campaigns/{campaign_id}
Delete a Campaign
bash
DELETE /mailchimp/3.0/campaigns/{campaign_id}

Returns 204 No Content on success.

Get Campaign Content
bash
GET /mailchimp/3.0/campaigns/{campaign_id}/content
Set Campaign Content
bash
PUT /mailchimp/3.0/campaigns/{campaign_id}/content
Content-Type: application/json

{
  "html": "<html><body><h1>Hello!</h1><p>Newsletter content here.</p></body></html>",
  "plain_text": "Hello! Newsletter content here."
}

Or use a template:

bash
PUT /mailchimp/3.0/campaigns/{campaign_id}/content
Content-Type: application/json

{
  "template": {
    "id": 12345,
    "sections": {
      "body": "<p>Custom content for the template section</p>"
    }
  }
}
Get Campaign Send Checklist

Check if a campaign is ready to send:

bash
GET /mailchimp/3.0/campaigns/{campaign_id}/send-checklist
Send a Campaign
bash
POST /mailchimp/3.0/campaigns/{campaign_id}/actions/send
Schedule a Campaign
bash
POST /mailchimp/3.0/campaigns/{campaign_id}/actions/schedule
Content-Type: application/json

{
  "schedule_time": "2025-03-01T10:00:00+00:00"
}
Cancel a Scheduled Campaign
bash
POST /mailchimp/3.0/campaigns/{campaign_id}/actions/cancel-send
Templates
Get All Templates
bash
GET /mailchimp/3.0/templates

Query parameters:

  • type - Template type (user, base, gallery)
  • count - Number of records to return
  • offset - Number of records to skip

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/templates?type=user')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get a Template
bash
GET /mailchimp/3.0/templates/{template_id}
Get Template Default Content
bash
GET /mailchimp/3.0/templates/{template_id}/default-content
Create a Template
bash
POST /mailchimp/3.0/templates
Content-Type: application/json

{
  "name": "Newsletter Template",
  "html": "<html><body mc:edit=\"body\"><h1>Title</h1><p>Content here</p></body></html>"
}
Update a Template
bash
PATCH /mailchimp/3.0/templates/{template_id}
Delete a Template
bash
DELETE /mailchimp/3.0/templates/{template_id}

Returns 204 No Content on success.

Automations

Mailchimp's classic automations let you build email series triggered by dates, activities, or events.

Show full SKILL.md (348 more words)Show less
Get All Automations
bash
GET /mailchimp/3.0/automations

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/automations')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Get an Automation
bash
GET /mailchimp/3.0/automations/{workflow_id}
Start an Automation
bash
POST /mailchimp/3.0/automations/{workflow_id}/actions/start-all-emails
Pause an Automation
bash
POST /mailchimp/3.0/automations/{workflow_id}/actions/pause-all-emails
Get Automation Emails
bash
GET /mailchimp/3.0/automations/{workflow_id}/emails
Add Subscriber to Automation Queue

Manually add a subscriber to an automation workflow:

bash
POST /mailchimp/3.0/automations/{workflow_id}/emails/{workflow_email_id}/queue
Content-Type: application/json

{
  "email_address": "subscriber@example.com"
}
Reports
Get Campaign Reports
bash
GET /mailchimp/3.0/reports

Query parameters:

  • count - Number of records to return
  • offset - Number of records to skip
  • type - Campaign type

Example:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/reports?count=20')
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
{
  "reports": [
    {
      "id": "campaign123",
      "campaign_title": "Monthly Newsletter",
      "emails_sent": 5000,
      "opens": {
        "opens_total": 1500,
        "unique_opens": 1200,
        "open_rate": 0.24
      },
      "clicks": {
        "clicks_total": 450,
        "unique_clicks": 300,
        "click_rate": 0.06
      },
      "unsubscribed": 10,
      "bounce_rate": 0.02
    }
  ]
}
Get Campaign Report
bash
GET /mailchimp/3.0/reports/{campaign_id}
Get Campaign Open Details
bash
GET /mailchimp/3.0/reports/{campaign_id}/open-details
Get Campaign Click Details
bash
GET /mailchimp/3.0/reports/{campaign_id}/click-details
Get List Activity
bash
GET /mailchimp/3.0/lists/{list_id}/activity

Returns recent daily aggregated activity stats (unsubscribes, signups, opens, clicks) for up to 180 days.

Batch Operations

Process multiple operations in a single call.

Create Batch Operation
bash
POST /mailchimp/3.0/batches
Content-Type: application/json

{
  "operations": [
    {
      "method": "POST",
      "path": "/lists/abc123def4/members",
      "body": "{\"email_address\":\"user1@example.com\",\"status\":\"subscribed\"}"
    },
    {
      "method": "POST",
      "path": "/lists/abc123def4/members",
      "body": "{\"email_address\":\"user2@example.com\",\"status\":\"subscribed\"}"
    }
  ]
}
Get Batch Status
bash
GET /mailchimp/3.0/batches/{batch_id}
List All Batches
bash
GET /mailchimp/3.0/batches
Delete a Batch
bash
DELETE /mailchimp/3.0/batches/{batch_id}

Returns 204 No Content on success.

Pagination

Mailchimp uses offset-based pagination:

bash
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/mailchimp/3.0/lists?count=50&offset=100')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Response includes total_items for calculating total pages:

json
{
  "lists": [...],
  "total_items": 250
}

Code Examples

JavaScript
javascript
const response = await fetch(
  'https://gateway.maton.ai/mailchimp/3.0/lists',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();
Python
python
import os
import requests
import hashlib

# Get lists
response = requests.get(
    "https://gateway.maton.ai/mailchimp/3.0/lists",
    headers={"Authorization": f"Bearer {os.environ['MATON_API_KEY']}"},
)
data = response.json()

# Add a subscriber
list_id = "abc123def4"
email = "newuser@example.com"

response = requests.post(
    f"https://gateway.maton.ai/mailchimp/3.0/lists/{list_id}/members",
    headers={
        "Authorization": f"Bearer {os.environ['MATON_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={"email_address": email, "status": "subscribed"},
)

# Get subscriber hash for updates
subscriber_hash = hashlib.md5(email.lower().encode()).hexdigest()

Notes

  • List IDs are 10-character alphanumeric strings
  • Subscriber hashes are MD5 hashes of lowercase email addresses
  • Timestamps are in ISO 8601 format
  • The API has a 120-second timeout on calls
  • Maximum 1000 records per request for list endpoints
  • "Audience" and "list" are used interchangeably (app vs API terminology)
  • "Contact" and "member" are used interchangeably (app vs API terminology)
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.

Response Codes

StatusMeaning
200Success with response body
204Success with no content (DELETE, some POST operations)
400Bad request or missing Mailchimp connection
401Invalid or missing Maton API key
403Forbidden - insufficient permissions
404Resource not found
405Method not allowed
429Rate limited
4xx/5xxPassthrough error from Mailchimp API

Mailchimp error responses include detailed information:

json
{
  "type": "https://mailchimp.com/developer/marketing/docs/errors/",
  "title": "Invalid Resource",
  "status": 400,
  "detail": "The resource submitted could not be validated.",
  "instance": "abc123-def456",
  "errors": [
    {
      "field": "email_address",
      "message": "This value should be a valid email."
    }
  ]
}
Troubleshooting: API Key Issues
  1. Check that the MATON_API_KEY environment variable is set:
bash
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
bash
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
Troubleshooting: Invalid App Name
  1. Ensure your URL path starts with mailchimp. For example:
  • Correct: https://gateway.maton.ai/mailchimp/3.0/lists
  • Incorrect: https://gateway.maton.ai/3.0/lists

Resources

© CraftOS-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in skills/mailchimp of CraftOS-dev/CraftBot.

  • SKILL.md
  • .clawhub/origin.json
  • LICENSE.txt
  • _meta.json

Open the folder on GitHubat commit b50970c

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in CraftOS-dev/CraftBot, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Mailchimp next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Mailchimp compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mailchimp this skillCraftOS-dev/CraftBot3921 repos~5.9kAutomated safety check: PassMIT
Mailchimp Integrationhewi333/Mom-n-Pop-Skills122—~2kAutomated safety check: PassMIT
CLI Anything MailchimpHKUDS/CLI-Anything52k—~2.4kAutomated safety check: PassApache-2.0
14 Email Marketing Globalminhnv0807/ai-business-skills608—~2.4kAutomated safety check: PassMIT
Ecommerce Email Marketing BuilderLeoYeAI/openclaw-master-skills2.2k1 repos~6.2kAutomated safety check: PassMIT
Connectindranilbanerjee/digital-marketing-pro8541 repos~2kAutomated safety check: PassMIT

Similar skills

  • Mailchimp Integration

    hewi333/Mom-n-Pop-Skills

    A skill your agent uses when integrating with Mailchimp for audience management, campaigns, and automation.

    122 GitHub stars~2k tokensUpdated 26 days ago
    Marketing & SEOAuto-check passed
  • CLI Anything Mailchimp

    HKUDS/CLI-Anything

    CLI harness for the Mailchimp Marketing API v3.0 — 303 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more).

    52k GitHub stars~2.4k tokensUpdated 15 days ago
    Marketing & SEOAuto-check passed
  • 14 Email Marketing Global

    minhnv0807/ai-business-skills

    A skill your agent uses when the user needs email or lifecycle automation — welcome series, nurture, abandoned cart, re-engagement, broadcast, and transactional flows with subject lines…

    608 GitHub stars~2.4k tokensUpdated 25 days ago
    Marketing & SEOAuto-check passed
  • Ecommerce Email Marketing Builder

    LeoYeAI/openclaw-master-skills

    E-commerce email marketing system builder. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub starsUsed in 1 repo~6.2k tokens
    Marketing & SEOAuto-check passed
  • Connect

    indranilbanerjee/digital-marketing-pro

    Guide the connection of a known MCP integration to the plugin — looks up the connector registry via connector-status.py, checks current status, and returns transport-specific setup steps (OAuth for…

    854 GitHub starsUsed in 1 repo~2k tokens
    Marketing & SEOAuto-check passed
  • Marketing Automation

    indranilbanerjee/digital-marketing-pro

    Design marketing automation programs — end-to-end workflow architecture, lead scoring models with MQL/SQL thresholds, nurture and drip sequences, behavioral triggers, lifecycle stage frameworks…

    854 GitHub starsUsed in 1 repo~4.7k tokens
    Marketing & SEOAuto-check passed

More from CraftOS-dev/CraftBot

All 89 skills in this repo
  • Self Improvement

    CraftOS-dev/CraftBot

    Captures learnings, errors, and corrections to enable continuous improvement.

    392 GitHub starsUsed in 5 repos~4.9k tokens
    Auto-check passed
  • Bbc News

    CraftOS-dev/CraftBot

    Fetch and display BBC News stories from various sections and regions via RSS feeds.

    392 GitHub starsUsed in 2 repos~555 tokens
    Auto-check passed
  • Outlook

    CraftOS-dev/CraftBot

    Read, search, and manage Outlook emails and calendar via Microsoft Graph API.

    392 GitHub starsUsed in 2 repos~1.8k tokens
    Auto-check passed
  • Nano Banana Pro

    CraftOS-dev/CraftBot

    Generate/edit images with Nano Banana Pro (Gemini 3 Pro Image).

    392 GitHub starsUsed in 6 repos~1.4k tokens
    Auto-check passed
  • Airweave

    CraftOS-dev/CraftBot

    Context retrieval layer for AI agents across users' applications.

    392 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Telegram Bot Manager

    CraftOS-dev/CraftBot

    Manage and configure Telegram bots for OpenClaw. An agent skill from CraftOS-dev/CraftBot.

    392 GitHub stars~836 tokensUpdated today
    Auto-check passed

Works with

Questions about Mailchimp

What does Mailchimp do?

Mailchimp Marketing API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot. Mailchimp is an agent skill from CraftOS-dev/CraftBot. Mailchimp Marketing API integration with managed OAuth.

When should I use Mailchimp?

Mailchimp fits situations like: users want to manage email marketing; subscriber lists; automate email campaigns.

How do I install Mailchimp in Claude Code?

Run `npx skills add CraftOS-dev/CraftBot --skill mailchimp -a claude-code`. Or copy the skill folder (skills/mailchimp in CraftOS-dev/CraftBot) into .claude/skills/mailchimp in your project. Claude Code loads it when a task matches its description.

How do I install Mailchimp in Codex?

Run `npx skills add CraftOS-dev/CraftBot --skill mailchimp -a codex`. Or copy the skill folder (skills/mailchimp in CraftOS-dev/CraftBot) into .agents/skills/mailchimp in your project. Codex loads it when a task matches its description.

Can I use Mailchimp in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add CraftOS-dev/CraftBot --skill mailchimp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mailchimp, .gemini/skills/mailchimp, .github/skills/mailchimp and .opencode/skills/mailchimp in your project.

What does Mailchimp need to run?

Going by SKILL.md and its folder, Mailchimp needs the command-line tools its instructions call (python and curl) and credentials named MATON_API_KEY. Our summary lists: Python 3; A credential in MATON_API_KEY; A credential in YOUR_API_KEY. Compatibility (from SKILL.md): Requires network access and valid Maton API key.

Does Mailchimp access the network?

SKILL.md names 6 domains. In commands or code: gateway.maton.ai, ctrl.maton.ai, mailchimp.com and connect.maton.ai; the agent is likely to contact these when it follows the instructions. As links in the text: maton.ai and discord.com. This is read from the text; nothing was executed.

Is Mailchimp safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Mailchimp use?

Mailchimp is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Mailchimp use?

About 5.9k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Mailchimp?

Skills that share tags, products or a category with Mailchimp: Mailchimp Integration (hewi333/Mom-n-Pop-Skills, 122 stars), CLI Anything Mailchimp (HKUDS/CLI-Anything, 52k stars), 14 Email Marketing Global (minhnv0807/ai-business-skills, 608 stars) and Ecommerce Email Marketing Builder (LeoYeAI/openclaw-master-skills, 2.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Mailchimp?

CraftOS-dev (a GitHub user) maintains it in CraftOS-dev/CraftBot, which has 392 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 7, 2026.

Source: CraftOS-dev/CraftBot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.