Integrations

Ortto: Telltide Seed Address Guide

Place Telltide seeds in Ortto audiences and journeys.

Ortto (formerly Autopilot) organizes contacts as "people" in a Customer Data Platform (CDP). Campaigns target people via dynamic Audiences or ad hoc Filters. Journeys are triggered by activities, audience membership, dates, or form submissions. The most important distinction for seed management: Ortto's audience re-entry has a 1-minute block - if a person exits and re-enters an audience within 60 seconds, the re-entry is silently blocked. This affects rapid test cycles.

Quick reference

Send typeWhere to add seedsComplexity
Scheduled (Campaign)Create seed person; target via Filter matching email, or add to a seed AudienceLow
Ongoing (Journey)Create seed person; trigger via audience membership, activity event, date attribute, or formMedium

1. Scheduled / one-off sends (Campaigns)

Ortto Email Campaigns are one-time sends. The audience is defined by selecting one of: a saved Audience, a Subscriber Tag, or an ad hoc Filter. Seeds are most easily included via a Filter or by adding them to a seed Audience.

Where to add seed addresses

Option A - Filter (simplest): When creating the campaign, set the audience to "Filter" and add a condition: email equals seed@example.com. The seed person receives the campaign.

Option B - Seed Audience: Create a saved Audience with the condition internal_test_user is true (or similar marker). Add this condition to seed people profiles. When sending, target this Audience (or include it alongside the real audience if Ortto supports multi-audience targeting).

Option C - Subscriber Tag: Apply a tag (e.g., telltide-seed) to seed people, then target by that tag in the campaign.

Step-by-step: Create a seed person via UI

  1. Navigate to CDP > People
  2. Click More (the three-dot icon or ellipsis near the top right)
  3. Click Add person
  4. Enter: - Email address (required) - Check "I have permission to email this person" (sets email permission to Subscribed) - First name, Last name (optional but recommended)
  5. Click OK

The person appears at the top of the People list (sorted by most recently created).

If the email address already exists, Ortto shows a warning and does not create a duplicate.

Step-by-step: Create a seed person via API

POST https://api.ap3api.com/v1/person/merge
X-Api-Key: {{api_key}}
Content-Type: application/json

{
  "merge_by": [["str::email"]],
  "merge_strategy": 2,
  "people": [
    {
      "fields": {
        "str::email": "seed@example.com",
        "str::first": "Seed",
        "str::last": "Monitor",
        "bol::internal_test_user": true
      }
    }
  ]
}

merge_by: [["str::email"]] specifies email as the lookup key. If a person with this email exists, they are updated; if not, they are created.

Field naming convention: Ortto uses typed field names: str:: (string), bol:: (boolean), dbl:: (number), dat:: (date). Built-in fields use lowercase with the type prefix; custom fields use the same pattern with their custom name.

Profile attributes required

Seeds need:

  • str::email - the seed inbox address
  • Email permission set to Subscribed (check the "I have permission to email this person" box in UI, or set bol::gdpr-email via API [NEEDS VERIFICATION: exact field name for email permission in Ortto API])
  • Any person attributes referenced in the email template

Ensuring seeds receive the same version as real recipients

Dynamic Audience targeting: Audiences update in real time. If the campaign targets a dynamic Audience, the seed must satisfy the Audience's conditions at send time.

Multi-audience campaigns: [NEEDS VERIFICATION: whether Ortto Campaign sends support multiple audiences or Filters simultaneously in the current UI version]

Exclusions: Check whether the campaign has any exclusion conditions that might exclude the seed person.

Gotchas

Email permission: If the seed person's email permission is not set to Subscribed, they will not receive marketing emails. Always check this when creating a seed.

Sunset policy: Ortto can automatically manage unsubscribes, resubscribes, or archives based on engagement levels (configured in workspace settings). Seeds with no email engagement history may be affected by sunset rules after a period of inactivity.


2. Ongoing / automated journeys (Journeys)

Ortto Journeys are automated sequences. Entry is controlled by the Journey's entry criteria. Journeys support re-entry; the re-entry mode determines how many times a person can be in the Journey simultaneously.

Journey entry trigger types

TriggerDescriptionSeed approach
Matching a filterEnters when person matches filter conditionsSet person attributes to satisfy the filter
Adding to an audienceEnters when person is added to a specified AudienceAdd seed person to the target Audience
Submitting a form or surveyEnters on form completionSubmit the form with seed email
Activity occurs ("Occurs")Fires when an activity event happens for the personFire the activity via Ortto's JavaScript tracker or API
Date field / recurringFires on/around a date attributeSet the date attribute on the seed person
Recurring dayScheduled entry (daily, weekly)Seed enters on the next scheduled evaluation

Creating trap profiles per journey type

Welcome / onboarding (Audience membership or filter trigger)

  • Entry trigger: "Adding to an audience" - the welcome audience (e.g., "New subscribers with email permission")
  • Seed requirements: Email address, email permission set to Subscribed
  • How to trigger: 1. Create the seed person with email permission Subscribed 2. Subscribe the seed person to the Audience used as the journey entry:
