Iterable Acceptance E2E Runbook

Status

The code path is prepared but owner-gated. Do not enable it until Asana task 1216860419874164 contains the approved restricted list, campaign/template, trigger, mailbox, destination hosts, webhook latency, and cleanup policy.

Runtime Contract

Iterable documents https://api.eu.iterable.com as the EDC API base URL and requires API keys in the Api-Key header. The pilot uses documented profile, event, targeted-email, subscription, event-history, and user deletion endpoints:

Preflight

Run the validation command inside the acceptance runtime. It does not make a network request:

python manage.py check_iterable_acceptance \
  --run-id lti-acc-example-001 \
  --recipient approved-mailbox@example.test \
  --scenario standard_donation \
  --destination-url https://approved-acceptance.example.test/path

The output contains a recipient fingerprint, not the mailbox. A failure means the owner contract or runtime configuration remains incomplete.

Execution Order

  1. Create or update the run-owned synthetic profile.
  2. Subscribe it only to the approved test list.
  3. Track the approved trigger event and target the approved campaign.
  4. Poll within the approved latency window and retain redacted send evidence.
  5. Open the received message from the approved mailbox and validate the final acceptance destination before continuing.
  6. Run the standard donation, express donation, or list-level unsubscribe path.
  7. Correlate FRAPI, webhook, and final subscription evidence by run ID.
  8. Delete only the exact run-owned synthetic profile after evidence retention.

Evidence

Retain run ID, scenario, list/campaign/template identifiers, operation name, HTTP status, elapsed time, send/delivery timestamps, final hostname, donation trace identifier, webhook correlation, and final subscription state. Do not retain API keys, raw email addresses, response bodies, DR values, payment data, or tracked-link query strings.

Failure Handling