sub, username, organization, role). A token issued through the API
cannot escalate privileges; it carries exactly the claims of the token that
created it.
Prometheux uses an allowlist model: a token is only accepted while its
record exists server-side. Revoking a token deletes that record, and the token
stops working immediately.
How external integrators get a token
There is no public sign-up endpoint. An external integration is bootstrapped once, then manages its own keys:Get a bootstrap token from an administrator
A Prometheux administrator provisions your workspace and gives you a
one-time bootstrap token. This is the credential you use for your very
first API call — typically only to mint a long-lived key.
Mint a long-lived API key
Call
POST /auth/issue-token with the bootstrap token in
the Authorization header. The response contains a new token — store it
securely. This is the key your integration uses day to day.Rotate and revoke as needed
List your keys with
GET /auth/tokens and revoke compromised
or retired keys with POST /auth/revoke/{jti}.Issue a token
Mint a new API key for the authenticated caller. The new token inherits the caller’s identity claims.Request body
All fields are optional.| Field | Type | Default | Description |
|---|---|---|---|
name | string | null | null | Human-readable label so you can tell keys apart when listing them. Max 120 characters. |
expires_in_minutes | integer | null | null | Token lifetime in minutes (max 525600 = 1 year). Omit, or pass null/0, to issue a token with no expiration. |
Response
| Field | Type | Description |
|---|---|---|
token | string | The raw JWT. Shown only once. |
jti | string (UUID) | The token’s unique ID — used to list and revoke it later. |
name | string | null | The label you provided. |
expires_at | ISO-8601 (UTC) | null | When the token expires, or null if it never expires. |
expires_in_minutes | integer | null | The effective lifetime, or null if it never expires. |
Example
List tokens
List metadata for every active API key belonging to the caller, oldest first. The raw JWTs are never returned — only their metadata.Response
data.tokens is an array of:
| Field | Type | Description |
|---|---|---|
jti | string (UUID) | The token’s unique ID. |
name | string | null | The label set when the token was issued. |
issued_at | ISO-8601 (UTC) | null | When the token was issued. |
expires_at | ISO-8601 (UTC) | null | When the token expires, or null if it never expires. |
Example
Revoke the current token
Revoke the token used to make the request (i.e. “log out” this key).Response
Revoke a specific token
Revoke a token by itsjti — use this to retire or rotate keys from a
management UI.
| Parameter | In | Required | Description |
|---|---|---|---|
jti | path | yes | The ID of the token to revoke. |
200 with status: "not_found" in data.
Example
Revoke all tokens
Revoke every API key belonging to the caller (“log out everywhere”).The out-of-band bootstrap token is managed by an administrator, not stored as a
user API key. It is not returned by
GET /auth/tokens and cannot be revoked
through these endpoints — attempting to revoke it returns 409 conflict.
