GET
/api/v1/mailboxes/{mailboxId}/keywords

Every distinct keyword on this mailbox's LIVE messages, most-used first then alphabetical, with how many messages carry each.

Expunged messages are excluded: they keep their keywords so a restore can put them back, but they are not mail the user has. Protocol keywords are NOT filtered out — $forwarded, $junk and the rest are returned like any other, because which of them are worth showing is a client's decision, not core's.

Scoped like every other read: a folder-scoped grant reports the keywords inside the grant and no others.

Authorization

bearerAuth
headerAuthorizationBearer <token>

Two credential kinds share this scheme; GET /api/v1/auth/whoami answers which one you hold and what it reaches.

oek_… API key (minted by POST /api/v1/api-keys; shown once at mint). role: account reaches the full account surface: the directory (domains, routes, patterns, api-keys, accounts, address lists) plus every mailbox the account owns. role: system additionally reaches the operator surface, which is documented separately.

oemp_… mailbox app password (minted by POST /api/v1/identities/{identityId}/credentials). Reaches ONE mailbox: its messages, labels, threads, search, sync, send, filters and PIM collections. Directory routes refuse it with 403 insufficient_scope.

Refusal vocabulary: a missing, malformed, expired, or revoked credential answers 401 unauthorized with a WWW-Authenticate: Bearer challenge; a VALID credential outside its scope answers 403 (insufficient_scope for an app password on a directory route, system_credentials_required where only the operator may call). The public routes (health, branding, token-in-path capabilities) declare security: [].

Path Parameters

mailboxId*string

Mailbox ULID identifier

Query Parameters

limit?integer

Maximum distinct keywords to return (default 100, max 500). The cut falls on the least-used, since the order is by count.

Range1 <= value <= 500

Response Body

Keywords in use

application/json
  1. response
keywords*array<>

Distinct keywords, most-used first, then alphabetical

Example Request
curl -X GET 'https://api.open.email/api/v1/mailboxes/string/keywords'
Example Response
{
  "keywords": [
    {
      "count": 0,
      "keyword": "string"
    }
  ]
}