数据分析

ActiveCampaign

试用

通过托管 OAuth 管理 ActiveCampaign 联系人、商机、自动化与营销活动,所有写入操作均需用户确认。

它能做什么

通过托管 OAuth 网关访问 ActiveCampaign API,可对联系人、商机、标签、列表、自动化、邮件营销活动、自定义字段、备注、账户和用户执行增删改查。所有写入操作执行前都必须获得用户明确确认;创建 Webhook 时,账户事件数据会发往外部地址,因此必须先确认目标 URL、订阅事件与意图。用户与账户管理属于影响团队共享资源的管理类操作,需要额外确认。默认只发起读取和列表类调用,存在多个连接时必须指明要使用的连接。

什么时候用它

  • 批量维护联系人及其列表订阅关系
  • 创建或调整商机、阶段与销售管道
  • 为账户事件配置对外推送的 Webhook
  • 按邮箱在已连接账户间同步联系人

技能文档

ActiveCampaign

Access the ActiveCampaign API with managed OAuth authentication. Manage contacts, deals, tags, lists, automations, and email campaigns.

Quick Start

# List all contacts
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/active-campaign/api/3/contacts')
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://api.maton.ai/active-campaign/{native-api-path}

Maton proxies requests to {account}.api-us1.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:

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 ActiveCampaign OAuth connections at https://api.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=active-campaign&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

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'active-campaign'}).encode()
req = urllib.request.Request('https://api.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

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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": "{connection_id}",
    "status": "ACTIVE",
    "creation_time": "2026-02-09T20:03:16.595823Z",
    "last_updated_time": "2026-02-09T20:04:09.550767Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "active-campaign",
    "metadata": {}
  }
}

Open the returned url in a browser to complete OAuth authorization.

Delete Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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 ActiveCampaign connections, specify which one to use with the Maton-Connection header:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/active-campaign/api/3/contacts')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always include this header to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to contacts, deals, lists, campaigns, automations, tags, users, accounts, custom fields, notes, and webhooks within the connected ActiveCampaign account.
  • All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
  • Webhooks send data to external URLs. Creating a webhook causes account event data to be transmitted to the specified destination. Confirm the URL, events, and intent with the user before creating.
  • User and account management are administrative operations that affect shared resources and team access. Confirm before modifying.

API Reference

Contacts

List Contacts

GET /active-campaign/api/3/contacts

Query Parameters:

  • limit - Number of results (default: 20)
  • offset - Starting index
  • search - Search by email
  • filters[email] - Filter by email
  • filters[listid] - Filter by list ID

Response:

{
  "contacts": [
    {
      "id": "1",
      "email": "user@example.com",
      "firstName": "John",
      "lastName": "Doe",
      "phone": "",
      "cdate": "2026-02-09T14:03:19-06:00",
      "udate": "2026-02-09T14:03:19-06:00"
    }
  ],
  "meta": {
    "total": "1"
  }
}

Get Contact

GET /active-campaign/api/3/contacts/{contactId}

Returns contact with related data including lists, tags, deals, and field values.

Create Contact

POST /active-campaign/api/3/contacts
Content-Type: application/json

{
  "contact": {
    "email": "newcontact@example.com",
    "firstName": "John",
    "lastName": "Doe",
    "phone": "555-1234"
  }
}

Response:

{
  "contact": {
    "id": "2",
    "email": "newcontact@example.com",
    "firstName": "John",
    "lastName": "Doe",
    "cdate": "2026-02-09T17:51:39-06:00",
    "udate": "2026-02-09T17:51:39-06:00"
  }
}

Update Contact

PUT /active-campaign/api/3/contacts/{contactId}
Content-Type: application/json

{
  "contact": {
    "firstName": "Updated",
    "lastName": "Name"
  }
}

Delete Contact

DELETE /active-campaign/api/3/contacts/{contactId}

Returns 200 OK on success.

Sync Contact (Create or Update)

POST /active-campaign/api/3/contact/sync
Content-Type: application/json

{
  "contact": {
    "email": "user@example.com",
    "firstName": "Updated Name"
  }
}

Creates the contact if it doesn't exist, updates if it does.

Tags

List Tags

GET /active-campaign/api/3/tags

Response:

{
  "tags": [
    {
      "id": "1",
      "tag": "VIP Customer",
      "tagType": "contact",
      "description": "High-value customers",
      "cdate": "2026-02-09T17:51:39-06:00"
    }
  ],
  "meta": {
    "total": "1"
  }
}

Get Tag

GET /active-campaign/api/3/tags/{tagId}

Create Tag

POST /active-campaign/api/3/tags
Content-Type: application/json

{
  "tag": {
    "tag": "New Tag",
    "tagType": "contact",
    "description": "Tag description"
  }
}

Update Tag

PUT /active-campaign/api/3/tags/{tagId}
Content-Type: application/json

