Skip to content

Journey API Documentation

Journey management endpoints for creating, updating, and managing customer journeys. Journeys allow you to automate subscriber interactions based on triggers and actions.

Create a Journey

POST /api/v1/journey

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: journey.create
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
NameStringYesName of the journey
TriggerStringNoJourney trigger type (default: Manual). Possible values: Manual, ListSubscription, ListUnsubscription, EmailOpen, EmailConversion, EmailLinkClick, Tag, UnTag, CustomFieldValueChanged, RevenueHit, JourneyCompleted, WebsiteEvent_pageView, WebsiteEvent_identify, WebsiteEvent_customEvent, WebsiteEvent_conversion
Trigger_ListIDIntegerNoList ID for list-based triggers
Trigger_EmailIDIntegerNoEmail ID for email-based triggers
Trigger_ValueString/IntegerNoTrigger value for specific triggers
Trigger_CriteriaArrayNoCriteria for trigger conditions
Run_CriteriaArrayNoRun criteria for journey execution
Run_Criteria_OperatorStringNoOperator for run criteria. Possible values: and, or (default: and)
Rate_Limit_Per_HourIntegerNoHourly rate limit for journey triggers
Rate_Limit_Per_DayIntegerNoDaily rate limit for journey triggers
NotesStringNoJourney notes
bash
curl -X POST https://example.com/api/v1/journey \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.create",
    "SessionID": "your-session-id",
    "Name": "Welcome Series",
    "Trigger": "ListSubscription",
    "Trigger_ListID": 123,
    "Notes": "Onboarding journey for new subscribers"
  }'
json
{
  "JourneyID": 456,
  "Journey": {
    "JourneyID": "456",
    "JourneyName": "Welcome Series",
    "Trigger": "ListSubscription",
    "Status": "Disabled",
    "Notes": "Onboarding journey for new subscribers",
    "CreatedAt": "2025-01-15 10:30:00",
    "UpdatedAt": "2025-01-15 10:30:00"
  }
}
json
{
  "Errors": [
    {
      "Code": 1,
      "Message": "Missing Name parameter"
    }
  ]
}
txt
0: Success
1: Missing Name parameter
3: Invalid trigger
4: Missing Trigger_ListID parameter
5: Invalid Trigger_ListID parameter
6: Trigger_ListID matching record not found
7: Missing Trigger_EmailID parameter
8: Invalid Trigger_EmailID parameter
9: Trigger_EmailID matching record not found
10: Invalid Trigger_Value parameter
11: Trigger_Value matching record not found
12: Invalid Trigger_Value parameter (CustomFieldValueChanged)
13: Trigger_Value matching record not found (CustomFieldValueChanged)
14: Invalid Trigger_Value parameter (RevenueHit)
15: Missing Trigger_Value parameter (RevenueHit)
16: Invalid Trigger_Value parameter (JourneyCompleted)
17: Trigger_Value matching record not found (JourneyCompleted)
18: Invalid rate_limit_per_hour parameter
19: Invalid rate_limit_per_day parameter

Clone a Journey

POST /api/v1/journey.clone

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: journey.clone
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to clone
NewJourneyNameStringYesName for the cloned journey
bash
curl -X POST https://example.com/api/v1/journey.clone \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.clone",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "NewJourneyName": "Welcome Series Copy"
  }'
