Skip to content

Subscriber API Documentation

Subscriber management endpoints for managing email list subscribers, including creation, updates, imports, exports, tagging, and journey management.

Create a Subscriber

POST /api/v1/subscriber.create

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
EmailAddressStringYesEmail address of the subscriber
StatusStringNoSubscription status: Opt-In Pending, Subscribed, Opt-Out Pending, Unsubscribed (default: Subscribed)
OptInDateStringNoOpt-in date in Y-m-d or Y-m-d H:i:s format
SubscriptionDateStringConditionalRequired if Status is Subscribed or Opt-In Pending (Y-m-d or Y-m-d H:i:s format)
SubscriptionIPStringConditionalRequired if Status is Subscribed or Opt-In Pending (IP address)
UnsubscriptionDateStringConditionalRequired if Status is Unsubscribed or Opt-Out Pending (Y-m-d or Y-m-d H:i:s format)
UnsubscriptionIPStringConditionalRequired if Status is Unsubscribed or Opt-Out Pending (IP address)
BounceTypeStringNoBounce type: Not Bounced, Soft, Hard (default: Not Bounced)
CustomFieldsObjectNoCustom field values (key: CustomFieldID, value: field value)
OptInConfirmationEmailIDIntegerNoEmail ID to send for opt-in confirmation
UpdateIfDuplicateBooleanNoUpdate subscriber if email already exists (default: false)
UpdateIfUnsubscribedBooleanNoUpdate subscriber if previously unsubscribed (default: false)
ApplyBehaviorsBooleanNoApply list subscription behaviors (default: false)
SendConfirmationEmailBooleanNoSend opt-in confirmation email (default: false)
UpdateStatisticsBooleanNoUpdate list statistics (default: false)
TriggerWebServicesBooleanNoTrigger web service integrations (default: false)
TriggerAutoRespondersBooleanNoTrigger autoresponders (default: false)
bash
curl -X POST https://example.com/api/v1/subscriber.create \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.create",
    "SessionID": "your-session-id",
    "ListID": 123,
    "EmailAddress": "subscriber@example.com",
    "Status": "Subscribed",
    "SubscriptionDate": "2025-01-01 12:00:00",
    "SubscriptionIP": "192.168.1.1",
    "CustomFields": {
      "1": "John",
      "2": "Doe"
    }
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "SubscriberInformation": {
    "SubscriberID": 456,
    "EmailAddress": "subscriber@example.com",
    "SubscriptionStatus": "Subscribed",
    "SubscriptionDate": "2025-01-01 12:00:00"
  },
  "Suppressed": false,
  "SubscriberTags": [],
  "SubscriberSegments": [],
  "SubscriberJourneys": [],
  "SubscriberWebsiteEvents": []
}
json
{
  "Success": false,
  "ErrorCode": 2,
  "Errors": [
    {
      "Code": 2,
      "Message": "Missing EmailAddress parameter"
    }
  ]
}
txt
0: Success
1: Missing ListID parameter
2: Missing EmailAddress parameter
3: Invalid EmailAddress
4: Invalid ListID
5: Invalid BounceType value
6: Invalid Status value
7: Invalid SubscriptionDate value
8: Missing SubscriptionDate parameter
9: Missing SubscriptionIP parameter
10: Invalid SubscriptionIP value
11: Missing UnsubscriptionDate parameter
12: Missing UnsubscriptionIP parameter
13: Invalid UnsubscriptionDate value
14: Invalid UnsubscriptionIP value
15: Missing OptInDate parameter
16: Invalid OptInDate value
17: Invalid Custom Field value
18: Subscriber create limit is exceeded
19: Invalid EmailAddress
20: Duplicate EmailAddress
21: Previously unsubscribed EmailAddress
22: Invalid user information
23: Invalid list information
24: Invalid OptInConfirmationEmailID value
25: Invalid OptInConfirmationEmailID (email does not exist or does not belong to user)

Subscribe to a List

