Integrations

Campaign Monitor: Telltide Seed Address Guide

Place Telltide seeds in Campaign Monitor lists and journeys.

Campaign Monitor's most important constraint for seed management is its journey trigger model: the "Subscriber joins the list" trigger only fires when a contact submits via a Campaign Monitor hosted signup form. Manual additions, CSV imports, and API subscriber additions do not fire this trigger. For all other journey types, the Subscriber Activity API provides a flexible event injection mechanism - but the subscriber must already be on the list before the event can trigger a journey.

Quick reference

Send typeWhere to add seedsComplexity
Scheduled (Campaign)Add seed subscriber to the target listLow
Ongoing (Journey)Depends on trigger: date fields, segment membership, or Subscriber Activity API eventMedium-High

1. Scheduled / one-off sends (Campaigns)

Campaign Monitor Campaigns are one-time sends to a subscriber list, optionally refined by a segment. Seeds must be active subscribers on the target list.

Where to add seed addresses

Add the seed subscriber to the list selected as the campaign's audience. If the campaign targets a segment of that list, the seed's custom field values must satisfy the segment criteria.

Step-by-step: Add a seed subscriber to a list manually

  1. Navigate to your subscriber list (via Lists & Subscribers or Audience in the nav)
  2. Click Add subscribers (or the import/add option for that list)
  3. Select Manually enter subscribers
  4. Enter the seed email address, subscriber name, and any custom field values (comma-separated if entering multiple)
  5. Click Add subscriber (or Save)

Step-by-step: Add a seed subscriber via CSV import

  1. Navigate to the target list
  2. Click Import (or Add subscribers > Import)
  3. Select or drag-drop a .csv or .xlsx file
  4. Map CSV columns to Campaign Monitor fields: email address, subscriber name, custom field keys
  5. Click Finish adding subscribers to complete the import

CSV column format: The email column header should be Email Address. Custom field headers must match the field key name (case-insensitive).

Step-by-step: Add a seed subscriber via API

POST https://api.createsend.com/api/v3.3/subscribers/{listid}.json
Authorization: Basic {{base64(apikey:)}}
Content-Type: application/json

{
  "EmailAddress": "seed@example.com",
  "Name": "Seed Monitor",
  "CustomFields": [
    { "Key": "BirthDate", "Value": "1985/06/15" },
    { "Key": "City", "Value": "Austin" }
  ],
  "Resubscribe": true,
  "ConsentToTrack": "Yes"
}

Resubscribe: true ensures the subscriber is added even if they previously unsubscribed (does not re-subscribe if on the suppression list - that requires UI action).

Profile attributes required

Seeds need:

  • EmailAddress (required)
  • Name (optional but recommended for personalization)
  • Values for any custom fields referenced in the email content
  • Active subscription status (not unsubscribed, not bounced)

Ensuring seeds receive the same version as real recipients

Campaign Monitor does not have native A/B testing in the same way as other platforms. A/B campaign type exists but splits are random - seeds will be assigned to one variant. There is no mechanism to pin a seed to a specific variant.

Exclusions: When selecting recipients during campaign creation, you can exclude a list or segment. Verify the seed is not on any excluded list.

Gotchas

Suppression list: If the seed email address is on the account's suppression list (from a previous hard bounce or unsubscribe with the "AllClientLists" setting), the subscriber cannot be added to any list and will not receive campaigns. Check the suppression list status in account settings.

Unsubscribed status: If a subscriber's status is Unsubscribed, they will not receive the campaign. You can resubscribe them via API with "Resubscribe": true, or via the UI.

Bounced status: If a subscriber's status is Bounced, the API returns error code 207 and they cannot be added back without "Resubscribe": true.


2. Ongoing / automated journeys (Journey Builder)

Campaign Monitor's Journey Builder creates automated email sequences. A journey has one trigger and a linear sequence of steps (emails, delays, and conditions). Journeys are tied to a specific list - seeds must be active subscribers on that list.

Journey trigger types and seed approaches