json
{
  "Journey": {
    "JourneyID": "789",
    "JourneyName": "Welcome Series Copy",
    "Trigger": "ListSubscription",
    "TriggerParameters": {
      "ListID": 123
    },
    "Status": "Disabled",
    "Notes": "Copy of journey Welcome Series"
  },
  "Actions": []
}
json
{
  "Errors": [
    {
      "Code": 3,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing NewJourneyName parameter
2: Missing JourneyID parameter
3: Journey not found
4: Journey not cloned successfully

Copy Journey to Another User

POST /api/v1/journey.copytouser

API Usage Notes

  • Authentication required: Admin API Key
  • This is an admin-only endpoint
  • Rate limit: 100 requests per 60 seconds
  • Legacy endpoint access via /api.php is also supported

Resource Handling

When copying a journey to another user:

  • Email templates referenced in SendEmail actions are automatically copied to the target user. Duplicate emails are only copied once.
  • Other user-specific resources (lists, tags, custom fields, sender domains, SMS gateways, journey references) are reset to 0. The target user must configure these in the Journey Builder.
  • Journey trigger is always reset to Manual. The target user must configure the trigger.
  • Journey status is always set to Disabled.

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: journey.copytouser
AdminAPIKeyStringYesAdmin API key for authentication
JourneyIDIntegerYesID of the source journey to copy
SourceUserIDIntegerYesID of the user who owns the source journey
TargetUserIDIntegerYesID of the user to copy the journey to
NewJourneyNameStringNoName for the copied journey. Defaults to "Copy of {original name}"
bash
curl -X POST https://example.com/api/v1/journey.copytouser \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.copytouser",
    "AdminAPIKey": "your-admin-api-key",
    "JourneyID": 456,
    "SourceUserID": 1,
    "TargetUserID": 2,
    "NewJourneyName": "Welcome Series for User 2"
  }'
json
{
  "Success": true,
  "JourneyID": 789,
  "EmailsCopied": [
    {
      "SourceEmailID": 123,
      "NewEmailID": 456
    }
  ],
  "ResourcesReset": [
    "SenderDomainID",
    "TargetListID"
  ]
}
json
{
  "Success": false,
  "Errors": [
    {
      "Code": 9,
      "Message": "Journey not found for source user"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Missing SourceUserID parameter
3: Missing TargetUserID parameter
4: Invalid JourneyID (non-numeric)
5: Invalid SourceUserID (non-numeric)
6: Invalid TargetUserID (non-numeric)
7: Source user not found
8: Target user not found
9: Journey not found for source user
10: Failed to create journey

Get a Journey

GET /api/v1/journey

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: journey.get
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to retrieve
StartDateStringNoStart date for stats (YYYY-MM-DD)
EndDateStringNoEnd date for stats (YYYY-MM-DD)
bash
curl -X GET https://example.com/api/v1/journey \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.get",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "StartDate": "2025-01-01",
    "EndDate": "2025-01-31"
  }'
json
{
  "JourneyID": "456",
  "JourneyName": "Welcome Series",
  "Trigger": "ListSubscription",
  "TriggerParameters": {
    "ListID": 123
  },
  "Status": "Enabled",
  "Notes": "Onboarding journey",
  "Actions": [],
  "JourneyStats": {
    "ActiveSubscribers": 150,
    "TotalSubscribers": 500
  }
}
json
{
  "Errors": [
    {
      "Code": 3,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Invalid JourneyID parameter
3: Journey not found
4: Invalid StartDate format
5: Invalid EndDate format
6: StartDate must be before EndDate

List Journeys

GET /api/v1/journeys

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: journey.list
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
StatsStartDateStringNoStart date for stats (YYYY-MM-DD)
StatsEndDateStringNoEnd date for stats (YYYY-MM-DD)
bash
curl -X GET https://example.com/api/v1/journeys \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.list",
    "SessionID": "your-session-id",
    "StatsStartDate": "2025-01-01",
    "StatsEndDate": "2025-01-31"
  }'
json
{
  "Journeys": [
    {
      "JourneyID": "456",
      "JourneyName": "Welcome Series",
      "Trigger": "ListSubscription",
      "TriggerParameters": {
        "ListID": 123
      },
      "Status": "Enabled",
      "JourneyStats": {
        "ActiveSubscribers": 150,
        "TotalSubscribers": 500,
        "AggregatedEmailActions": {},
        "AggregatedDaysEmailActions": [],
        "TotalRevenue": 0,
        "DaysRevenue": []
      }
    }
  ]
}
json
{
  "Errors": [
    {
      "Code": 4,
      "Message": "Invalid StatsStartDate format"
    }
  ]
}
txt
0: Success
4: Invalid StatsStartDate format
5: Invalid StatsEndDate format
6: StatsStartDate must be before StatsEndDate

Update a Journey

PATCH /api/v1/journey

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: journey.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to update
NameStringNoUpdated journey name
NotesStringNoUpdated journey notes
TriggerStringNoUpdated trigger type. Possible values: Manual, ListSubscription, ListUnsubscription, EmailOpen, EmailConversion, EmailLinkClick, Tag, UnTag, CustomFieldValueChanged, RevenueHit, JourneyCompleted, WebsiteEvent_pageView, WebsiteEvent_identify, WebsiteEvent_customEvent, WebsiteEvent_conversion
Trigger_ListIDIntegerNoUpdated list ID for triggers
Trigger_EmailIDIntegerNoUpdated email ID for triggers
Trigger_ValueString/IntegerNoUpdated trigger value
Trigger_CriteriaArrayNoUpdated trigger criteria
Run_CriteriaArrayNoUpdated run criteria
Run_Criteria_OperatorStringNoUpdated run criteria operator. Possible values: and, or (default: and)
Rate_Limit_Per_HourIntegerNoUpdated hourly rate limit
Rate_Limit_Per_DayIntegerNoUpdated daily rate limit
bash
curl -X PATCH https://example.com/api/v1/journey \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.update",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "Name": "Welcome Series V2",
    "Notes": "Updated onboarding journey"
  }'
json
{
  "Journey": {
    "JourneyID": "456",
    "JourneyName": "Welcome Series V2",
    "Trigger": "ListSubscription",
    "TriggerParameters": {
      "ListID": 123
    },
    "Status": "Enabled",
    "Notes": "Updated onboarding journey",
    "UpdatedAt": "2025-01-15 11:00:00"
  }
}
json
{
  "Errors": [
    {
      "Code": 10,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Invalid JourneyID parameter
4: Missing Trigger_ListID parameter
5: Invalid Trigger_ListID parameter
6: Trigger_ListID matching record not found
7: Missing Trigger_EmailID parameter
8: Invalid Trigger_EmailID parameter
9: Trigger_EmailID matching record not found
10: Journey not found
11: Trigger_Value matching record not found
12: Invalid Trigger_Value parameter (CustomFieldValueChanged)
13: Trigger_Value matching record not found (CustomFieldValueChanged)
14: Invalid Trigger_Value parameter (RevenueHit)
15: Missing Trigger_Value parameter (RevenueHit)
16: Invalid Trigger_Value parameter (JourneyCompleted)
17: Trigger_Value matching record not found (JourneyCompleted)
18: Invalid rate_limit_per_hour parameter
19: Invalid rate_limit_per_day parameter

Delete a Journey

POST /api/v1/journey.delete

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: journey.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to delete
bash
curl -X POST https://example.com/api/v1/journey.delete \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.delete",
    "SessionID": "your-session-id",
    "JourneyID": 456
  }'
json
{
  "JourneyID": 456
}
json
{
  "Errors": [
    {
      "Code": 3,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Invalid JourneyID parameter
3: Journey not found

Delete Multiple Journeys

POST /api.php

API Usage Notes

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

Request Body Parameters:

ParameterTypeRequiredDescription
CommandStringYesAPI command: journeys.delete
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneysStringYesComma-separated journey IDs to delete
bash
curl -X POST https://example.com/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journeys.delete",
    "SessionID": "your-session-id",
    "Journeys": "456,789,101"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": ""
}
json
{
  "Success": false,
  "ErrorCode": [1]
}
txt
0: Success
1: Missing Journeys parameter

Enable a Journey

GET /api/v1/journey.enable

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: journey.enable
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to enable
bash
curl -X GET https://example.com/api/v1/journey.enable \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.enable",
    "SessionID": "your-session-id",
    "JourneyID": 456
  }'
json
{
  "Journey": {
    "JourneyID": "456",
    "JourneyName": "Welcome Series",
    "Trigger": "ListSubscription",
    "Status": "Enabled",
    "UpdatedAt": "2025-01-15 12:00:00"
  }
}
json
{
  "Errors": [
    {
      "Code": 4,
      "Message": "Journey is already enabled"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Invalid JourneyID parameter
3: Journey not found
4: Journey is already enabled

Disable a Journey

GET /api/v1/journey.disable

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: journey.disable
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey to disable
bash
curl -X GET https://example.com/api/v1/journey.disable \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.disable",
    "SessionID": "your-session-id",
    "JourneyID": 456
  }'
json
{
  "Journey": {
    "JourneyID": "456",
    "JourneyName": "Welcome Series",
    "Trigger": "ListSubscription",
    "Status": "Disabled",
    "UpdatedAt": "2025-01-15 13:00:00"
  }
}
json
{
  "Errors": [
    {
      "Code": 4,
      "Message": "Journey is already disabled"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Invalid JourneyID parameter
3: Journey not found
4: Journey is already disabled

Update Journey Actions

Journey Action Types

For detailed documentation of each action type and its parameters, see Journey Actions.

PATCH /api/v1/journey.actions

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: journey.actions.update
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey
ActionsArrayYesArray of action objects to update
bash
curl -X PATCH https://example.com/api/v1/journey.actions \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.actions.update",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "Actions": [
      {
        "action": "SendEmail",
        "emailid": 123,
        "from": {
          "name": "Support",
          "email": "support@example.com"
        }
      }
    ]
  }'
json
{
  "JourneyID": "456",
  "JourneyName": "Welcome Series",
  "Actions": [
    {
      "ActionID": "789",
      "Action": "SendEmail",
      "ActionParameters": {
        "EmailID": 123,
        "From": {
          "Name": "Support",
          "Email": "support@example.com"
        }
      }
    }
  ]
}
json
{
  "Errors": [
    {
      "Code": 5,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Missing Actions parameter
3: Invalid JourneyID parameter
4: Invalid JourneyID parameter (Actions must be array)
5: Journey not found
6: Invalid action type or Journey not found

Update Actions Published Status

PATCH /api/v1/journey.actions.published

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: journey.actions.published
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey
ActionsArrayYesArray of action objects with published status
bash
curl -X PATCH https://example.com/api/v1/journey.actions.published \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.actions.published",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "Actions": [
      {
        "actionid": 789,
        "published": "true"
      }
    ]
  }'
json
{
  "JourneyID": "456",
  "JourneyName": "Welcome Series",
  "Actions": [
    {
      "ActionID": "789",
      "Published": "true"
    }
  ]
}
json
{
  "Errors": [
    {
      "Code": 6,
      "Message": "Action not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Missing Actions parameter
3: Invalid JourneyID parameter
4: Invalid JourneyID parameter (Actions must be array)
5: Journey not found
6: Action not found
7: Journey not found after update

Get Action Subscribers

GET /api/v1/journey.action.subscribers

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: journey.action.subscribers
SessionIDStringNoSession ID obtained from login
APIKeyStringNoAPI key for authentication
JourneyIDIntegerYesID of the journey
ActionIDIntegerYesID of the action
FilterJSONStringNoJSON array of filter items. Each item should be one of: opened, clicked, converted, browser_viewed, forwarded, unsubscribed, bounced, spam_complaint
OperatorStringNoFilter operator. Possible values: AND, OR. Only used when FilterJSON is provided
RecordsPerRequestIntegerNoNumber of records per page (default: 25)
RecordsFromIntegerNoStarting record offset (default: 0)
OrderFieldStringNoField to order by (default: EmailAddress)
OrderTypeStringNoOrder direction. Possible values: ASC, DESC (default: ASC)
bash
curl -X GET https://example.com/api/v1/journey.action.subscribers \
  -H "Content-Type: application/json" \
  -d '{
    "Command": "journey.action.subscribers",
    "SessionID": "your-session-id",
    "JourneyID": 456,
    "ActionID": 789,
    "RecordsPerRequest": 25,
    "RecordsFrom": 0,
    "OrderField": "EmailAddress",
    "OrderType": "ASC"
  }'
json
{
  "Success": true,
  "ErrorCode": 0,
  "ErrorText": "",
  "Subscribers": [
    {
      "SubscriberID": "101",
      "EmailAddress": "user@example.com",
      "Suppressed": false
    }
  ],
  "TotalSubscribers": 150
}
json
{
  "Success": false,
  "ErrorCode": [
    {
      "Code": 5,
      "Message": "Journey not found"
    }
  ]
}
txt
0: Success
1: Missing JourneyID parameter
2: Missing ActionID parameter
3: Invalid JourneyID parameter
4: Invalid ActionID parameter
5: Invalid FilterJSON parameter (invalid JSON)
6: Invalid FilterJSON value (unrecognized filter item)
7: Invalid Operator value

INFO

After validation, the following business logic errors may also be returned:

  • 5: Journey not found (HTTP 404)
  • 6: Action not found (HTTP 404)

:::

Any questions? Contact us.