POST /api.php

API Usage Notes

  • No authentication required
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.subscribe
ListIDStringYesID of the subscriber list (can be comma-separated for multiple lists)
EmailAddressStringYesEmail address of the subscriber
IPAddressStringYesIP address of the subscriber
CustomFieldNStringNoCustom field values (N = CustomFieldID)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.subscribe",
    "ListID": "123",
    "EmailAddress": "subscriber@example.com",
    "IPAddress": "192.168.1.1",
    "CustomField1": "John",
    "CustomField2": "Doe"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "SubscriberID": 456,
  "RedirectURL": "https://example.com/confirmation",
  "Subscriber": {
    "SubscriberID": 456,
    "EmailAddress": "subscriber@example.com",
    "SubscriptionStatus": "Opt-In Pending"
  }
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing EmailAddress parameter
3: Missing IPAddress parameter
4: Invalid ListID
5: Invalid EmailAddress
6: Required custom field missing
7: Custom field value is not unique
8: Invalid custom field value
9: Duplicate email address
10: Subscription failed
11: Invalid user information
101: Plugin validation failed

Unsubscribe from a List

POST /api.php

API Usage Notes

  • No authentication required
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.unsubscribe
ListIDIntegerYesID of the subscriber list
IPAddressStringYesIP address of the subscriber
EmailAddressStringConditionalEmail address (required if SubscriberID and RulesJSON not provided)
SubscriberIDIntegerConditionalSubscriber ID (required if EmailAddress and RulesJSON not provided)
RulesJSONStringConditionalJSON rules for bulk unsubscription (required if EmailAddress and SubscriberID not provided)
RulesOperatorStringConditionalRules operator: and, or (required if RulesJSON provided)
CampaignIDIntegerNoID of the campaign (for tracking)
EmailIDIntegerNoID of the email (for tracking)
AutoResponderIDIntegerNoID of the autoresponder (for tracking)
ChannelStringNoUnsubscription channel (for tracking)
AddToGlobalSuppressionBooleanNoAdd to global suppression list (default: false)
PreviewIntegerNoPreview mode (1 = don't actually unsubscribe)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.unsubscribe",
    "ListID": 123,
    "EmailAddress": "subscriber@example.com",
    "IPAddress": "192.168.1.1"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "RedirectURL": "https://example.com/unsubscribe-confirmed"
}
json
{
  "Success": false,
  "ErrorCode": 4
}
txt
0: Success
1: Missing ListID parameter
2: Missing IPAddress parameter
3: Missing EmailAddress/SubscriberID parameter
4: Invalid ListID
5: Invalid user information
6: Invalid EmailAddress
7: Subscriber not found
8: Invalid CampaignID
9: Subscriber already unsubscribed
10: Invalid EmailID
11: Invalid query builder response

Delete Subscribers

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Delete
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
SubscriberListIDIntegerYesID of the subscriber list
SubscribersStringConditionalComma-separated subscriber IDs (required if RulesJSON not provided)
RulesJSONStringConditionalJSON rules for bulk deletion (required if Subscribers not provided)
RulesOperatorStringConditionalRules operator: and, or (required if RulesJSON provided)
SuppressedBooleanNoDelete from suppression list instead (default: false)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.delete",
    "SessionID": "your-session-id",
    "SubscriberListID": 123,
    "Subscribers": "456,789,101"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": ""
}
json
{
  "Success": false,
  "ErrorCode": 2,
  "ErrorText": "Missing subscriber list id"
}
txt
0: Success
2: Missing subscriber list id
5: Invalid list id
6: Invalid query builder response

Delete All Subscribers from a List

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Delete
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.delete.all
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
DeleteListTagsBooleanNoAlso delete tag entities (default: false; tag associations always deleted)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.delete.all",
    "SessionID": "your-session-id",
    "ListID": 123,
    "DeleteListTags": false
  }'
