Audience

Subscribers with a paper trail

Lists hold contacts, their consent state, and arbitrary metadata for personalization, with double opt-in as a first-class setting, not an afterthought.

Structure

Metadata that feeds your templates

Each contact carries arbitrary JSON metadata (a first name, a plan tier, a signup source), available as template variables like {{ first_name }} in every send to that list. Bulk import takes a contacts array on the same endpoint; new accounts importing bursts of cold contacts are screened for abuse.

curl -X POST https://api.euromail.dev/v1/contact-lists \
  -H "X-EuroMail-Api-Key: em_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Product Updates",
    "double_opt_in": true
  }'
Consent

Three states, no ambiguity

Contacts are pending, subscribed, or unsubscribed, and only subscribed contacts receive broadcasts. With double opt-in enabled, new contacts confirm by email before activation, which is effectively required for EU marketing. Lists can auto-send a welcome email on subscription, deduplicated so nobody is welcomed twice.

Statuses
pending · subscribed · unsubscribed
Double opt-in
Per-list setting
Welcome email
Automatic, never sent twice
Broadcast audience
Subscribed contacts only