Context
CMP will rely on Datamailer contacts for campaigns and future recipient-list sends. The current contact state semantics are not safe enough for this.
Observed during CMP/Datamailer protocol review:
- CMP contact upsert examples use
status: subscribed, but existing CMP sync may omit it during some flows.
- Datamailer defaults missing contact upsert status to
pending.
- Campaign snapshot logic skips contacts whose client/audience subscription is not subscribed.
verified=true in the contact API verifies the subscription, but campaign snapshot eligibility checks the global contact verification timestamp.
- Contact status and campaign snapshot should agree about whether a contact can receive marketing/list/campaign email.
Desired behavior
- Contact upsert with
status=subscribed and verified=true makes the contact eligible for marketing/list/campaign sends unless suppressed.
- Contact status and campaign/list snapshot eligibility use the same verification/subscription semantics.
- Transactional sends continue to bypass marketing unsubscribe where appropriate, but still respect hard suppressions such as hard bounce and complaint.
Acceptance criteria
- Add or update tests showing a contact upserted through the client API with
status=subscribed and verified=true is eligible for campaign/list snapshot.
- Contact status
can_send_marketing matches campaign/list eligibility for the same contact.
- Pending/unsubscribed contacts are skipped from campaign/list sends.
- Hard bounced or complained contacts are skipped/suppressed.
- Document the exact meaning of
verified=true for contacts and subscriptions.
Related
This blocks Datamailer recipient lists and CMP-driven course email targeting.
Context
CMP will rely on Datamailer contacts for campaigns and future recipient-list sends. The current contact state semantics are not safe enough for this.
Observed during CMP/Datamailer protocol review:
status: subscribed, but existing CMP sync may omit it during some flows.pending.verified=truein the contact API verifies the subscription, but campaign snapshot eligibility checks the global contact verification timestamp.Desired behavior
status=subscribedandverified=truemakes the contact eligible for marketing/list/campaign sends unless suppressed.Acceptance criteria
status=subscribedandverified=trueis eligible for campaign/list snapshot.can_send_marketingmatches campaign/list eligibility for the same contact.verified=truefor contacts and subscriptions.Related
This blocks Datamailer recipient lists and CMP-driven course email targeting.