TriggerDescriptionSeed approach
Subscriber joins the listFires on signup form submission onlySubmit seed email via the hosted signup form
Date (specific date)Fires on a date stored in a date custom fieldSet the date custom field on the seed
Anniversary of a dateFires annually on month/day of a date fieldSet the date custom field on the seed
Subscriber enters a segmentFires when subscriber's data matches the segmentSet attributes to qualify the seed for the segment
Subscriber exits a segmentFires when subscriber leaves the segmentManage the seed's segment membership
Subscriber Activity (API)Fires when a named event is published via APICall the Subscriber Activity API with the seed's email

Creating trap profiles per journey type

Welcome / onboarding (Subscriber joins the list trigger)

  • Trigger: Subscriber submits a Campaign Monitor hosted signup form
  • Critical limitation: Manual additions (UI, CSV import, API subscriber endpoint) do NOT fire this trigger. Only actual form submissions trigger it.
  • How to trigger: 1. Navigate to the signup form for the target list (Lists & Subscribers > [List] > Signup forms) 2. Use the hosted form URL to submit the seed email address via a real browser form submission 3. The "Subscriber joins the list" journey trigger fires automatically
  • Workaround if form-based approach is impractical: Change the journey's trigger to "Subscriber Activity" using a custom event name (e.g., welcome_trigger), then fire the event via the Subscriber Activity API after manually adding the seed to the list.

Abandoned cart (Subscriber Activity API trigger)

  • Trigger: Subscriber Activity API event (e.g., event name: abandoned_cart)
  • Seed requirements: Seed must be an active subscriber on the list. The subscriber must be added separately before the event trigger will fire.
  • Step 1: Add seed to the list (if not already present) via UI or API subscriber endpoint
  • Step 2: Fire the Subscriber Activity API event:
POST https://api.createsend.com/api/v3.3/events/publish/{clientId}
Authorization: Basic {{base64(apikey:)}}
Content-Type: application/json

{
  "EventName": "abandoned_cart",
  "ContactID": {
    "Email": "seed@example.com"
  },
  "Data": {
    "cart_total": 95.00,
    "currency": "USD",
    "items": [
      {
        "name": "Widget Pro",
        "price": 49.99,
        "quantity": 1,
        "url": "https://yourstore.com/products/widget-pro",
        "image_url": "https://yourstore.com/img/widget-pro.jpg"
      }
    ],
    "checkout_url": "https://yourstore.com/cart"
  }
}
  • First-time event names: The first time you send a new event name to the Subscriber Activity API, it becomes available as a trigger option in the Journey Builder UI. You must fire the event once before you can configure the journey to use it as a trigger.
  • Template data: The Data object is available in the journey email template as Liquid variables. Use {{ Data.cart_total }}, {{ Data.items[0].name }}, etc. Confirm the exact Liquid variable names match what your email template expects.

[NEEDS VERIFICATION: exact Liquid variable syntax for accessing Subscriber Activity API Data properties in Campaign Monitor email templates]

Browse abandonment (Subscriber Activity API trigger)

  • Trigger: Subscriber Activity API event (e.g., product_viewed)
  • Seed requirements: Active subscriber on the list
  • How to trigger:
POST https://api.createsend.com/api/v3.3/events/publish/{clientId}
{
  "EventName": "product_viewed",
  "ContactID": { "Email": "seed@example.com" },
  "Data": {
    "product_name": "Widget Pro",
    "product_category": "Electronics",
    "product_url": "https://yourstore.com/products/widget-pro",
    "price": 49.99
  }
}
  • Journey configuration: The Journey's trigger must be set to "Subscriber Activity" with event name product_viewed. This option appears in the Journey Builder only after the event name has been sent at least once.

Winback / re-engagement (Subscriber exits a segment trigger)

  • Trigger: "Subscriber exits a segment" - using Campaign Monitor's built-in Engagement Segments (Dormant or Ghost)
  • Seed requirements: Active subscriber on the list; seed must be in the "Active" or "Engaged" segment initially, then transition to "Dormant" or "Ghost" as they stop opening emails
  • How the trigger works:
  • Create an "Active" or "Engaged" segment using Campaign Monitor's Engagement Segments
  • Set the journey trigger to "Subscriber exits a segment" targeting the Active/Engaged segment
  • When a subscriber's engagement drops and they leave the Active segment, the journey fires
  • For seed testing: This trigger requires actual email engagement history. A fresh seed with no send history may immediately qualify as "Ghost" (never opened). The journey would fire when they "exit" the Active segment - which happens immediately since they were never Active.