json
{
  "Success": true
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
3: Invalid list ID
4: Access denied to this list
5: Failed to delete subscribers
6: Failed to delete tag associations
7: Failed to delete tag entities
8: An error occurred during deletion

Search Subscribers

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Get
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.search
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
OperatorStringYesRules operator: and, or
RulesStringNoLegacy rules format
RulesJSONStringNoJSON rules format
RecordsPerRequestIntegerNoNumber of records to return (default: 25)
RecordsFromIntegerNoOffset for pagination (default: 0)
OrderFieldStringNoField to order by (default: EmailAddress)
OrderTypeStringNoOrder direction: ASC, DESC (default: ASC)
OnlyTotalBooleanNoReturn only total count (default: false)
AddMustHaveFiltersBooleanNoAdd mandatory filters for segment rules (default: false)
DebugQueryBuilderBooleanNoReturn SQL query for debugging (default: false)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.search",
    "SessionID": "your-session-id",
    "ListID": 123,
    "Operator": "and",
    "RulesJSON": "[{\"field\":\"EmailAddress\",\"operator\":\"contains\",\"value\":\"example.com\"}]",
    "RecordsPerRequest": 50,
    "RecordsFrom": 0
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": "",
  "TotalSubscribers": 150,
  "Subscribers": [
    {
      "SubscriberID": 456,
      "EmailAddress": "user@example.com",
      "SubscriptionStatus": "Subscribed",
      "SubscriberTags": [],
      "Suppressed": false,
      "TotalRevenue": 0
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing Operator parameter
3: ListID not found
4: Problem with the segment engine
5: Segment recursion limit exceeded

Import Subscribers (Legacy Multi-Step)

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

DEPRECATED

This is a legacy multi-step import endpoint. Use subscribers.import.post (via /api/v1/subscribers.import) for new integrations.

The modern endpoint provides:

  • Single-step import (no multi-step workflow)
  • Support for CSV, Mailchimp, ActiveCampaign, and Drip imports
  • Better error handling and validation
  • Webhook notifications on completion
  • Tag assignment during import

Request Body Parameters (Step 1):

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.import
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ImportStepIntegerYesImport step: 1 or 2
ListIDIntegerNoID of the subscriber list
ImportTypeStringYesImport type: Copy, File, MySQL
ImportDataStringConditionalCSV data (required if ImportType = Copy)
ImportFileNameStringConditionalFile name (required if ImportType = File)
ImportMySQLHostStringConditionalMySQL host (required if ImportType = MySQL)
ImportMySQLPortIntegerConditionalMySQL port (required if ImportType = MySQL)
ImportMySQLDatabaseStringConditionalMySQL database (required if ImportType = MySQL)
ImportMySQLQueryStringConditionalMySQL query (required if ImportType = MySQL)
FieldTerminatorStringNoField delimiter (default: ,)
FieldEncloserStringNoField encloser (default: ")
MappedFieldsObjectNoField mapping (CustomFieldID: FieldName)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.import",
    "SessionID": "your-session-id",
    "ImportStep": 1,
    "ListID": 123,
    "ImportType": "Copy",
    "ImportData": "email,name\nuser@example.com,John Doe",
    "FieldTerminator": ",",
    "FieldEncloser": "\""
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": "",
  "ImportID": 789,
  "ImportFields": [
    {
      "FIELD1": "email",
      "FIELD2": "name"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ImportType parameter
2: Missing ImportData parameter
3: Invalid ImportStep
4: Invalid ListID
5: Failed to parse CSV data
6: Import record already processed
7: EmailAddress field mapped more than once
8: EmailAddress field not mapped
9: Missing ImportFileName parameter
10: Missing ImportMySQLHost parameter
11: Missing ImportMySQLPort parameter
12: Missing ImportMySQLDatabase parameter
13: Import file does not exist
14: Missing ImportMySQLQuery parameter
15: MySQL connection failed
16: MySQL query failed
17: Import type not supported
18: File size exceeds maximum allowed size

Export Subscribers (Create Export Job)

POST /api/v1/subscribers.export

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.export.post
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
RulesJSONArrayYesJSON rules for filtering subscribers
RulesOperatorStringYesRules operator: and, or
ExportFormatStringYesExport format: csv, json
FieldsToExportArrayYesArray of field names to export
TargetStringNoTarget segment: Active, Suppressed, Unsubscribed, Soft bounced, Hard bounced, or segment ID
bash
curl -X POST https://example.com/api/v1/subscribers.export \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.export.post",
    "SessionID": "your-session-id",
    "ListID": 123,
    "RulesJSON": [],
    "RulesOperator": "and",
    "ExportFormat": "csv",
    "FieldsToExport": ["EmailAddress", "SubscriptionDate"],
    "Target": "Active"
  }'
json
{
  "ExportID": 456
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing ListID parameter"
    }
  ]
}
txt
0: Success
1: Missing ListID parameter
2: Missing RulesJSON parameter
3: Missing RulesOperator parameter
4: Missing ExportFormat parameter
5: Missing FieldsToExport parameter
6: Invalid ListID parameter
7: Invalid RulesJSON syntax
8: RulesOperator must be either "and" or "or"
9: ExportFormat must be either "csv" or "json"
10: List not found
11: Target must be valid status or segment ID
12: Segment not found

Get Export Job Status

GET /api/v1/subscribers.export

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.export.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
ExportIDIntegerNoID of the export job (omit to list all export jobs)
DownloadBooleanNoDownload the export file (only when ExportID provided and status is Completed)
bash
curl -X GET "https://example.com/api/v1/subscribers.export?Command=subscribers.export.get&SessionID=your-session-id&ListID=123&ExportID=456"
json
{
  "ExportJob": {
    "ExportID": 456,
    "Module": "SubscriberExport",
    "Status": "Completed",
    "ExportOptions": {
      "Command": "ExportSubscribers",
      "ListID": 123,
      "FileFormat": "csv",
      "Fields": ["EmailAddress", "SubscriptionDate"]
    },
    "SubmittedAt": "2025-01-01 12:00:00",
    "FinishedAt": "2025-01-01 12:05:00",
    "DownloadSize": 1024000
  }
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing ListID parameter"
    }
  ]
}
txt
0: Success
1: Missing ListID parameter
2: Invalid ListID parameter
3: Invalid ExportID parameter
4: List not found
5: Invalid ExportID parameter
6: Export job not found

Import Subscribers (Modern Single-Step)

POST /api/v1/subscribers.import

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.import.post
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
AddToGlobalSuppressionListBooleanYesAdd failed imports to global suppression
AddToSuppressionListBooleanYesAdd failed imports to list suppression
UpdateDuplicatesBooleanYesUpdate existing subscribers on duplicate
TriggerActionsBooleanYesTrigger autoresponders and journeys
TagsArrayYesArray of tag names to apply to imported subscribers
ImportFromObjectYesImport source configuration
ImportFrom.CSV.URLStringConditionalURL to fetch CSV data (required if ImportFrom.CSV.Data not provided)
ImportFrom.CSV.DataStringConditionalCSV data string (required if ImportFrom.CSV.URL not provided)
ImportFrom.CSV.FieldTerminatorStringYes (for CSV)Field delimiter
ImportFrom.CSV.FieldEncloserStringNoField encloser (default: empty)
ImportFrom.CSV.EscapedByStringYes (for CSV)Escape character
ImportFrom.CSV.MappedFieldsObjectYes (for CSV)Field mapping (FieldName: CustomFieldID or EmailAddress)
ImportStatusUpdateWebhookURLStringNoWebhook URL to notify on import completion
bash
curl -X POST https://example.com/api/v1/subscribers.import \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.import.post",
    "SessionID": "your-session-id",
    "ListID": 123,
    "AddToGlobalSuppressionList": false,
    "AddToSuppressionList": false,
    "UpdateDuplicates": true,
    "TriggerActions": true,
    "Tags": ["newsletter", "2025"],
    "ImportFrom": {
      "CSV": {
        "Data": "email,name\nuser@example.com,John Doe",
        "FieldTerminator": ",",
        "FieldEncloser": "\"",
        "EscapedBy": "\\",
        "MappedFields": {
          "FIELD1": "EmailAddress",
          "FIELD2": "1"
        }
      }
    }
  }'
