Integrations

Adobe Campaign v8: Telltide Seed Address Guide

Place Telltide seeds in Adobe Campaign workflows.

Product scope: This guide covers Adobe Campaign v8 (Managed Cloud Services), the supported successor to Adobe Campaign Classic. Campaign Classic (v7) is approaching end-of-life and v8 is the supported migration path; the two share the same core data model and tooling. If you are on Adobe Campaign Standard (ACS), Adobe is decommissioning ACS and the recommended migration path is Adobe Campaign v8 (with Adobe Journey Optimizer as a parallel option for journey-led use cases). If you have already moved to Adobe Journey Optimizer, see the AJO guide instead.

Adobe Campaign v8 has a native seed address system. In the Client Console these records are called Seed addresses; in the Campaign Web UI they are called Test profiles. They live in the nms:seedMember schema, separate from the main recipient database (nms:recipient). They receive a copy of every delivery they are associated with, regardless of the main targeting criteria. Seeds can be added per-delivery (affects that delivery only), at the Campaign level (auto-propagates to all deliveries in the campaign), or referenced by a Query activity inside a workflow.

Telltide-relevant detail: seed addresses are automatically excluded from Open, Click, and Unsubscribe reporting, so monitoring them does not skew delivery KPIs.

Quick reference

Send typeWhere to add seedsComplexity
Scheduled (Delivery / Campaign)Add seed to the Delivery's Seed addresses tab, or attach at Campaign level to auto-propagateLow
Always-on (Workflow)Add seed to the Delivery activity's Seed addresses tab inside the workflow, or include via the targeting QueryMedium

1. Scheduled / one-off sends (Deliveries)

Adobe Campaign Deliveries are individual email sends. Seeds are records in the nms:seedMember schema with their own fields for personalization data.

Non-technical path

For CRM managers and marketing operators working in the UI.

Create a seed via the Client Console

  1. Navigate to Resources > Campaign management > Seed addresses.
  2. Click New.
  3. Enter the seed email address, first name, last name.
  4. Fill in any additional fields needed to resolve personalization tokens used in your email templates.
  5. Save.

Create a test profile via the Campaign Web UI

Campaign v8 ships a browser-based Web UI alongside the Client Console. Both interfaces read and write the same nms:seedMember records.

  1. From the left menu, select Customer management > Profiles.
  2. Click the Test profiles tab.
  3. Click Create test profile.
  4. Enter the email address and any profile data referenced by your templates.
  5. Save.

Bulk import seeds via file (Web UI or Console)

For larger batches, use a Data loading (file) workflow activity to import a CSV of seed records into the nms:seedMember schema:

  1. Build a workflow with Data loading (file) > Mapping > Update data targeted at nms:seedMember.
  2. Map the CSV columns to the seed schema fields (email, firstName, lastName, @isTest, plus any custom fields you reference in templates).
  3. Set the operation type on the Update data activity to Insert or update.
  4. Run the workflow.

Attach a seed to a single delivery

  1. Open the target delivery.
  2. In the delivery wizard, click To (the audience definition step).
  3. Click the Seed addresses tab.
  4. Click Add to search for and select the seed(s).
  5. Or click Import to load a saved seed selection template.
  6. Confirm. Seeds receive the delivery regardless of the main targeting criteria.

Attach seeds at the Campaign level

  1. Open the Campaign.
  2. Open Campaign properties (gear icon or Edit menu).
  3. Find the Seed addresses section.
  4. Add seeds. Every delivery created within this campaign automatically inherits them, no per-delivery configuration needed.

Technical path

For developers and integration engineers.

Authentication

Adobe deprecated Service Account (JWT) credentials on 30 June 2025. All new integrations must use OAuth Server-to-Server credentials issued from the Adobe Developer Console. Existing JWT-based scripts must be migrated.

Generate a project at console.adobe.io > Your project > Add API > Adobe Campaign > OAuth Server-to-Server, then exchange the client credentials for an access token:

POST https://ims-na1.adobelogin.com/ims/token/v3
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id={{client_id}}
&client_secret={{client_secret}}
&scope=openid,AdobeID,read_organizations,additional_info.projectedProductContext,additional_info.roles,adobeio_api,read_client_secret,manage_client_secrets

Access tokens are short-lived. Cache and refresh before expiry.

REST API: write a seed via profileAndServices

Adobe Campaign v8 exposes a REST surface at mc.adobe.io/{ORGANIZATION}/campaign/.... The publicly documented resources under profileAndServices are /profile, /service, and /subscription. The nms:seedMember schema does not have a documented public REST resource, so the supported programmatic path is one of:

  • write directly via the SOAP API against the nms:seedMember schema, or
  • expose a custom REST resource over nms:seedMember and call that from your scripts.

Custom REST resource example, after exposing nms:seedMember as seedMember:

POST https://mc.adobe.io/{ORGANIZATION}/campaign/profileAndServicesExt/seedMember
Authorization: Bearer {{access_token}}
X-Api-Key: {{client_id}}
Content-Type: application/json

{
  "email": "seed@example.com",
  "firstName": "Seed",
  "lastName": "Monitor",
  "isTest": true,
  "birthDate": "1985-04-15"
}

SOAP API: write a seed via xtk:session

Campaign v8 still supports the SOAP layer for schemas that are not surfaced via REST. Use the Write method on the xtk:session service against nms:seedMember:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xtk:session">
  <soapenv:Header>
    <urn:SessionToken>{{session_token}}</urn:SessionToken>
  </soapenv:Header>
  <soapenv:Body>
    <urn:Write>
      <urn:domDoc>
        <seedMember _operation="insertOrUpdate" _key="@email"
                    email="seed@example.com"
                    firstName="Seed" lastName="Monitor"
                    isTest="true" birthDate="1985-04-15"/>
      </urn:domDoc>
    </urn:Write>
  </soapenv:Body>
</soapenv:Envelope>

_key="@email" makes the call idempotent on email.

Configure the seed-exemption typology rule (one-time)

Pressure rules and filtering rules can suppress a seed unless you exempt it. Add a filter condition to the relevant typology rule that excludes records where @isTest = 1. This is the standard configuration for keeping seed deliverability decoupled from production frequency caps.

Always-on flow coverage

For Adobe Campaign workflows, recurring deliveries, and campaign templates.

Adobe Campaign always-on sends run inside Workflows: visual flowcharts of activities (Scheduler, Query, Split, Wait, Enrichment, Delivery, etc.). To guarantee a seed is monitored on every execution of a workflow:

  1. Prefer the Delivery activity's Seed addresses tab. Open the Delivery activity in the workflow, click To > Seed addresses, and add the seed there. The seed receives every execution of that step without altering the main targeting query. This is the cleanest pattern for always-on flows.
  2. Or include the seed in the targeting Query. Configure the Query activity that feeds the Delivery to UNION (Union activity) the main audience with a small Query targeting nms:seedMember where @isTest = 1 and matching your monitoring tag. Use this pattern when you specifically want the seed to flow through Enrichment activities (typology rules, address validation, dedup) the same way real recipients do.
  3. Confirm typology rule exemption. Whichever inclusion path you choose, verify the typology rule attached to the workflow's Delivery template excludes seeds via @isTest = 1 (see Technical path), otherwise pressure rules will silently drop the seed during always-on execution.
  4. Set Campaign-level seeds for whole-program coverage. If a Campaign template contains many recurring Deliveries (welcome, abandonment, winback, post-purchase), adding the seed once at the Campaign properties level propagates it to every Delivery activity in every workflow under that Campaign.

Workflow entry points

