API key
An API key lets a machine act without a user token. A key belongs to an actor: whatever it does, it does with that actor's permissions, and every request it makes is attributable.
The secret is shown once, in the answer to its creation, and is never retrievable afterwards — only its hash is stored. Keys expire; a key without an explicit lifetime lasts 90 days, and no key may be issued for longer than a year.
Returns the tenant's API keys — their labels, actors and lifetimes, never their secrets.
Filterable — id, label, ident, actorId, creatorId, expiresAt, revokedAt, usedAt, createdAt.
Sortable — id, label, ident, expiresAt, revokedAt, usedAt, createdAt.
Searchable — nothing yet.
usedAt is when the key was last accepted and revokedAt when it was withdrawn — keys that are still usable are {"field":"revokedAt","op":"isNull"}.
Token issued by the central equipme authentication, sent as Bearer <token>.
JSON filter expression
Free-text term — no effect here
Comma-separated field:direction terms
Selection of fields and relations
label,expiresAt,usedAtNumber of entries to skip
0Page size, 1 to 100
100OK
Bad Request
Unauthorized
Forbidden
Internal Server Error
GET /api/v1/keys HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"count": 1,
"data": [
{
"actor": {
"contacts": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"id": 1,
"realm": "text",
"sub": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"tenantRole": "",
"username": "text"
},
"actorId": 1,
"createdAt": "text",
"creator": {
"contacts": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"id": 1,
"realm": "text",
"sub": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"tenantRole": "",
"username": "text"
},
"creatorId": 1,
"expiresAt": "text",
"id": 1,
"ident": "text",
"label": "text",
"revokedAt": "text",
"scopes": [
""
],
"usedAt": "text"
}
]
}Issues an API key for an actor. label says what it is for, actorId whose permissions it carries, and ttl how long it lives — the default is 90 days and anything beyond a year is answered with 400.
The answer contains secret, and this is the only time it is shown. Store it before closing the response; a lost secret cannot be recovered, only replaced by a new key.
Token issued by the central equipme authentication, sent as Bearer <token>.
Created
Bad Request
Unauthorized
Forbidden
Not Found
Internal Server Error
POST /api/v1/keys HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 2
{}{
"data": {
"actor": {
"contacts": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"id": 1,
"realm": "text",
"sub": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"tenantRole": "",
"username": "text"
},
"actorId": 1,
"createdAt": "text",
"creator": {
"contacts": [
{
"assignmentContext": "text",
"autoAssign": true,
"createdAt": "2026-01-01T00:00:00.000Z",
"description": "text",
"email": "ada.lovelace@example.com",
"firstName": "Ada",
"id": 17,
"kind": "",
"lastName": "Lovelace",
"mobile": "text",
"phone": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"title": "text",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"id": 1,
"realm": "text",
"sub": "text",
"tenant": {
"id": 1,
"name": "text"
},
"tenantId": 1,
"tenantRole": "",
"username": "text"
},
"creatorId": 1,
"expiresAt": "text",
"id": 1,
"ident": "text",
"label": "text",
"revokedAt": "text",
"scopes": [
""
],
"usedAt": "text"
},
"secret": "text"
}Last updated
Was this helpful?