json
{
  "ImportID": 789,
  "ImportType": "async"
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing ListID parameter"
    }
  ]
}
txt
0: Success
1: Missing ListID parameter
2: Missing FieldTerminator parameter
4: Missing AddToGlobalSuppressionList parameter
5: Missing AddToSuppressionList parameter
6: Missing UpdateDuplicates parameter
7: Missing TriggerActions parameter
8: Missing MappedFields parameter
9: Invalid AddToGlobalSuppressionList parameter
10: Invalid AddToSuppressionList parameter
11: Invalid UpdateDuplicates parameter
12: Invalid TriggerActions parameter
13: Invalid MappedFields parameter
14: ImportFrom source must be provided
15: Fields are not mapped
16: Missing EscapedBy parameter
17: Field mapping is invalid
18: ImportFrom.CSV.URL remote data fetch failure
19: List not found
20: Invalid ListID parameter / Failed to create import record
21: Missing Tags parameter

Get Import Job Status

GET /api/v1/subscribers.import

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.import.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
ImportIDIntegerYesID of the import job
bash
curl -X GET "https://example.com/api/v1/subscribers.import?Command=subscribers.import.get&SessionID=your-session-id&ListID=123&ImportID=789"
json
{
  "ImportJob": {
    "ImportID": 789,
    "ImportDate": "2025-01-01 12:00:00",
    "FinishedAt": "2025-01-01 12:05:00",
    "ImportStatus": "Completed",
    "FailedData": "",
    "TotalSubscribers": 1000,
    "TotalImported": 950,
    "TotalDuplicates": 30,
    "TotalFailed": 20
  }
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing ListID parameter"
    }
  ]
}
txt
0: Success
1: Missing ListID parameter
2: Missing ImportID parameter
3: Invalid ListID parameter
4: Invalid ImportID parameter
5: List not found
6: Invalid ImportID parameter
7: Import job not found