{
  "tag": {
    "tag": "Updated Tag Name"
  }
}

Delete Tag

DELETE /active-campaign/api/3/tags/{tagId}

Contact Tags

Add Tag to Contact

POST /active-campaign/api/3/contactTags
Content-Type: application/json

{
  "contactTag": {
    "contact": "2",
    "tag": "1"
  }
}

Remove Tag from Contact

DELETE /active-campaign/api/3/contactTags/{contactTagId}

Get Contact's Tags

GET /active-campaign/api/3/contacts/{contactId}/contactTags

Lists

List All Lists

GET /active-campaign/api/3/lists

Response:

{
  "lists": [
    {
      "id": "1",
      "stringid": "master-contact-list",
      "name": "Master Contact List",
      "cdate": "2026-02-09T14:03:20-06:00"
    }
  ],
  "meta": {
    "total": "1"
  }
}

Get List

GET /active-campaign/api/3/lists/{listId}

Create List

POST /active-campaign/api/3/lists
Content-Type: application/json

{
  "list": {
    "name": "New List",
    "stringid": "new-list",
    "sender_url": "https://example.com",
    "sender_reminder": "You signed up on our website"
  }
}

Update List

PUT /active-campaign/api/3/lists/{listId}
Content-Type: application/json

{
  "list": {
    "name": "Updated List Name"
  }
}

Delete List

DELETE /active-campaign/api/3/lists/{listId}

Contact Lists

Subscribe Contact to List

POST /active-campaign/api/3/contactLists
Content-Type: application/json

{
  "contactList": {
    "contact": "2",
    "list": "1",
    "status": "1"
  }
}

Status values: 1 = subscribed, 2 = unsubscribed

Deals

List Deals

GET /active-campaign/api/3/deals

Query Parameters:

  • search - Search by title, contact, or org
  • filters[stage] - Filter by stage ID
  • filters[owner] - Filter by owner ID

Response:

{
  "deals": [
    {
      "id": "1",
      "title": "New Deal",
      "value": "10000",
      "currency": "usd",
      "stage": "1",
      "owner": "1"
    }
  ],
  "meta": {
    "total": 0,
    "currencies": []
  }
}

Get Deal

GET /active-campaign/api/3/deals/{dealId}

Create Deal

POST /active-campaign/api/3/deals
Content-Type: application/json

{
  "deal": {
    "title": "New Deal",
    "value": "10000",
    "currency": "usd",
    "contact": "2",
    "stage": "1",
    "owner": "1"
  }
}

Update Deal

PUT /active-campaign/api/3/deals/{dealId}
Content-Type: application/json

{
  "deal": {
    "title": "Updated Deal",
    "value": "15000"
  }
}

Delete Deal

DELETE /active-campaign/api/3/deals/{dealId}

Deal Stages

List Deal Stages

GET /active-campaign/api/3/dealStages

Create Deal Stage

POST /active-campaign/api/3/dealStages
Content-Type: application/json

{
  "dealStage": {
    "title": "New Stage",
    "group": "1",
    "order": "1"
  }
}

Deal Groups (Pipelines)

List Pipelines

GET /active-campaign/api/3/dealGroups

Create Pipeline

POST /active-campaign/api/3/dealGroups
Content-Type: application/json

{
  "dealGroup": {
    "title": "Sales Pipeline",
    "currency": "usd"
  }
}

Automations

List Automations

GET /active-campaign/api/3/automations

Response:

{
  "automations": [
    {
      "id": "1",
      "name": "Welcome Series",
      "cdate": "2026-02-09T14:00:00-06:00",
      "mdate": "2026-02-09T14:00:00-06:00",
      "status": "1"
    }
  ],
  "meta": {
    "total": "1"
  }
}

Get Automation

GET /active-campaign/api/3/automations/{automationId}

Campaigns

List Campaigns

GET /active-campaign/api/3/campaigns

Response:

{
  "campaigns": [
    {
      "id": "1",
      "name": "Newsletter",
      "type": "single",
      "status": "0"
    }
  ],
  "meta": {
    "total": "1"
  }
}

Get Campaign

GET /active-campaign/api/3/campaigns/{campaignId}

Users

List Users

GET /active-campaign/api/3/users

Response:

{
  "users": [
    {
      "id": "1",
      "username": "admin",
      "firstName": "John",
      "lastName": "Doe",
      "email": "admin@example.com"
    }
  ]
}

Get User

GET /active-campaign/api/3/users/{userId}

Accounts

List Accounts

GET /active-campaign/api/3/accounts

Create Account

POST /active-campaign/api/3/accounts
Content-Type: application/json

{
  "account": {
    "name": "Acme Inc"
  }
}

Custom Fields

List Fields

GET /active-campaign/api/3/fields

Create Field

POST /active-campaign/api/3/fields
Content-Type: application/json

