List message activity

GET
/v1/messages

Newest-first, cursor is the bare epoch-ms created_at of the last row returned (?cursor= returns rows strictly older). Tag filtering uses D1 json_extract() against the tags JSON column; there is no status filter on this endpoint.

Authorization

bearerAuth
headerAuthorizationBearer <token>

API key sent as Authorization: Bearer <key>. Looked up by SHA-256 hash (email_core::sha256_hex) against api_keys.hash; revoked keys and keys belonging to a suspended tenant are rejected. See the top-level Authentication section for permission levels.

Query Parameters

limit?integer

Max rows to return.

Range1 <= value <= 100
Default25
cursor?integer

Return rows strictly older than this epoch-ms timestamp.

Formatint64
tag_key?string

Filter to messages whose tags JSON has this key (e.g. campaign).

tag_value?string

Combined with tag_key to filter on an exact value; alone it is ignored.

Response Body

Message list.

application/json
  1. response
data?array<>
next_cursor?|
Formatint64
curl -X GET "https://example.com/v1/messages"
{  "data": [    {      "id": "string",      "from_addr": "string",      "to_addr": "string",      "subject": "string",      "status": "queued",      "ses_message_id": "string",      "error": "string",      "created_at": 0,      "updated_at": 0    }  ],  "next_cursor": 0}