コンテンツにスキップ

Validate an API key

GET
/v1/whoami

Confirms that an API key is valid and active, and echoes its non-sensitive metadata. This operation is scope-agnostic: any valid, active API key authenticates, so an integrator can verify a key works — including an ingest-only key that holds no control-plane scope — without sending real telemetry. There is no per-route scope check.

Because it enforces no scope, an OAuth Bearer token can never satisfy it; the operation accepts the X-API-Key scheme only.

The key secret is never returned, and the data payload is tiered by scope. A key holding any of analytics:read, resources:write, or data:admin (a server-side Developer Platform credential) receives the full metadata set (projectId, projectName, tenantId, planId, scopes). A pure data-plane key (only events:write and/or events:synthetic, embedded in a shipped game client) is write-only by contract and receives just projectId and scopes — never the tenant, project name, or plan tier.

The key is valid. projectId and scopes are always present; projectName, tenantId, and planId are present only for keys holding a metadata scope (analytics:read, resources:write, or data:admin).

object
success
boolean
data
required
object
projectId
required

The project the key is bound to.

string format: uuid
projectName

Human-readable project name. Present only for keys with a metadata scope.

string
tenantId

The owning tenant. Present only for keys with a metadata scope.

string format: uuid
planId

The tenant’s plan tier. Present only for keys with a metadata scope.

string
scopes
required

The scopes granted to the key.

Array<string>
X-RateLimit-Limit
integer

Maximum number of requests allowed per hour.

X-RateLimit-Remaining
integer

Number of requests remaining in the current window.

X-RateLimit-Reset
integer

Unix timestamp when the rate limit window resets.

Missing or invalid API key.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer

Rate limit exceeded. Key validation uses an isolated per-tenant bucket (60 requests/hour) that is separate from the plan quota, so validating a key never consumes an operation’s request budget. The Retry-After header is derived from the sliding window’s reset time, so honor the value on each response; the X-RateLimit-* headers describe the same window.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer
Retry-After
integer

Number of seconds to wait before retrying. Present only on 429 responses. Because the limit uses a sliding window, honor this value per response rather than scheduling a retry for the reset time.

X-RateLimit-Limit
integer

Maximum number of requests allowed per hour.

X-RateLimit-Remaining
integer

Number of requests remaining in the current window.

X-RateLimit-Reset
integer

Unix timestamp when the rate limit window resets.