Prepare Import from Third-Party Service

POST /api/v1/subscribers.import

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Import
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

This endpoint prepares import by fetching metadata from third-party services (Mailchimp, ActiveCampaign, Drip).

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.import.prepare
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ImportFromObjectYesImport source configuration
ImportFrom.Mailchimp.APIKeyStringConditionalMailchimp API key
ImportFrom.Mailchimp.ServerStringConditionalMailchimp server (e.g., us1)
ImportFrom.ActiveCampaign.APIKeyStringConditionalActiveCampaign API key
ImportFrom.ActiveCampaign.AccountNameStringConditionalActiveCampaign account name
ImportFrom.Drip.APIKeyStringConditionalDrip API key
bash
curl -X POST https://example.com/api/v1/subscribers.import \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.import.prepare",
    "SessionID": "your-session-id",
    "ImportFrom": {
      "Mailchimp": {
        "APIKey": "your-mailchimp-api-key",
        "Server": "us1"
      }
    }
  }'
json
{
  "Lists": [
    {
      "ID": "abc123",
      "Name": "Newsletter List",
      "ActiveSubscribersCount": 1500,
      "SubscribersCount": 2000,
      "MergeFields": [
        {
          "ID": "FNAME",
          "Name": "First Name",
          "Type": "text"
        }
      ],
      "Tags": [
        {
          "ID": 456,
          "Name": "VIP"
        }
      ],
      "Groups": []
    }
  ]
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "ImportFrom.Mailchimp.APIKey, ImportFrom.ActiveCampaign.APIKey or ImportFrom.Drip.APIKey must be provided"
    }
  ]
}
txt
0: Success
1: ImportFrom source must be provided
2: Invalid ImportFrom source
3: ActiveCampaign API key is missing
4: ActiveCampaign account name is missing
5: ActiveCampaign Error
7: Mailchimp API key is missing
8: Mailchimp server is missing
9: Mailchimp Error / Drip Error
11: Mailchimp Error While Retrieving Lists
12: Mailchimp Error While Retrieving Merge Fields
13: Mailchimp Error While Retrieving Tags
14: Mailchimp Error While Retrieving Interest Categories
15: Mailchimp Error While Retrieving Interests
16-23: Various third-party API errors