POST https://api.ap3api.com/v1/audience/subscribe
X-Api-Key: {{api_key}}
Content-Type: application/json

{
  "audience_id": "{{audience_id}}",
  "people": [
    { "fields": { "str::email": "seed@example.com" } }
  ],
  "subscribe": true
}
  1. The Journey entry triggers when the person is added to the Audience
  • Alternatively, using a filter trigger: Set entry criteria to "email equals seed@example.com" temporarily, or use an attribute filter that the seed satisfies (e.g., internal_test_user is true)

Abandoned cart (Activity "Occurs" trigger)

  • Trigger: "Occurs" - a cart_abandoned custom activity (Shopify native integration fires this automatically after ~90 minutes; custom via Activity API)
  • Seed requirements: Email address, email permission Subscribed
  • For Shopify integration: The seed must be an identified customer in your Shopify store. Place a test order using the seed email address, add items to cart, and abandon the checkout. Ortto's Shopify integration detects the abandonment.
  • For custom activity (API):
POST https://api.ap3api.com/v1/activities/create
X-Api-Key: {{api_key}}
Content-Type: application/json

{
  "activity_id": "{{activity_definition_id}}",
  "attributes": {
    "str::act::cart-id": "CART-TEST-001",
    "dbl::act::cart-value": 95.00,
    "str::act::product-name": "Widget Pro",
    "str::act::product-url": "https://yourstore.com/products/widget"
  },
  "person": {
    "fields": { "str::email": "seed@example.com" }
  }
}

The activity_id is the ID of a custom activity type you've defined in Ortto. Retrieve it from CDP > Activities > [Activity Name] settings.

  • Rate limit note: Maximum 50 activity events per activity type per contact per 24 hours.

Browse abandonment (Activity "Occurs" trigger)

  • Trigger: "Occurs" - a product_viewed custom activity
  • Seed requirements: Email address, email permission Subscribed, person identified in Ortto before the activity fires
  • For Ortto JavaScript tracker: The tracker fires automatically when the seed visits a product page while identified (cookie linked to email)
  • For custom activity API: Same structure as abandoned cart above, with a product_viewed activity type and relevant product attributes

Winback / re-engagement (Date or activity-based)

  • Trigger: "Matching a filter" - filter on last_purchase_date older than X days, OR date field recurring trigger on last_purchase_date
  • Seed requirements: Email address, email permission Subscribed, last_purchase_date person attribute set to a date older than the lapse threshold
  • How to set the date attribute:
POST https://api.ap3api.com/v1/person/merge
X-Api-Key: {{api_key}}
{
  "merge_by": [["str::email"]],
  "merge_strategy": 2,
  "people": [
    {
      "fields": {
        "str::email": "seed@example.com",
        "dat::last-purchase-date": "2025-12-01"
      }
    }
  ]
}

Date format: ISO 8601 (YYYY-MM-DD). The field name dat::last-purchase-date uses Ortto's typed naming convention; the actual custom field name depends on what you've created in your Ortto account.

  • Filter trigger: Set the Journey entry filter: last_purchase_date is before 90 days ago. When the seed person's last_purchase_date satisfies this condition, they enter the Journey.

Post-purchase (Activity "Occurs" trigger)

  • Trigger: "Occurs" - purchase_completed custom activity or Shopify order activity
  • Seed requirements: Email address, email permission Subscribed
  • For Shopify integration: Complete an actual purchase in your store using the seed email address. Ortto's Shopify integration fires the purchase activity automatically.
  • For custom activity: Same API structure as cart abandonment, with the purchase activity type

Birthday / anniversary (Date field recurring trigger)

  • Trigger: "Date field / recurring" - fires annually on the month/day of the person's birthday attribute
  • Seed requirements: Email address, email permission Subscribed, birthday person attribute set (ISO 8601 format)
  • Set the birthday attribute:
POST https://api.ap3api.com/v1/person/merge
{
  "merge_by": [["str::email"]],
  "merge_strategy": 2,
  "people": [
    {
      "fields": {
        "str::email": "seed@example.com",
        "dat::birthday": "1990-04-15"
      }
    }
  ]
}
  • Trigger configuration: In the Journey entry settings, select "Date field / recurring" > select the birthday attribute > "Annually" (fires on month and day each year).
  • For same-day testing: Set the seed's birthday to today's date. The Journey evaluates the date trigger daily; the seed should enter on the next evaluation after the attribute is set.

Where to create seed profiles in the Ortto UI

  1. CDP > People > More > Add person - for creating a single seed person manually
  2. CDP > Audiences > [Audience] > Subscribe person - [NEEDS VERIFICATION: exact UI path for adding a person to a specific Audience in current Ortto UI]
  3. Marketing > Campaigns > Create > Journey > entry trigger - to review what trigger conditions the Journey uses and plan seed data accordingly

Ensuring seeds progress through the full Journey

