REST API

API tokens

Self-manage the current workspace's personal access tokens over the API — the twin of the Developers settings page. Tokens are scoped to the acting token's workspace, so you only ever see and manage tokens minted for that workspace.

All endpoints require Authorization: Bearer {token}. See Authentication for how a token is bound to its workspace and how the optional site allowlist works.

List tokens

GET /api/tokens

List the workspace's active (non-revoked) tokens, newest first.

Response — flat JSON array of:

Field Type Description
id string Token id (used to revoke it).
name string The name given at creation.
site_ids string[] | null Allowed site UUIDs. null means all sites in the workspace.
last_used_at string (ISO 8601) | null When the token last authenticated a request.
created_at string (ISO 8601) | null When the token was created.

Status: 200 OK.

curl https://clickbase.so/api/tokens \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"
await fetch('https://clickbase.so/api/tokens', {
  headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
})
requests.get('https://clickbase.so/api/tokens', headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'})

Create a token

POST /api/tokens

Mint a personal access token bound to the current workspace.

Body parameters

Parameter Type Required Description
name string Yes Label for the token. Max 255 chars.
site_ids string[] | null No Site allowlist: an array of site UUIDs in this workspace. Omit, pass null, or pass ["*"] for all sites. Foreign UUIDs return 422.

Response — the created token. Only this response includes the one-time plaintext token field, which is never persisted and can never be shown again. Status: 201 Created.

Field Type Description
id string Token id.
name string Token name.
site_ids string[] | null Allowed site UUIDs. null means all sites.
last_used_at string (ISO 8601) | null Always null on a fresh token.
created_at string (ISO 8601) | null When the token was created.
token string The one-time plaintext bearer token. Copy it now.
curl -X POST https://clickbase.so/api/tokens \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name": "Reporting script"}'
await fetch('https://clickbase.so/api/tokens', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', Accept: 'application/json' },
  body: JSON.stringify({ name: 'Reporting script' }),
})
requests.post(
    'https://clickbase.so/api/tokens',
    headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'},
    json={'name': 'Reporting script'},
)
{
    "id": "42",
    "name": "Reporting script",
    "site_ids": null,
    "last_used_at": null,
    "created_at": "2026-07-11T12:00:00.000000Z",
    "token": "eyJ0eXAiOiJKV1QiLCJ..."
}

Revoke a token

DELETE /api/tokens/{token}

Revoke a token. Resolved through the workspace, so a foreign/unknown id returns 404.

Path parameters

Parameter Type Required Description
token string Yes The token id (from the list or create response).

Status: 204 No Content.

curl -X DELETE https://clickbase.so/api/tokens/42 \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"
await fetch('https://clickbase.so/api/tokens/42', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
})
requests.delete('https://clickbase.so/api/tokens/42', headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'})