Get Subscribers List

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Get
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscribers.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
SubscriberListIDIntegerYesID of the subscriber list
SubscriberSegmentStringYesSegment: Active, Suppressed, Unsubscribed, Soft bounced, Hard bounced, Opt-in pending, or segment ID
RecordsPerRequestIntegerNoNumber of records to return (default: 25)
RecordsFromIntegerNoOffset for pagination (default: 0)
OrderFieldStringNoField to order by (default: EmailAddress)
OrderTypeStringNoOrder direction: ASC, DESC (default: ASC)
SearchFieldStringNoField to search in
SearchKeywordStringNoSearch keyword
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscribers.get",
    "SessionID": "your-session-id",
    "SubscriberListID": 123,
    "SubscriberSegment": "Active",
    "RecordsPerRequest": 50,
    "RecordsFrom": 0,
    "OrderField": "SubscriptionDate",
    "OrderType": "DESC"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": "",
  "Subscribers": [
    {
      "SubscriberID": 456,
      "EmailAddress": "user@example.com",
      "SubscriptionStatus": "Subscribed",
      "SubscriptionDate": "2025-01-01 12:00:00"
    }
  ],
  "TotalSubscribers": 1500
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing SubscriberListID parameter
2: Missing SubscriberSegment parameter
3: Invalid ListID or list does not belong to user

Update a Subscriber

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Subscriber session
  • Required permissions: Subscriber.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
SubscriberIDIntegerYesID of the subscriber
SubscriberListIDIntegerYesID of the subscriber list
EmailAddressStringNoNew email address
SubscriptionStatusStringNoNew status: Opt-In Pending, Subscribed, Opt-Out Pending, Unsubscribed
UnsubscriptionIPStringNoIP address for unsubscription
UnsubscriptionDateStringNoDate for unsubscription (Y-m-d H:i:s)
BounceTypeStringNoBounce type: Not Bounced, Soft, Hard
FieldsObjectNoCustom field values (CustomFieldID: value)
IgnoreAllOtherCustomFieldsExceptGivenOnesBooleanNoOnly update specified fields (default: false)
TriggerEventsBooleanNoTrigger journey events (default: true)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.update",
    "SessionID": "your-session-id",
    "SubscriberID": 456,
    "SubscriberListID": 123,
    "EmailAddress": "newemail@example.com",
    "Fields": {
      "CustomField1": "Updated Value"
    }
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": ""
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing SubscriberID parameter
2: Missing SubscriberListID parameter
3: Missing EmailAddress parameter
4: Invalid EmailAddress
5: Invalid ListID
6: Subscriber not found
7: Duplicate EmailAddress
8: Required custom field missing
9: Custom field value is not unique
10: Invalid custom field value