{
  "field": {
    "type": "text",
    "title": "Custom Field",
    "descript": "A custom field"
  }
}

Field Values

Update Contact Field Value

PUT /active-campaign/api/3/fieldValues/{fieldValueId}
Content-Type: application/json

{
  "fieldValue": {
    "value": "New Value"
  }
}

Notes

List Notes

GET /active-campaign/api/3/notes

Create Note

POST /active-campaign/api/3/notes
Content-Type: application/json

{
  "note": {
    "note": "This is a note",
    "relid": "2",
    "reltype": "Subscriber"
  }
}

Webhooks

List Webhooks

GET /active-campaign/api/3/webhooks

Create Webhook

POST /active-campaign/api/3/webhooks
Content-Type: application/json

{
  "webhook": {
    "name": "My Webhook",
    "url": "https://example.com/webhook",
    "events": ["subscribe", "unsubscribe"],
    "sources": ["public", "admin"]
  }
}

Pagination

ActiveCampaign uses offset-based pagination:

GET /active-campaign/api/3/contacts?limit=20&offset=0

Parameters:

  • limit - Results per page (default: 20)
  • offset - Starting index

Response includes meta:

{
  "contacts": [...],
  "meta": {
    "total": "150"
  }
}

For large datasets, use orders[id]=ASC and id_greater parameter for better performance:

GET /active-campaign/api/3/contacts?orders[id]=ASC&id_greater=100

Code Examples

JavaScript

const response = await fetch(
  'https://api.maton.ai/active-campaign/api/3/contacts',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();
console.log(data.contacts);

Python

import os
import requests

response = requests.get(
    'https://api.maton.ai/active-campaign/api/3/contacts',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
data = response.json()
print(data['contacts'])

Python (Create Contact with Tag)

import os
import requests

headers = {
    'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
    'Content-Type': 'application/json'
}

# Create contact
contact_response = requests.post(
    'https://api.maton.ai/active-campaign/api/3/contacts',
    headers=headers,
    json={
        'contact': {
            'email': 'newuser@example.com',
            'firstName': 'New',
            'lastName': 'User'
        }
    }
)
contact = contact_response.json()['contact']
print(f"Created contact ID: {contact['id']}")

# Add tag to contact
tag_response = requests.post(
    'https://api.maton.ai/active-campaign/api/3/contactTags',
    headers=headers,
    json={
        'contactTag': {
            'contact': contact['id'],
            'tag': '1'
        }
    }
)
print("Tag added to contact")

Notes

  • All endpoints require the /api/3/ prefix
  • Request bodies use singular resource names wrapped in an object (e.g., {"contact": {...}})
  • IDs are returned as strings
  • Timestamps are in ISO 8601 format with timezone
  • Rate limit: 5 requests per second per account
  • DELETE operations return 200 OK (not 204)
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

StatusMeaning
400Missing ActiveCampaign connection or bad request
401Invalid or missing Maton API key
404Resource not found
422Validation error
429Rate limited (5 req/sec)
4xx/5xxPassthrough error from ActiveCampaign API

Error responses include details:

{
  "errors": [
    {
      "title": "The contact email is required",
      "source": {
        "pointer": "/data/attributes/email"
      }
    }
  ]
}

Troubleshooting: Invalid API Key

When you receive an "Invalid API key" error, ALWAYS follow these steps before concluding there is an issue:

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Resources

常见问题

写入操作是如何处理的?
所有创建、更新和删除调用都需要用户明确确认。技能在执行前会核对目标资源与预期影响,并将用户与账户相关的变更视为影响共享资源的管理操作。
创建 Webhook 时会发生什么?
创建 Webhook 会将账户事件数据发送到你指定的 URL。技能会要求你先确认目标地址、订阅的事件类型和操作意图,然后再继续。
可以同时管理多个 ActiveCampaign 账户吗?
可以,每个账户都是独立的 OAuth 连接。存在多个连接时,需在请求中带上 Maton-Connection 头来指定本次调用要使用的账户。

相关技能

通过托管 OAuth 代理读写 Mailchimp 受众、订阅者、活动、分组和标签。

565 次安装12 星标

通过托管 OAuth 访问 HubSpot CRM API,管理联系人、公司、商机及对象关联。

187 次安装5 星标

通过统一认证入口管理 Constant Contact 的联系人、列表、营销活动、标签和分析数据。

213 次安装3 星标

通过托管 OAuth 代理调用 Brevo 联系人、列表、模板和邮件活动接口。

152 次安装3 星标

通过托管 OAuth 以编程方式访问 ClickFunnels 2.0 的联系人、商品、订单、课程、表单和 Webhook。

147 次安装3 星标

通过托管认证的代理 REST API 管理 Twenty CRM 的公司、人员、商机、备注和任务记录。

23 次安装