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 type | Where to add seeds | Complexity |
|---|---|---|
| Scheduled (Campaign) | Add seed subscriber to the target list | Low |
| Ongoing (Journey) | Depends on trigger: date fields, segment membership, or Subscriber Activity API event | Medium-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
- Navigate to your subscriber list (via Lists & Subscribers or Audience in the nav)
- Click Add subscribers (or the import/add option for that list)
- Select Manually enter subscribers
- Enter the seed email address, subscriber name, and any custom field values (comma-separated if entering multiple)
- Click Add subscriber (or Save)
Step-by-step: Add a seed subscriber via CSV import
- Navigate to the target list
- Click Import (or Add subscribers > Import)
- Select or drag-drop a
.csvor.xlsxfile - Map CSV columns to Campaign Monitor fields: email address, subscriber name, custom field keys
- 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
| Trigger | Description | Seed approach |
|---|---|---|
| Subscriber joins the list | Fires on signup form submission only | Submit seed email via the hosted signup form |
| Date (specific date) | Fires on a date stored in a date custom field | Set the date custom field on the seed |
| Anniversary of a date | Fires annually on month/day of a date field | Set the date custom field on the seed |
| Subscriber enters a segment | Fires when subscriber's data matches the segment | Set attributes to qualify the seed for the segment |
| Subscriber exits a segment | Fires when subscriber leaves the segment | Manage the seed's segment membership |
| Subscriber Activity (API) | Fires when a named event is published via API | Call 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
Dataobject 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
LastPurchaseDate2. Set the journey trigger to "Date" referencingLastPurchaseDate3. Set the seed'sLastPurchaseDateto 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 likedd/mm/yyyy) - Valid date range:
1900/01/01to2076/06/06
Step 1: Create the Birthday custom field on the list
- Navigate to the subscriber list > List Settings (or Custom Fields tab)
- Click Add a custom field
- Name:
BirthDate, Type: Date, Visibility: optional - Save
Step 2: Set the seed's birthday value
Via UI:
- Search for the seed subscriber on the list
- Open their subscriber profile
- Edit the
BirthDatefield 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.
- Navigate to your Campaign Monitor account settings or API documentation
- Go to Account settings > API (accessible via the account avatar)
- The Client ID is displayed there
- 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": trueto re-add)207- subscriber exists in the bounced list (pass"Resubscribe": trueto re-add)- Suppression list: subscriber cannot be added even with
"Resubscribe": true
Platform-specific terminology
| Campaign Monitor term | What it means |
|---|---|
| List | The primary container for subscribers (equivalent to an Audience or Contact List in other platforms). |
| Segment | A dynamic subset of a list based on filter rules. Members auto-update as subscriber data changes. |
| Engagement Segment | One of six built-in segments based on email interaction history (Active, Engaged, Unengaged, Dormant, Zombies, Ghosts). |
| Journey | An automated email sequence with a single trigger and linear steps. |
| Subscriber Activity API | Campaign Monitor's event API - fires a named event against a subscriber to trigger journeys. |
| Custom field | A user-defined data field on a list (Text, Number, Date, Multi-Valued Select Many, Country). |
| ConsentToTrack | A required API field indicating whether the subscriber has consented to activity tracking ("Yes", "No", or "Unchanged"). |
| Resubscribe | An API parameter that re-adds previously unsubscribed or bounced subscribers. |
| RestartSubscriptionBasedAutoresponders | An API parameter that restarts journey sequences when a subscriber is re-added. |
| Client ID | The Campaign Monitor account-level identifier used in the Subscriber Activity API URL. |
| Suppression list | An 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