Get a Subscriber

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Subscriber session
  • Required permissions: Subscribers.Get
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
EmailAddressStringConditionalEmail address (required if SubscriberID not provided)
SubscriberIDIntegerConditionalSubscriber ID (required if EmailAddress not provided)
IncludeJourneysBooleanNoInclude journey data (default: true)
IncludeEventsBooleanNoInclude website events (default: true)
IncludeActivityBooleanNoInclude activity log (default: true)
IncludeRevenueBooleanNoInclude revenue data (default: true)
IncludeTagsBooleanNoInclude tags (default: true)
IncludeSegmentsBooleanNoInclude segments (default: true)
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.get",
    "SessionID": "your-session-id",
    "ListID": 123,
    "EmailAddress": "user@example.com",
    "IncludeJourneys": true,
    "IncludeEvents": true
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "SubscriberInformation": {
    "SubscriberID": 456,
    "EmailAddress": "user@example.com",
    "SubscriptionStatus": "Subscribed",
    "SubscriptionDate": "2025-01-01 12:00:00"
  },
  "Suppressed": false,
  "SubscriberTags": [
    {
      "TagID": 1,
      "TagName": "VIP"
    }
  ],
  "SubscriberSegments": [],
  "SubscriberJourneys": [],
  "SubscriberWebsiteEvents": [],
  "SubscriberActivity": [],
  "TotalRevenue": 0
}
json
{
  "Success": false,
  "ErrorCode": [1]
}
txt
0: Success
1: Missing EmailAddress/SubscriberID parameter
2: Missing ListID parameter
3: Subscriber not found
4: Invalid ListID
429: Too many requests (rate limit exceeded)

Get Subscriber Activity

POST /api.php

