Skip to main content

Subscriber Status

Each subscriber has a status that indicates whether newsletters may be received.

Account without channels

Without channels, there is exactly one status per subscriber.

Account
├─ Subscriber A (max@example.com)
│ └─ Status: Active (global)

├─ Subscriber B (lisa@example.com)
│ └─ Status: Unsubscribed (global)

└─ Newsletter delivery
└─ Sent to all active subscribers

Account with channels

With channels, each subscriber has one status per channel. For example, a subscriber can be active for a newsletter channel but inactive for an advertising channel.

Account
├─ Channel 1: "Product Newsletter"
├─ Channel 2: "Blog Updates"
└─ Channel 3: "Event Invitations"

Subscriber A (max@example.com)
├─ Channel 1: Status Active ✓
├─ Channel 2: Status Active ✓
└─ Channel 3: Status Unsubscribed ✗

Subscriber B (lisa@example.com)
├─ Channel 1: Status Unsubscribed ✗
├─ Channel 2: Status Active ✓
└─ Channel 3: Status Active ✓

Newsletter sent via Channel 1
├─ Subscriber A: Receives newsletter ✓
└─ Subscriber B: Does not receive newsletter ✗

Status values

There are three basic status values:

StatusNameDescription
1RECEIVE_READYSubscriber is ready to receive newsletters.
2NOT_RECEIVE_READYSubscriber is not ready yet (e.g. opt-in pending).
3ARCHIVEDSubscriber is archived and no longer receives newsletters.

Status additions

Each status can have a status addition that specifies the reason in more detail:

StatusStatus AdditionDescription
1 (RECEIVE_READY)nullSubscriber is active.
2 (NOT_RECEIVE_READY)1 = OPTIN_PENDINGOpt-in was requested but not confirmed yet.
2 (NOT_RECEIVE_READY)2 = NO_OPTINNo opt-in required (e.g. transactional emails).
2 (NOT_RECEIVE_READY)3 = TRANSACTIONTransactional emails only.
3 (ARCHIVED)4 = UNSUBSCRIBEDSubscriber unsubscribed.
3 (ARCHIVED)5 = HARD_BOUNCEEmail address does not exist (hard bounce).
3 (ARCHIVED)6 = MANUALArchived manually.
3 (ARCHIVED)7 = COMPLAINEDSpam complaint.
3 (ARCHIVED)8 = BLACKLISTBlacklist (manual)

Status Lifecycle

The typical lifecycle of a subscriber:

Newly created

├─→ Status 2, Addition 1 (Opt-In pending)
│ │
│ └─→ Status 1 (Active) ─────┐
│ │
└─→ Status 1 (Active without Opt-In) ─┘

├─→ Status 3, Addition 4 (Unsubscribed)
├─→ Status 3, Addition 5 (Hard Bounce)
├─→ Status 3, Addition 6 (Manually archived)
└─→ Status 3, Addition 7 (Spam complaint)

Examples

Active subscriber

{
"status": 1,
"statusAddition": null
}

Subscriber is active and receives newsletters.

Unsubscribed subscriber

{
"status": 3,
"statusAddition": 4
}

Subscriber is archived because they unsubscribed.

Opt-in pending

{
"status": 2,
"statusAddition": 1
}

Subscriber was created but still needs to confirm the email address (double opt-in).

Status changes via API

info

Important: Some status changes require special API permissions. For example, an archived unsubscribed subscriber can only be reactivated if the API key has the corresponding permission.

Set status via API

Subscriber status can be set differently depending on account configuration:

Without channels

For accounts without channels, status is set directly on the subscriber object:

POST /subscribers
PUT /subscribers/{id}
PUT /subscribers/multiple
POST /subscribers/upsert

Request:

{
"email": "mail@example.com",
"status": 1,
"statusAddition": null
}

Example - Unsubscribed subscriber:

{
"email": "mail@example.com",
"status": 3,
"statusAddition": 4
}

With channels

For accounts with channels, status is set per channel in the channels array:

POST /subscribers
PUT /subscribers/{id}
PUT /subscribers/multiple
POST /subscribers/upsert

Request:

{
"email": "mail@example.com",
"channels": [
{
"id": 1,
"status": 1,
"statusAddition": null
},
{
"id": 2,
"status": 3,
"statusAddition": 4
}
]
}

Retrieve status

Without channels

GET /subscribers/{id}

Response:

{
"objectType": "Subscriber",
"id": 1,
"email": "mail@example.com",
"status": 1,
"statusAddition": null,
"optinAt": "2024-01-15 10:30:00",
"optoutAt": null
}

With channels

GET /subscribers/{id}?include=channels

Response:

{
"objectType": "Subscriber",
"id": 1,
"email": "mail@example.com",
"channels": {
"data": [
{
"objectType": "Channel",
"id": 1,
"isDefault": true,
"status": 1,
"statusAddition": null,
"optinAt": "2024-01-15 10:30:00",
"optinIp": "192.168.1.1",
"optoutAt": null,
"optoutIp": null,
"translations": {
"de": {
"name": "Newsletter"
}
}
}
]
}
}