Skip to content

GET /v1/keys

Call GET /v1/keys
Price free
Scope keys:manage
Operation id listKeys

Your organization’s keys with scopes, limits, status and last use. Secrets are never returned. Free. Scope: keys:manage.

Copy it as curl. Set VERDICT_API_KEY first; uuidgen makes a fresh Idempotency-Key.

Request
curl -X GET 'https://api.askverdict.io/v1/keys' \
-H "Authorization: Bearer $VERDICT_API_KEY"

200: A page of keys.

200 response
{
"data": [
{
"id": "key_01JC3Z4Y8R9K2M5N7P1Q3S5T7V",
"project_id": "prj_01JC3Z4Y8R9K2M5N7P1Q3S5T7V",
"name": "outbound-agent prod",
"environment": "live",
"prefix": "vd_live_Ab12Cd",
"scopes": [
"decisions:write",
"index:read",
"outcomes:write"
],
"status": "active",
"rate_limit_per_minute": 600,
"daily_spend_cap_usd": 25,
"ip_allowlist": [],
"expires_at": null,
"last_used_at": "2026-11-07T14:03:00Z",
"created_at": "2026-11-01T09:00:00Z"
}
],
"next_cursor": null,
"has_more": false
}
Name In Type Required Description
cursor query string no Opaque cursor from the next_cursor of the previous page. Omit it for the first page.
limit query integer no Page size, 1 to 200. Default 50.
x-verdict-version header string no API version to use, a date. Defaults to the version current when the key was created. The current version is 2026-11-01.
Field Type Required Description
data array of ApiKey yes Keys.
data[].id string yes The key id.
data[].project_id string yes Project the key belongs to.
data[].name string yes Name.
data[].environment enum: “live”, “test” yes live or test.
data[].prefix string yes The key’s first characters, to recognize it.
data[].scopes array of enum: “decisions:write”, “index:read”, “outcomes:write”, “watches:manage”, “vendors:call”, “account:read”, “account:manage”, “keys:manage” yes Scopes granted.
data[].status enum: “active”, “rotating”, “revoked”, “expired” yes Lifecycle status.
data[].rate_limit_per_minute integer yes Requests per minute allowed.
data[].daily_spend_cap_usd number or null yes Daily spend cap, or null for none. US dollars, up to 6 decimals.
data[].ip_allowlist array of string yes CIDR blocks the key may be used from; empty means anywhere.
data[].expires_at string or null (date-time) yes Expiry, or null for none.
data[].last_used_at string or null (date-time) yes Last successful use, or null.
data[].created_at string (date-time) yes When the key was created.
next_cursor string or null yes Pass as cursor to fetch the next page. null when this is the last page.
has_more boolean yes Whether another page follows.

Errors are RFC 9457 problem details and are never billed. Branch on type. See Errors.

Status Meaning
400 Invalid request: malformed JSON, an unknown field, a failed constraint or a size limit (invalid_request).
401 Missing, malformed, revoked or expired API key, or a bad webhook signature (unauthorized).
403 The key lacks the scope this operation needs (forbidden_scope).
429 Rate limited (rate_limited). Wait Retry-After seconds.
500 Unexpected server error (internal). Not billed; retry with the same Idempotency-Key.

Open the interactive reference to send this request from the browser. The full document is at /openapi.json.