API keys
Long-lived credentials for server-to-server integrations. The secret is shown once, at creation.
The API key object
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier, prefixed with ak_. |
name required | string | Label for the key. |
prefix | string | First characters of the secret, for identification. |
scopes | string[] | Granted scopes. |
last_used_at | timestamp|null | Last successful request. |
created_at | timestamp | Creation time, RFC 3339 in UTC. |
Example
{
"id": "ak_8f3k2Q9xLm",
"name": "CI exporter",
"prefix": "axs_live_7Hq2",
"scopes": [
"notes:read",
"files:read"
],
"last_used_at": "2026-10-13T21:12:40Z",
"created_at": "2026-09-14T08:21:07Z"
}GET /api-keys
List api keys. Returns a paginated list of api keys.
Query parameters
| Field | Type | Description |
|---|---|---|
limit | integer | Page size, 1–100. Default 25. |
cursor | string | Cursor from the previous page. |
sort | string | Field to sort by, prefix - for descending. |
filter | string | Filter expression, see Filtering and sorting. |
Request
curl -X GET "https://api.axnode.net/v2/api-keys" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/api-keys', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.get(
'https://api.axnode.net/v2/api-keys',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"data": [
{
"id": "ak_8f3k2Q9xLm",
"name": "CI exporter",
"prefix": "axs_live_7Hq2",
"scopes": [
"notes:read",
"files:read"
],
"last_used_at": "2026-10-13T21:12:40Z",
"created_at": "2026-09-14T08:21:07Z"
}
],
"has_more": false,
"next_cursor": null
}POST /api-keys
Create a API key. Creates a API key.
Body parameters
| Field | Type | Description |
|---|---|---|
name required | string | Label for the key. |
prefix | string | First characters of the secret, for identification. |
scopes | string[] | Granted scopes. |
last_used_at | timestamp|null | Last successful request. |
Request
curl -X POST "https://api.axnode.net/v2/api-keys" \
-H "Authorization: Bearer $AXSYNC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "CI exporter"}'const res = await fetch('https://api.axnode.net/v2/api-keys', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"name": "CI exporter"})
});
const data = await res.json();import requests
res = requests.post(
'https://api.axnode.net/v2/api-keys',
headers={'Authorization': f'Bearer {token}'}, json={"name": "CI exporter"},
)
data = res.json()Response 201
{
"id": "ak_8f3k2Q9xLm",
"name": "CI exporter",
"prefix": "axs_live_7Hq2",
"scopes": [
"notes:read",
"files:read"
],
"last_used_at": "2026-10-13T21:12:40Z",
"created_at": "2026-09-14T08:21:07Z"
}GET /api-keys/{id}
Retrieve a API key. Retrieves a API key by its identifier.
Request
curl -X GET "https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.get(
'https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"id": "ak_8f3k2Q9xLm",
"name": "CI exporter",
"prefix": "axs_live_7Hq2",
"scopes": [
"notes:read",
"files:read"
],
"last_used_at": "2026-10-13T21:12:40Z",
"created_at": "2026-09-14T08:21:07Z"
}DELETE /api-keys/{id}
Delete a API key. Permanently deletes a API key. This cannot be undone.
Request
curl -X DELETE "https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm', {
method: 'DELETE',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.delete(
'https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"deleted": true,
"id": "ak_8f3k2Q9xLm"
}POST /api-keys/{id}/rotate
Rotate an API key. Issues a new secret; the old one stays valid for 24 hours.
Body parameters
| Field | Type | Description |
|---|---|---|
name required | string | Label for the key. |
prefix | string | First characters of the secret, for identification. |
scopes | string[] | Granted scopes. |
last_used_at | timestamp|null | Last successful request. |
Request
curl -X POST "https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm/rotate" \
-H "Authorization: Bearer $AXSYNC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "CI exporter"}'const res = await fetch('https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm/rotate', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"name": "CI exporter"})
});
const data = await res.json();import requests
res = requests.post(
'https://api.axnode.net/v2/api-keys/ak_8f3k2Q9xLm/rotate',
headers={'Authorization': f'Bearer {token}'}, json={"name": "CI exporter"},
)
data = res.json()Response 200
{
"id": "ak_8f3k2Q9xLm",
"name": "CI exporter",
"prefix": "axs_live_7Hq2",
"scopes": [
"notes:read",
"files:read"
],
"last_used_at": "2026-10-13T21:12:40Z",
"created_at": "2026-09-14T08:21:07Z"
}