Exit criteria: Check whether the Journey has exit conditions configured. If the seed person's attributes match an exit condition, they leave the Journey early.

Condition shapes: Journey branches based on filter conditions. The seed must satisfy the expected path conditions to reach the target email steps.

Re-entry mode: Journey re-entry has three options:

  • Only once - person enters once and must exit before re-entering
  • More than once, enter multiple times - person can be at different Journey stages simultaneously
  • Switching Journey OFF then ON - forces a batch re-evaluation; anyone meeting entry criteria at that moment re-enters

1-minute audience re-entry block: If you remove a seed from an Audience and immediately re-add them (within 1 minute), Ortto blocks the re-entry update to prevent processing race conditions. Wait at least 60 seconds between removing and re-adding a seed to an Audience-triggered Journey.


How to reset seeds for repeated Journey testing

Activity-triggered Journeys: Fire the activity event again. If the Journey's re-entry is "More than once," the seed enters a new Journey instance.

Audience/filter-triggered Journeys: Remove the seed from the qualifying conditions (update the attribute that made them qualify, or remove from the Audience), wait >60 seconds, then re-add the qualifying conditions.

Toggle Journey off and on: Navigate to the Journey > toggle it off (pauses the Journey) > toggle it back on. Anyone who currently meets entry criteria enters the Journey. Use this carefully in production - it affects all eligible people, not just seeds.

Create a new seed person: Use a different email address or change the seed's str::email attribute to a new value.


3. Platform-specific considerations

API options

Create or update person:

POST https://api.ap3api.com/v1/person/merge
X-Api-Key: {{api_key}}

Upserts by the specified merge_by field. Accepts up to 100 people per request.

Create a custom activity:

POST https://api.ap3api.com/v1/activities/create

Records an activity event for a person.

Get person records:

POST https://api.ap3api.com/v1/person/get

Subscribe/unsubscribe person to Audience:

POST https://api.ap3api.com/v1/audience/subscribe

Set subscribe: true to add, subscribe: false to remove.

API key location: Settings > API Keys > Create API Key. Select the appropriate permissions (read, write, export for your use case).

Region-specific base URLs: Ortto may have region-specific API domains. Confirm your account's API base URL from the Settings > API documentation within your Ortto account.

Rate limits

OperationLimit
Activities per contact per activity type50 per 24 hours
People per merge request100 per request (recommended batch size)
General APIPlan-dependent; returns HTTP 429 when exceeded

Rate limits can be increased on request for enterprise plans. Implement exponential backoff on 429 responses.

Duplicate contact handling

Primary unique identifier: Email address (default merge_by field: str::email). When POST /v1/person/merge is called with an existing email, the record is updated (upserted) rather than duplicated.

Duplicate records: If duplicates do exist (e.g., from historical data), navigate to CDP > Duplicates to view and manually merge them. On merge: the primary contact's field values are retained; missing fields are filled from the secondary record.

1-minute re-entry block: After a person exits and re-enters an Audience within 60 seconds, the re-entry update is blocked to prevent processing race conditions. This affects testing workflows that rapidly toggle Audience membership.

Platform-specific terminology

Ortto termWhat it means
PersonA contact/profile in Ortto's CDP (equivalent to a Contact/User in other platforms).
ActivityAn event recorded for a person (equivalent to a metric event in Klaviyo or custom event in Customer.io).
AudienceA saved dynamic segment that auto-updates based on filter conditions.
FilterAn ad hoc, non-saved query used for one-off campaign targeting or analysis.
JourneyAn automated multi-step workflow triggered by activities, dates, or audience membership.
CampaignA one-time email send (can also refer to an automated Journey campaign).
Email permissionThe person's marketing email consent status (Subscribed, Unsubscribed, Transactional only).
str::, bol::, dbl::, dat::Ortto's field type prefixes used in API field names (string, boolean, double/number, date).
Sunset policyAccount-level settings that automatically manage contact engagement thresholds and opt-out behavior.
Re-entry blockOrtto's 60-second block on audience re-entry to prevent processing race conditions during rapid changes.

Known limitations and workarounds

1-minute audience re-entry block. When testing Journey re-entry, always wait at least 60 seconds after removing a seed from an Audience before re-adding them. Rapid toggle cycles are silently blocked.

Activity rate limit is per-activity-type per person per day. Testing a Journey with multiple abandonment events against the same seed person will hit the 50 activity limit. Use multiple seed people or reset on different days.

Journey toggle OFF/ON re-enrolls all eligible people - not just seeds. In production environments, avoid using Journey toggle as a testing tool. Use individual person targeting methods instead.

Ortto does not have a global "test send" or seed group feature comparable to Braze's Internal Groups. Seeds must be actual person profiles in the CDP and go through the full Journey flow.

Some Ortto documentation uses the Autopilot brand name (prior branding). Internal API responses and field names may still reference Autopilot terminology (ap3api.com domain is intentional).

Start monitoring your Ortto sends

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

Start free