Subscriptions
Subscriptions is the device-level view: one row per APNs token, FCM token or web push endpoint. For the person-level view use Users. Import at the top uploads a CSV — see Import subscribers; CSV downloads the current filter.

Filters
| Filter | Matches |
|---|---|
| Platform | iOS / Android / Web |
| externalId | Devices owned by that user |
| Label | key:value |
| Country | ISO country code (TR) |
| Opted out | Include opted-out and invalidated rows (hidden by default) |
Columns: platform, owner (externalId or anonymous), device model or browser, app version, country, last active, status. Cursor paging on _id descending — there is no skip, so the list stays fast at millions of rows. CSV exports the current filter without tokens or endpoints.
The side panel
Click a row.

| Section | Content |
|---|---|
| Subscription | id, platform, opted-in status (opted out, invalid with the invalidation time), standalone for web (installed as a PWA — the only way iOS delivers web push), browser, model, OS and app version, SDK version, created / last active / Last notified. |
| User | The owner, with a link to the user page; language, timezone, country. |
| Tags | The write-through copy of the owner's tags. Identical across the user's devices by construction. |
| Last 10 events | The device's last ten events. |
The token or endpoint itself is never displayed — only a masked form (…a3f9). It is not needed for support: everything is addressed by subscription id.
What the statuses mean
| Status | Set by | Targeted? |
|---|---|---|
| active | subscribe | ✅ |
| opted out | unsubscribe() from the SDK, PATCH optedIn:false, or the 90-day inactivity sweep | ❌ |
| invalid (invalidated) | the worker, on a permanent transport error (410, Unregistered, UNREGISTERED…) | ❌ |
A device that subscribes again is revived from either state.