Entry activityHow it worksSeed approach
SchedulerRuns the workflow at set intervalsSeed must be in the queried audience at execution time, or attached on the Delivery activity
File collectorTriggers on file arrivalInclude a seed row in the inbound file, or attach on the Delivery activity
External signalAPI-triggered start of a paused workflowTrigger via API; seed attached on the Delivery activity
Inbound eventsTriggered by event dataConfigure the event payload to route to the seed profile

Per-journey seed configuration

Welcome / onboarding (Scheduler + Query)

  • Entry: Scheduler fires daily. Query targets recipients where dateCreated is today (or dateSubscribed is today).
  • Seed requirements: Seed record with email and any personalization fields used in the welcome email.
  • Inclusion: Attach the seed to the Delivery activity's Seed addresses tab inside the workflow.

Abandoned cart (Wait + Query)

  • Pattern: Scheduled workflow checks periodically for contacts with recent cart data and no subsequent purchase. Wait activity delays the first send.
  • Seed requirements: Seed with cart data fields populated (product name, cart value, cart URL).
  • Inclusion: Attach to the Delivery activity's Seed addresses tab. Populate the seed's custom data fields with representative cart values so personalization resolves.

Browse abandonment

  • Pattern: Scheduler-based workflow. Query targets contacts who viewed product pages without purchasing. Requires web tracking data linked to recipient profiles.
  • Seed requirements: Seed with browse data fields (product viewed, URL).
  • Inclusion: Same as abandoned cart, attach on the Delivery activity.

Winback / re-engagement (Date-based Scheduler)

  • Entry: Scheduler runs daily. Query filters contacts where lastPurchaseDate is older than the lapse threshold.
  • Seed requirements: Seed with lastPurchaseDate set older than the threshold.
  • Query condition:
Day(GetDate()) - Day(@lastPurchaseDate) > 90

Post-purchase (External signal or Scheduler)

  • Entry: External signal (API-triggered) or a Scheduler that queries recent order records linked to contacts.
  • Seed requirements: Seed with order data fields (order ID, total, product name).

Birthday / anniversary (Scheduler with annual date condition)

  • Entry: Scheduler runs daily. Query uses an anniversary match:
Day(@birthDate) = Day(GetDate()) AND Month(@birthDate) = Month(GetDate())
  • Seed requirements: Seed with birthDate set so today matches month and day.
  • Date format: ISO 8601 (YYYY-MM-DD) via API. The Console date picker uses the operator's locale format.
  • Same-day testing: Set birthDate to today; on the next Scheduler execution the Query will match.

Reset between runs

  • Seeds receive deliveries on every workflow execution; there is no automatic frequency cap on seeds.
  • If a previous test cycle bounced, clear quarantine before the next run: Administration > Campaign Management > Non deliverables and addresses, search by email, delete the record.

2. Personalization parity

Dynamic content blocks

Adobe Campaign personalization blocks evaluate against the recipient's own profile data. The seed receives the block matching its own profile fields, not a default. Set the seed's profile fields to match the segment you want to monitor.

A/B test deliveries

Each variant is a separate Delivery object. Add the seed to each variant's Seed addresses tab to monitor every arm.

Required attributes on the seed

  • Email address.
  • @isTest = 1 so typology-rule exemptions work.
  • Values for any personalization tokens (@@firstName, @@lastName, custom fields) referenced by the template.
  • Not on the quarantine list (see Gotchas).

3. Platform-specific considerations

API options

Get an OAuth access token (replaces JWT):

POST https://ims-na1.adobelogin.com/ims/token/v3
Content-Type: application/x-www-form-urlencoded

Create or update a recipient profile:

POST https://mc.adobe.io/{ORGANIZATION}/campaign/profileAndServices/profile

Create or update a seed (custom REST resource over nms:seedMember):

POST https://mc.adobe.io/{ORGANIZATION}/campaign/profileAndServicesExt/seedMember

Trigger a workflow via external signal:

POST https://mc.adobe.io/{ORGANIZATION}/campaign/workflow/execute/{workflow_id}/signal

Region-specific API base: Confirm the region prefix for your tenant from the Adobe Developer Console. US instances use mc.adobe.io; some EU and APAC tenants use a regional subdomain.

Credentials location: Adobe Developer Console (console.adobe.io) > your project > OAuth Server-to-Server credentials.

Rate limits

Adobe does not publish explicit per-second rate limits for the Campaign REST API, but Adobe documents recommendations and limitations for the API surface (payload size, concurrency, async processing). Treat write calls as asynchronous: a successful response means the request was accepted, not that the record is queryable yet. For large batches, prefer a Data loading (file) workflow activity over per-record REST calls.

Duplicate contact handling

  • Main recipient table: Email is not enforced as globally unique on nms:recipient. Add a Deduplication workflow activity before the Delivery to dedupe by email; otherwise duplicates each receive a copy.
  • Seed table: nms:seedMember is a separate schema. Seeds are not merged with main recipients. Use _key="@email" on SOAP writes (or a uniqueness constraint on your custom resource) to keep seed records idempotent.

Platform-specific terminology

Adobe Campaign v8 termWhat it means
DeliveryAn individual email send.
CampaignA container grouping related Deliveries with shared settings and seed addresses.
WorkflowAn automated multi-step sequence built in a visual flowchart editor.
Seed address / Test profileSame record. The Client Console labels it "Seed address"; the Campaign Web UI labels it "Test profile". Stored in nms:seedMember. Receives deliveries regardless of targeting.
Client ConsoleThe thick-client desktop application for managing Campaign v8.
Campaign Web UIThe browser-based interface for Campaign v8. Not all Console features are available there yet.
Query activityA workflow activity that queries the database to define a target audience.
Scheduler activityA workflow activity that triggers the workflow on a defined schedule.
QuarantineAddress-level suppression. Email blocked due to hard bounce, repeated soft bounces, or spam complaint.
DenylistContact-level opt-out. The contact has unsubscribed and will not receive marketing email.
Typology ruleA business rule applied before send. Subtypes: filtering, pressure (frequency cap), control, deduplication.
External signalAn API trigger that starts a paused or waiting workflow programmatically.
Campaign ClassicThe predecessor product (v7). Approaching end-of-life; customers migrating to Campaign v8. Shares the nms:seedMember and nms:recipient data model.
Adobe Campaign StandardA separate cloud-native product. Adobe is decommissioning it; the recommended migration path is Campaign v8, with Adobe Journey Optimizer as a parallel option for journey-led use cases. Not covered by this guide.

Known limitations and workarounds

OAuth tokens are short-lived. Cache and refresh access tokens. JWT-based scripts no longer work and must be migrated to OAuth Server-to-Server.

Seeds are subject to typology rules by default. Pressure and filtering rules can drop a seed silently. Add a filter condition @isTest = 1 to the relevant typology rules so seeds bypass frequency caps.

Seeds are excluded from Opens, Clicks, and Unsubscribes in delivery reports. This is by design and is helpful for KPI hygiene, but it means you cannot use Campaign's standard delivery reports to confirm a seed received the email; rely on Telltide's inbox-side detection instead.

Quarantine blocks all sends to that address. After any bounce on a seed, remove the quarantine record before the next test cycle: Administration > Campaign Management > Non deliverables and addresses.

No automatic deduplication. Without a Deduplication activity in the workflow, a seed that exists more than once in the queried dataset will receive multiple copies.

Birthday condition does not handle leap years cleanly. For 29 February seeds, fall back to Day(@birthDate) = 28 AND Month(@birthDate) = 2 in non-leap years.

nms:seedMember is not exposed as a stock REST resource. Use SOAP xtk:session.Write, or expose a custom REST resource over the schema, to manage seeds programmatically.

Start monitoring your Adobe Campaign sends

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

Start free