API Usage Notes

  • Authentication required: User API Key or Subscriber session
  • Required permissions: Subscribers.Get
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.get.activity
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
SubscriberIDIntegerYesID of the subscriber
SubscriberListIDIntegerYesID of the subscriber list
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.get.activity",
    "SessionID": "your-session-id",
    "SubscriberID": 456,
    "SubscriberListID": 123
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Activity": [
    {
      "ActivityType": "EmailOpen",
      "CampaignID": 789,
      "EmailID": 101,
      "ActivityDate": "2025-01-15 10:30:00"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing SubscriberID parameter
2: Missing SubscriberListID parameter
3: Subscriber not found

Check if Subscriber Exists

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscribers.Get
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.exists
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
EmailAddressStringYesEmail address to check
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.exists",
    "SessionID": "your-session-id",
    "ListID": 123,
    "EmailAddress": "user@example.com"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Exists": true,
  "SubscriberID": 456
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing EmailAddress parameter
3: Invalid ListID

Get Subscriber Lists

POST /api.php

API Usage Notes

  • Authentication required: Subscriber session
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.getlists
SessionIDStringYesSubscriber session ID
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.getlists",
    "SessionID": "subscriber-session-id"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Lists": [
    {
      "ListID": 123,
      "ListName": "Newsletter",
      "SubscriptionStatus": "Subscribed"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Authentication failure or session expired

Subscriber Login

POST /api.php

API Usage Notes

  • No authentication required
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.login
ListIDIntegerYesID of the subscriber list
EmailAddressStringYesEmail address of the subscriber
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.login",
    "ListID": 123,
    "EmailAddress": "user@example.com"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "SessionID": "subscriber-session-id",
  "SubscriberInformation": {
    "SubscriberID": 456,
    "EmailAddress": "user@example.com",
    "SubscriptionStatus": "Subscribed"
  }
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing EmailAddress parameter
3: Invalid EmailAddress
4: Subscriber not found

Confirm Opt-In

POST /api.php

API Usage Notes

  • No authentication required
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.optin
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
ConfirmationCodeStringYesOpt-in confirmation code
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.optin",
    "ListID": 123,
    "SubscriberID": 456,
    "ConfirmationCode": "abc123def456"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "RedirectURL": "https://example.com/welcome"
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing ConfirmationCode parameter
4: Invalid confirmation code
5: Subscriber not found

Tag a Subscriber

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscriber.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.tag
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
TagIDIntegerYesID of the tag to apply
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.tag",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456,
    "TagID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing TagID parameter
4: Invalid ListID
5: Invalid TagID
6: Subscriber not found

Untag a Subscriber

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Subscriber.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.untag
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
TagIDIntegerYesID of the tag to remove
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.untag",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456,
    "TagID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing TagID parameter
4: Invalid ListID
5: Invalid TagID
6: Subscriber not found

Create a Subscriber Tag

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: List.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.tags.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
TagNameStringYesName of the tag
TagDescriptionStringNoDescription of the tag
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.tags.create",
    "SessionID": "your-session-id",
    "ListID": 123,
    "TagName": "VIP Customer",
    "TagDescription": "High-value customers"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "TagID": 789
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing TagName parameter
3: Invalid ListID
4: Tag name already exists

Update a Subscriber Tag

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: List.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.tags.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
TagIDIntegerYesID of the tag
TagNameStringNoNew name of the tag
TagDescriptionStringNoNew description of the tag
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.tags.update",
    "SessionID": "your-session-id",
    "ListID": 123,
    "TagID": 789,
    "TagName": "Premium Customer"
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing TagID parameter
3: Invalid ListID
4: Invalid TagID
5: Tag name already exists

Get Subscriber Tags

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: List.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.tags.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.tags.get",
    "SessionID": "your-session-id",
    "ListID": 123
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Tags": [
    {
      "TagID": 789,
      "TagName": "VIP Customer",
      "TagDescription": "High-value customers",
      "SubscriberCount": 50
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Invalid ListID

Delete a Subscriber Tag

POST /api.php

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: List.Update
  • Legacy endpoint access via /api.php only (no v1 REST alias configured)

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.tags.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
TagIDIntegerYesID of the tag to delete
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.tags.delete",
    "SessionID": "your-session-id",
    "ListID": 123,
    "TagID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing TagID parameter
3: Invalid ListID
4: Invalid TagID

Trigger Journey for Subscriber

POST /api/v1/subscriber.journey.trigger

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Campaign.Create
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.journey.trigger
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
JourneyIDIntegerYesID of the journey to trigger
bash
curl -X POST https://example.com/api/v1/subscriber.journey.trigger \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.journey.trigger",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456,
    "JourneyID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing JourneyID parameter
4: Invalid ListID
5: Invalid SubscriberID
6: Invalid JourneyID

Remove Subscriber from Journey

POST /api/v1/subscriber.journey.remove

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Campaign.Create
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.journey.remove
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
JourneyIDIntegerYesID of the journey
bash
curl -X POST https://example.com/api/v1/subscriber.journey.remove \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.journey.remove",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456,
    "JourneyID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing JourneyID parameter
4: Invalid ListID
5: Invalid SubscriberID
6: Invalid JourneyID

Exit Subscriber from Journey

POST /api/v1/subscriber.journey.exit

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Campaign.Create
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.journey.exit
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
JourneyIDIntegerYesID of the journey
bash
curl -X POST https://example.com/api/v1/subscriber.journey.exit \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.journey.exit",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456,
    "JourneyID": 789
  }'
json
{
  "Success": true,
  "ErrorCode": 0
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Missing JourneyID parameter
4: Invalid ListID
5: Invalid SubscriberID
6: Invalid JourneyID

List Subscriber Journeys

POST /api/v1/subscriber.journey.list

API Usage Notes

  • Authentication required: User API Key
  • Required permissions: Campaign.Create
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: subscriber.journey.list
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
ListIDIntegerYesID of the subscriber list
SubscriberIDIntegerYesID of the subscriber
bash
curl -X POST https://example.com/api/v1/subscriber.journey.list \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "subscriber.journey.list",
    "SessionID": "your-session-id",
    "ListID": 123,
    "SubscriberID": 456
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "Journeys": [
    {
      "JourneyID": 789,
      "JourneyName": "Welcome Series",
      "Status": "Active",
      "JoinedAt": "2025-01-01 12:00:00"
    }
  ]
}
json
{
  "Success": false,
  "ErrorCode": 1
}
txt
0: Success
1: Missing ListID parameter
2: Missing SubscriberID parameter
3: Invalid ListID
4: Invalid SubscriberID

Any questions? Contact us.