Alternative approach for seeds: Use the Subscriber Activity API trigger with a custom winback_trigger event name. Fire the event against the seed to manually initiate the winback journey:

POST https://api.createsend.com/api/v3.3/events/publish/{clientId}
{
  "EventName": "winback_trigger",
  "ContactID": { "Email": "seed@example.com" }
}

Post-purchase (Date or Subscriber Activity trigger)

  • Option A - Date trigger: 1. Create a Date-type custom field LastPurchaseDate 2. Set the journey trigger to "Date" referencing LastPurchaseDate 3. Set the seed's LastPurchaseDate to today or a near-future date 4. The journey fires on that date
  • Option B - Subscriber Activity trigger:
POST https://api.createsend.com/api/v3.3/events/publish/{clientId}
{
  "EventName": "purchase_completed",
  "ContactID": { "Email": "seed@example.com" },
  "Data": {
    "order_id": "TEST-ORD-001",
    "order_total": 149.99,
    "items": [{ "name": "Widget Pro", "quantity": 1, "price": 149.99 }]
  }
}

Birthday / anniversary (Anniversary of a date trigger)

  • Trigger: "Anniversary of a date" referencing a Date-type custom field
  • Seed requirements: Active subscriber, Date-type custom field (e.g., BirthDate) set on the subscriber
  • Date format: yyyy/mm/dd (Campaign Monitor's required format for Date fields - avoid ambiguous formats like dd/mm/yyyy)
  • Valid date range: 1900/01/01 to 2076/06/06

Step 1: Create the Birthday custom field on the list

  1. Navigate to the subscriber list > List Settings (or Custom Fields tab)
  2. Click Add a custom field
  3. Name: BirthDate, Type: Date, Visibility: optional
  4. Save

Step 2: Set the seed's birthday value

Via UI:

  1. Search for the seed subscriber on the list
  2. Open their subscriber profile
  3. Edit the BirthDate field to today's date (to trigger the anniversary today): 2026/04/15

Via API subscriber update:

PUT https://api.createsend.com/api/v3.3/subscribers/{listid}.json?email={email}
{
  "EmailAddress": "seed@example.com",
  "Name": "Seed Monitor",
  "CustomFields": [
    { "Key": "BirthDate", "Value": "1985/04/15" }
  ]
}

When the trigger fires: At midnight (account timezone) on the month/day of the stored date, annually.

Gotcha: The journey fires at midnight. If you set the birthday to today after midnight, the journey fires the following year unless you manually re-set the date.


Subscriber Activity API - Getting the Client ID

The {clientId} in the Subscriber Activity API URL is the Campaign Monitor Client ID, not the list ID.

  1. Navigate to your Campaign Monitor account settings or API documentation
  2. Go to Account settings > API (accessible via the account avatar)
  3. The Client ID is displayed there
  4. Alternatively, retrieve it via: GET https://api.createsend.com/api/v3.3/clients.json - returns all client IDs for the account

Ensuring seeds progress through the full journey

Condition steps: Journey condition steps can branch based on custom field values or engagement behavior. Review all condition steps to confirm the seed will take the expected path.

Subscriber status must remain active: If the seed subscriber unsubscribes or bounces while mid-journey, the journey stops sending to them. Protect seed addresses from bounce or unsubscribe events.

Journey activation timing: Journeys must be in "Active" state to trigger. Confirm the journey is active before attempting to trigger it for seeds.


How to reset seeds for repeated journey testing

Date-triggered journeys: Update the seed's date custom field to a new date. The journey fires again on the new date's anniversary.

Subscriber Activity-triggered journeys: Fire the event again. Campaign Monitor allows re-triggering as long as the subscriber is active on the list.

Subscriber joins the list trigger: Unsubscribe the seed from the list (using the "Resubscribe": false behavior or by unsubscribing the contact), then resubscribe via the signup form. Note: "Resubscribe": true in the API re-adds the subscriber to the list but does NOT fire the "Subscriber joins the list" journey trigger. Only a new form submission triggers it.

RestartSubscriptionBasedAutoresponders: When resubscribing via API with "Resubscribe": true, include "RestartSubscriptionBasedAutoresponders": true to restart any subscription-based journey sequences for that subscriber.


3. Platform-specific considerations

API options

Add or update a subscriber:

POST https://api.createsend.com/api/v3.3/subscribers/{listid}.json

Upserts: creates if email not on list, updates if exists.

Update an existing subscriber:

PUT https://api.createsend.com/api/v3.3/subscribers/{listid}.json?email={email}

Delete a subscriber:

DELETE https://api.createsend.com/api/v3.3/subscribers/{listid}.json?email={email}

Fire a Subscriber Activity event:

POST https://api.createsend.com/api/v3.3/events/publish/{clientId}

List journey information:

GET https://api.createsend.com/api/v3.3/clients/{clientid}/journeys
GET https://api.createsend.com/api/v3.3/journeys/{journeyid}

Authentication: HTTP Basic Auth with API key as username and blank (or any) password. Or use OAuth for production integrations.

API key location: Click account avatar (top right) > Account settings > API keys

Rate limits

Campaign Monitor does not publicly document a hard rate limit for subscriber management endpoints. Best practices:

  • Target no more than approximately 1 request per second for subscriber operations
  • Monitor for HTTP 429 responses and implement exponential backoff
  • Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) are returned on responses that have limits

