Read a subscriber's preferences (admin)
Authorization
ApiKeyBearer Environment-scoped management API key.
In: header
Path Parameters
Customer-provided subscriber id (e.g. usr_42).
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/subscribers/string/preferences"{
"preferences": [
{
"category": "string",
"channel": "in_app",
"enabled": true
}
]
}{
"error": {
"code": "invalid_request",
"message": "string"
}
}{
"error": {
"code": "invalid_request",
"message": "string"
}
}Read own preferences GET
Previous Page
Merged inbox list (direct + broadcast), keyset-paginated GET
Newest first, ordered by `(occurred_at, id)` descending across both sources. `cursor` is the opaque keyset token from the previous page's `next_cursor`. Category mutes are applied server-side. Supports `ETag` / `If-None-Match`, so post-reconnect refetches (deploy thundering herd) are mostly 304s. The validator is a strong hash over: the request cursor, `subscriber_counters.updated_at` (bumped by EVERY read-state mutation — see the counter invariants in schema.sql), the subscriber's latest direct item `(visible_at, id)`, the environment's latest broadcast `(created_at, id)`, and `max(preferences.updated_at)` for the subscriber. Each input is one index-only lookup; anything that can change a page moves at least one of them. Responses are `Cache-Control: private, max-age=0` — inbox pages are per-user data and must never be cached by shared proxies.