Skip to content

Mint an API key

POST
/v1/tokens
curl --request POST \
--url https://example.com/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "role": "admin", "capabilities": [ "example" ], "label": "example", "expiresAt": "2026-04-15T12:00:00Z", "projectId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'

An API key is a service account in the tenant, with a role and explicit capabilities. Returns the plaintext token exactly once. Tenant admins only; a caller can only grant capabilities it holds. Only mounted when the deployment supplies a TokenAdmin.

Idempotency-Key
string
>= 1 characters

Caller-supplied idempotency key. Retries with the same key return the original response byte-identical (per docs/API-ROUTE-CONVENTIONS.md §3.1).

Media typeapplication/json
object
role

The key’s role in its tenant: admin administers the tenant (and manages keys); member belongs to it and administers nothing. Default member.

string
Allowed values: admin member
capabilities

Framework capabilities the key carries (env:write, secrets:write, …). A caller can only grant capabilities it holds. Default none.

Array<string>
label

Optional human-readable label.

string
expiresAt

ISO 8601 timestamp.

string format: date-time
projectId
string format: uuid

Token minted.

Media typeapplication/json

The new key, plus its secret.

object
tokenId
required
string format: uuid
role
required

The key’s role in its tenant: admin administers the tenant (and manages keys); member belongs to it and administers nothing.

string
Allowed values: admin member
capabilities
required

Framework capabilities the key carries (env:write, secrets:write, …). A caller can only grant capabilities it holds.

Array<string>
label
string
projectId
string format: uuid
createdBy

Who minted it: user:<id> or service_account:<tokenId>.

string
createdAt
required
string format: date-time
expiresAt
string format: date-time
revokedAt

Set once revoked; a revoked key never authenticates again.

string format: date-time
lastUsedAt

When the key last authenticated a request (updated at most once a minute).

string format: date-time
token
required

Plaintext bearer token. Returned exactly once at mint time.

string
Example
{
"role": "admin"
}

Malformed request body.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Missing / malformed / expired / revoked bearer token.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Not a tenant admin, or a capability the caller does not hold.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Idempotency-Key was reused with a different body, or resource-state conflict.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Server error (unmapped domain code or framework crash).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}