Duplicate subscriber handling

Subscribers are uniquely identified by email address within a list. Submitting an existing email via the API updates the subscriber's data rather than creating a duplicate.

Error codes to know:

  • 206 - subscriber exists in the unsubscribed list (pass "Resubscribe": true to re-add)
  • 207 - subscriber exists in the bounced list (pass "Resubscribe": true to re-add)
  • Suppression list: subscriber cannot be added even with "Resubscribe": true

Platform-specific terminology

Campaign Monitor termWhat it means
ListThe primary container for subscribers (equivalent to an Audience or Contact List in other platforms).
SegmentA dynamic subset of a list based on filter rules. Members auto-update as subscriber data changes.
Engagement SegmentOne of six built-in segments based on email interaction history (Active, Engaged, Unengaged, Dormant, Zombies, Ghosts).
JourneyAn automated email sequence with a single trigger and linear steps.
Subscriber Activity APICampaign Monitor's event API - fires a named event against a subscriber to trigger journeys.
Custom fieldA user-defined data field on a list (Text, Number, Date, Multi-Valued Select Many, Country).
ConsentToTrackA required API field indicating whether the subscriber has consented to activity tracking ("Yes", "No", or "Unchanged").
ResubscribeAn API parameter that re-adds previously unsubscribed or bounced subscribers.
RestartSubscriptionBasedAutorespondersAn API parameter that restarts journey sequences when a subscriber is re-added.
Client IDThe Campaign Monitor account-level identifier used in the Subscriber Activity API URL.
Suppression listAn account-level block list of email addresses that cannot receive any emails from the account.

Known limitations and workarounds

"Subscriber joins the list" trigger cannot be fired via API. This is the most significant limitation for seed monitoring in Campaign Monitor. Form submissions are the only trigger mechanism. Workaround: use the "Subscriber Activity" trigger with a custom event name as a proxy for list join events.

Subscriber Activity API requires the subscriber to exist on the list first. You cannot fire an event for a non-subscriber. Always add the seed to the list before attempting to fire events.

Date triggers fire at midnight. Setting a date custom field to today after midnight means the journey fires the next year for anniversary triggers. For same-day testing, use the Subscriber Activity trigger approach instead.

Custom fields are limited to 50 per list. Plan field names carefully - they cannot be reused across lists if approaching the limit.

Campaign Monitor has no native abandoned cart trigger without a third-party integration. The Subscriber Activity API is the recommended approach for simulating cart and purchase events for journey testing.

Start monitoring your Campaign Monitor sends

Place a Telltide seed in your Campaign Monitor audience, and we will tell you when an expected email did not land.

Start free