Grizzly Key Management Platform 0.1.0
Grizzly Key Management Platform
Assets
GET /assets/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
DELETE /assets/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
GET /assets/{id}/family
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | Filter family members to those with activity from this account | |
id |
path | string | No | Asset ID | |
keyringId |
query | string | No | Filter family members to those with activity using this keyring | |
maxDepth |
query | integer | No | Maximum depth to traverse (default: 5, max: 10) |
Responses
{
"asset": {
"id": "string",
"createdAt": "string",
"data": {},
"parents": [
{
"assetId": "string",
"createdAt": "string"
}
],
"activities": [
{}
]
},
"ancestors": [
{
"id": "string",
"createdAt": "string",
"data": {},
"parentCount": 0,
"activityCount": 0,
"hierarchyLevel": 0,
"parents": [
{
"assetId": "string",
"createdAt": "string"
}
]
}
],
"descendants": [
{
"id": "string",
"createdAt": "string",
"data": {},
"parentCount": 0,
"activityCount": 0,
"hierarchyLevel": 0,
"parents": [
{
"assetId": "string",
"createdAt": "string"
}
]
}
],
"summary": {
"totalAncestors": 0,
"totalDescendants": 0,
"totalFamily": 0,
"maxAncestorDepth": 0,
"maxDescendantDepth": 0,
"hasCycles": true
}
}
Schema of the response body
{
"type": "object",
"properties": {
"asset": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Asset ID"
},
"createdAt": {
"type": "string",
"description": "Created timestamp"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Asset data"
},
"parents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetId": {
"type": "string"
},
"createdAt": {
"type": "string"
}
}
}
},
"activities": {
"type": "array",
"items": {
"type": "object",
"properties": {}
}
}
}
},
"ancestors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Asset ID"
},
"createdAt": {
"type": "string",
"description": "Created timestamp"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Asset data"
},
"parentCount": {
"type": "integer",
"description": "Number of parent assets"
},
"activityCount": {
"type": "integer",
"description": "Number of activities"
},
"hierarchyLevel": {
"type": "integer",
"description": "Depth level: -1=parent, -2=grandparent, etc."
},
"parents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetId": {
"type": "string",
"description": "Parent asset ID"
},
"createdAt": {
"type": "string",
"description": "When relationship was created"
}
}
},
"description": "Parent relationships for graph edges"
}
}
}
},
"descendants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Asset ID"
},
"createdAt": {
"type": "string",
"description": "Created timestamp"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Asset data"
},
"parentCount": {
"type": "integer",
"description": "Number of parent assets"
},
"activityCount": {
"type": "integer",
"description": "Number of activities"
},
"hierarchyLevel": {
"type": "integer",
"description": "Depth level: 1=child, 2=grandchild, etc."
},
"parents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetId": {
"type": "string",
"description": "Parent asset ID"
},
"createdAt": {
"type": "string",
"description": "When relationship was created"
}
}
},
"description": "Parent relationships for graph edges"
}
}
}
},
"summary": {
"type": "object",
"properties": {
"totalAncestors": {
"type": "integer",
"description": "Total number of ancestors"
},
"totalDescendants": {
"type": "integer",
"description": "Total number of descendants"
},
"totalFamily": {
"type": "integer",
"description": "Total family size (including main asset)"
},
"maxAncestorDepth": {
"type": "integer",
"description": "Maximum depth of ancestor tree"
},
"maxDescendantDepth": {
"type": "integer",
"description": "Maximum depth of descendant tree"
},
"hasCycles": {
"type": "boolean",
"description": "True if circular references were detected"
}
},
"description": "Family tree metadata"
}
}
}
POST /assets/search
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Pagination cursor | |
limit |
query | integer | No | Items per page |
Request body
{
"apikeyId": "string",
"accountId": "string",
"keyringId": "string",
"parents": [
"string"
],
"start": 0,
"end": 0,
"data": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"apikeyId": {
"type": "string",
"description": "The API Key ID"
},
"accountId": {
"type": "string",
"description": "The Account ID ID"
},
"keyringId": {
"type": "string",
"description": "The KeyRing ID"
},
"parents": {
"type": "array",
"items": {
"type": "string"
},
"description": "Assigned parent Assets"
},
"start": {
"type": "integer",
"description": "The start time"
},
"end": {
"type": "integer",
"description": "The end time"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
Responses
{
"data": [
{
"id": "string",
"createdAt": "string",
"data": {}
}
],
"pagination": {
"limit": 10.12,
"count": 10.12,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Asset ID"
},
"createdAt": {
"type": "string",
"description": "Created Timestamp"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Data stored on the Asset"
}
}
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"count": {
"type": "number"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
],
"additionalProperties": true
}
}
}
POST /dashboard/assets/search
Search assets
Description
Search for assets with filters and pagination
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Pagination cursor | |
limit |
query | integer | No | Items per page |
Request body
{
"apikeyId": "string",
"accountId": "string",
"keyringId": "string",
"parents": [
"string"
],
"start": 0,
"end": 0,
"data": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"apikeyId": {
"type": "string",
"description": "The API Key ID"
},
"accountId": {
"type": "string",
"description": "The Account ID ID"
},
"keyringId": {
"type": "string",
"description": "The KeyRing ID"
},
"parents": {
"type": "array",
"items": {
"type": "string"
},
"description": "Assigned parent Assets"
},
"start": {
"type": "integer",
"description": "The start time"
},
"end": {
"type": "integer",
"description": "The end time"
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
GET /dashboard/assets/{id}
Get asset
Description
Returns an asset by ID with parents and activities
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"id": "string",
"createdAt": "string",
"data": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"data": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
DELETE /dashboard/assets/{id}
Delete asset
Description
Deletes an asset
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
GET /dashboard/assets/{id}/family
Get asset family
Description
Returns the complete family tree of an asset including ancestors and descendants
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | Filter family members to those with activity from this account | |
id |
path | string | No | ||
keyringId |
query | string | No | Filter family members to those with activity using this keyring | |
maxDepth |
query | number | No | Maximum depth to traverse (default: 5) |
Responses
{
"asset": {},
"ancestors": [
{}
],
"descendants": [
{}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"asset": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"ancestors": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"descendants": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
KeyRings
GET /ks/hash/{hash}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
hash |
path | string | No |
Responses
{
"ringId": "string",
"keyId": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"ringId": {
"type": "string"
},
"keyId": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /ks/header/{header}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
header |
path | string | No |
Responses
{
"valid": true,
"version": 0,
"hasSignedAsset": true,
"hash": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"version": {
"type": "integer"
},
"hasSignedAsset": {
"type": "boolean"
},
"hash": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /ks/decrypt
Request body
{
"hash": "string",
"header": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"hash": {
"type": "string"
},
"header": {
"type": "string"
}
}
}
Responses
{
"ringId": "string",
"ringname": "string",
"key": {
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
},
"asset": {
"valid": true,
"id": "string",
"message": "string",
"data": {}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"ringId": {
"type": "string",
"description": "The KeyRing ID"
},
"ringname": {
"type": "string",
"description": "The KeyRing name"
},
"key": {
"$ref": "#/components/schemas/ks.key"
},
"asset": {
"$ref": "#/components/schemas/ks.signedasset"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"ringId": "string",
"ringname": "string",
"key": {
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
},
"asset": {
"valid": true,
"id": "string",
"message": "string",
"data": {}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"ringId": {
"type": "string",
"description": "The KeyRing ID"
},
"ringname": {
"type": "string",
"description": "The KeyRing name"
},
"key": {
"$ref": "#/components/schemas/ks.key"
},
"asset": {
"$ref": "#/components/schemas/ks.signedasset"
}
}
}
POST /ks/encrypt
Request body
{
"ringname": "string",
"asset": {
"parents": [
"string"
],
"assetId": "string",
"data": {}
}
}
Schema of the request body
{
"type": "object",
"properties": {
"ringname": {
"type": "string",
"description": "The Keyring name"
},
"asset": {
"type": "object",
"properties": {
"parents": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional. Assign Assets as Parents"
},
"assetId": {
"type": "string",
"description": "If provided, this is the Asset that will be updated. Pass this along for updating existing Assets."
},
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [],
"additionalProperties": true,
"description": "The Asset data"
}
},
"required": [
"ringname"
]
}
Responses
{
"key": {
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
},
"ringId": "string",
"hash": "string",
"header": "string",
"asset": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"$ref": "#/components/schemas/ks.key",
"description": "The Key to use for encryption"
},
"ringId": {
"type": "string",
"description": "The KeyRing ID"
},
"hash": {
"type": "string",
"description": "The unique hash"
},
"header": {
"type": "string",
"description": "The full header"
},
"asset": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Asset information if one was created"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /ks/rotate
Request body
{
"ringname": "string",
"algo": "aes256"
}
Schema of the request body
{
"type": "object",
"properties": {
"ringname": {
"type": "string",
"description": "The Keyring name"
},
"algo": {
"type": "string",
"enum": [
"aes256"
],
"description": "The Algorithm to use"
}
},
"required": [
"ringname"
]
}
Responses
{
"key": {
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"$ref": "#/components/schemas/ks.key"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /ks/keyrings
Request body
{
"name": "string",
"algo": "aes256",
"publicKey": "string",
"props": {},
"keyProps": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The KeyRing name"
},
"algo": {
"type": "string",
"enum": [
"aes256"
],
"description": "The Algorithm"
},
"publicKey": {
"type": "string",
"description": "The Public Key"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"keyProps": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"name"
]
}
Responses
{
"ring": {
"id": "string",
"name": "string",
"displayName": "string",
"activeKey": "string",
"activeAlgorithm": null,
"createdAt": "string",
"updatedAt": "string",
"props": {},
"publicKey": "string"
},
"key": {
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
},
"privateKey": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"$ref": "#/components/schemas/ks.keyring",
"description": "KeyRing details"
},
"key": {
"$ref": "#/components/schemas/ks.key",
"description": "The currently Active Key"
},
"privateKey": {
"type": "string",
"description": "A base64 encoded Private Key. This will only be returned if a Public Key was not provided"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /ks/keyrings
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for pagination | |
limit |
query | number | No | Maximum number of keyrings to return (default: 100, max: 10000) | |
sortBy |
query | string | No | Column to sort by: name or createdAt (default: createdAt) | |
sortOrder |
query | string | No | Sort direction: asc or desc (default: asc) |
Responses
{
"data": [
{
"id": "string",
"name": "string",
"displayName": "string",
"activeKey": "string",
"activeAlgorithm": null,
"createdAt": "string",
"updatedAt": "string",
"props": {},
"publicKey": "string"
}
],
"pagination": {
"limit": 10.12,
"count": 10.12,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ks.keyring"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"count": {
"type": "number"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
],
"additionalProperties": true
}
}
}
GET /ks/keyrings/{ringname}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | If set to 'true', the provided KeyRing name will be treated as the KeyRing ID | |
ringname |
path | string | No | The KeyRing name |
Responses
{
"ring": {
"id": "string",
"name": "string",
"displayName": "string",
"activeKey": "string",
"activeAlgorithm": null,
"createdAt": "string",
"updatedAt": "string",
"props": {},
"publicKey": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"$ref": "#/components/schemas/ks.keyring"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /ks/config
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
ringname |
query | string | No | The KeyRing name |
Responses
{
"config": {
"props": {},
"key": {
"props": {}
},
"algos": {
"aes256": {
"maxEncryptCount": 10.12
}
}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"config": {
"$ref": "#/components/schemas/ks.keyringconfig"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
PUT /ks/config
Request body
{
"ringanme": "string",
"config": {
"props": {},
"key": {
"props": {}
},
"algos": {
"aes256": {
"maxEncryptCount": 10.12
}
}
}
}
Schema of the request body
{
"type": "object",
"properties": {
"ringanme": {
"type": "string",
"description": "The KeyRing name"
},
"config": {
"$ref": "#/components/schemas/ks.keyringconfig"
}
},
"required": [
"ringname",
"config"
]
}
Responses
{
"config": {
"props": {},
"key": {
"props": {}
},
"algos": {
"aes256": {
"maxEncryptCount": 10.12
}
}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"config": {
"$ref": "#/components/schemas/ks.keyringconfig"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
DELETE /ks/keyrings/{name}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
name |
path | string | No | The KeyRing name |
Responses
{
"name": "string",
"id": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"id": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /ks/keyrings/{ringname}/keys
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for pagination | |
id |
query | string | No | If set to 'true' will treat the ringname as the KeyRing ID | |
limit |
query | number | No | Maximum number of keys to return (default: 100, max: 10000) | |
ringname |
path | string | No | The KeyRing name |
Responses
{
"data": [
{
"type": null,
"props": {},
"id": "string"
}
],
"pagination": {
"limit": 10.12,
"count": 10.12,
"hasMore": true,
"nextCursor": "string",
"totalCount": 10.12
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"enum": [
"aes256"
]
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"id": {
"type": "string"
}
}
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"count": {
"type": "number"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
},
"totalCount": {
"type": "number"
}
},
"required": [
"limit",
"count",
"hasMore"
],
"additionalProperties": true
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /ks/keyrings/{ringname}/keys/{keyId}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | If set to 'true', the provided KeyRing name will be treated as the KeyRing ID | |
keyId |
path | string | No | The Key ID | |
ringname |
path | string | No | The KeyRing name |
Responses
{
"type": "aes256",
"id": "string",
"props": {},
"keyData": {
"encrypted": {
"key": {
"value": "string",
"encoding": null
}
},
"iv": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"$ref": "#/components/schemas/ks.algorithm",
"description": "The Algorithm"
},
"id": {
"type": "string",
"description": "The Key ID"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Any unique data stored on the Key"
},
"keyData": {
"$ref": "#/components/schemas/ks.keydataencrypted",
"description": "The encrypted Key Data"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
Endpoints
GET /auth/oauth/providers
Responses
Users
POST /auth/validate
Request body
{
"apikey": "string",
"activity": {},
"requiredFlags": {},
"trustedServiceCtx": {
"user": {
"userId": "string",
"username": "string"
},
"options": {
"suppressActivity": true
}
}
}
Schema of the request body
{
"type": "object",
"properties": {
"apikey": {
"type": "string"
},
"activity": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"requiredFlags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"trustedServiceCtx": {
"$ref": "#/components/schemas/auth.validate.trustedservicectx"
}
},
"required": [
"apikey"
]
}
Responses
{
"valid": true
}
Schema of the response body
{
"type": "object",
"properties": {
"valid": {
"type": "boolean"
}
},
"additionalProperties": true
}
POST /auth/user/invite
Request body
{
"email": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"email": {
"type": "string"
}
},
"required": [
"email"
]
}
Responses
{
"loginUrl": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"loginUrl": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/user/invite-validate
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
token |
query | string | No |
Responses
{
"state": null,
"email": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"enum": [
"success"
]
},
"email": {
"type": "string"
}
}
}
{
"state": null
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"enum": [
"expired",
"invalid"
]
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /auth/user/invite-complete
Request body
{
"token": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"password": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"token": {
"type": "string"
},
"username": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"password": {
"type": "string"
}
},
"required": [
"token",
"username",
"firstName",
"lastName",
"password"
]
}
Responses
{
"user": {
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
},
"accesstoken": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/auth.user"
},
"accesstoken": {
"type": "string"
}
}
}
{
"state": null,
"results": {
"isValid": true,
"details": {
"minLength": 10.12,
"newPasswordLength": 10.12,
"minUppercase": 10.12,
"newPasswordUppercase": 10.12,
"minLowercase": 10.12,
"newPasswordLowercase": 10.12,
"minSpecialChar": 10.12,
"newPasswordSpecialChar": 10.12,
"minNumber": 10.12,
"newPasswordNumber": 10.12
}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"enum": [
"malformed-password"
]
},
"results": {
"$ref": "#/components/schemas/auth.password.validation"
}
}
}
{
"state": null
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"enum": [
"invalid",
"expired"
]
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/user/invites
Responses
{
"data": [
{
"id": "string",
"email": "string",
"createdAt": 10.12,
"expiresAt": 10.12,
"status": "string",
"attempts": 10.12
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"createdAt": {
"type": "number"
},
"expiresAt": {
"type": "number"
},
"status": {
"type": "string"
},
"attempts": {
"type": "number"
}
},
"additionalProperties": true
}
}
}
}
DELETE /auth/user/invites/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
Schema of the response body
{
"type": "object",
"properties": {}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /auth/basic/login
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
email |
query | string | No |
Request body
{
"username": "string",
"password": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
}
},
"required": [
"username",
"password"
]
}
Responses
{
"user": {
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
},
"accesstoken": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/auth.user"
},
"accesstoken": {
"type": "string",
"description": "The Access Token sent with every request as a Bearer token."
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/basic/refresh
Responses
{
"user": {
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
},
"accessToken": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/auth.user"
},
"accessToken": {
"type": "string"
}
}
}
POST /auth/basic/logout
GET /auth/whoami
Responses
{
"user": {
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/auth.user"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /auth/basic/reset-password-start
Request body
{
"email": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"email": {
"type": "string"
}
},
"required": [
"email"
]
}
Responses
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /auth/basic/reset-password-complete
Request body
{
"token": "string",
"password": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"token": {
"type": "string"
},
"password": {
"type": "string"
}
},
"required": [
"token",
"password"
]
}
Responses
Schema of the response body
{
"type": "object",
"properties": {}
}
{
"state": null,
"password": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"enum": [
"malformed-password"
]
},
"password": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/users/{username}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
email |
query | string | No | ||
username |
path | string | No | The username or email if email is set to true |
Responses
{
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The User ID"
},
"username": {
"type": "string",
"description": "The unique user name"
},
"firstName": {
"type": "string",
"description": "The User's first name"
},
"lastName": {
"type": "string",
"description": "The User's last name"
},
"displayName": {
"type": "string",
"description": "The User's display name"
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of all API Key IDs owned by the user"
},
"email": {
"type": "string",
"description": "The User's email"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Any unique props stored on the User"
}
}
}
Schema of the response body
{
"type": "object",
"properties": {}
}
PATCH /auth/users/{username}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
username |
path | string | No |
Request body
{
"email": "string",
"firstName": "string",
"lastName": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
Responses
{
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The User ID"
},
"username": {
"type": "string",
"description": "The unique user name"
},
"firstName": {
"type": "string",
"description": "The User's first name"
},
"lastName": {
"type": "string",
"description": "The User's last name"
},
"displayName": {
"type": "string",
"description": "The User's display name"
},
"keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "A list of all API Key IDs owned by the user"
},
"email": {
"type": "string",
"description": "The User's email"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Any unique props stored on the User"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
DELETE /auth/users/{username}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | 'true' = treats username as a User ID, otherwise use the User name | |
username |
path | string | No |
Responses
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/users
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for next page | |
limit |
query | integer | No | Page size (max 10000, default 100) |
Responses
{
"data": [
{
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.user"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
POST /auth/users
Request body
{
"username": "string",
"email": "string",
"displayName": "string",
"firstName": "string",
"lastName": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"displayName": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"username",
"email",
"firstName",
"lastName"
]
}
Responses
{
"user": {
"id": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"email": "string",
"props": {}
},
"password": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"$ref": "#/components/schemas/auth.user"
},
"password": {
"type": "string"
}
}
}
{
"message": "string",
"errors": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
},
"errors": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
GET /dashboard/users
List users
Description
Returns a list of all users
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
POST /dashboard/users
Create user
Description
Creates a new user
Request body
{
"username": "string",
"email": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"displayName": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"user": {
"id": "string",
"username": "string",
"email": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string"
},
"password": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"displayName": {
"type": "string"
}
},
"additionalProperties": true
},
"password": {
"type": "string"
}
},
"additionalProperties": true
}
GET /dashboard/users/{id}
Get user
Description
Returns a user by ID
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"id": "string",
"username": "string",
"email": "string",
"firstName": "string",
"lastName": "string",
"displayName": "string",
"keys": [
"string"
],
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"displayName": {
"type": "string"
},
"keys": {
"type": "array",
"items": {
"type": "string"
}
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
PATCH /dashboard/users/{id}
Update user
Description
Updates an existing user
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Request body
{
"firstName": "string",
"lastName": "string",
"email": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
DELETE /dashboard/users/{id}
Delete user
Description
Deletes a user
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
POST /dashboard/dev/change-password
Change password (dev)
Description
Development endpoint to change password
Request body
{
"userId": "string",
"newPassword": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"userId": {
"type": "string"
},
"newPassword": {
"type": "string"
}
}
}
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
POST /dashboard/user/invite
Invite user
Description
Sends an invitation email to a new user
Request body
{
"email": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"email": {
"type": "string"
}
}
}
Responses
Schema of the response body
{
"type": "object",
"properties": {}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /dashboard/user/invite-validate
Validate invite token
Description
Validates the invite token from the magic link
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
token |
query | string | No |
Responses
{
"state": "string",
"email": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
{
"state": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /dashboard/user/invite-complete
Complete invite
Description
Creates the user account after invitation
Request body
{
"token": "string",
"username": "string",
"firstName": "string",
"lastName": "string",
"password": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"token": {
"type": "string"
},
"username": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
Responses
{
"user": {},
"accesstoken": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"accesstoken": {
"type": "string"
}
}
}
{
"state": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"type": "string"
}
}
}
{
"state": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /dashboard/user/invites
List user invites
Description
Returns all pending and expired invite tokens
Responses
{
"data": [
{
"id": "string",
"email": "string",
"createdAt": 10.12,
"expiresAt": 10.12,
"status": "string",
"attempts": 10.12
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"createdAt": {
"type": "number"
},
"expiresAt": {
"type": "number"
},
"status": {
"type": "string"
},
"attempts": {
"type": "number"
}
},
"additionalProperties": true
}
}
}
}
DELETE /dashboard/user/invites/{id}
Revoke user invite
Description
Revokes a pending or expired invite by its id
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
Schema of the response body
{
"type": "object",
"properties": {}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /dashboard/basic/reset-password-start
Start password reset
Description
Initiates the password reset flow
Request body
{
"email": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"email": {
"type": "string"
}
}
}
Responses
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /dashboard/basic/reset-password-complete
Complete password reset
Description
Finalises password reset using the token from email
Request body
{
"token": "string",
"password": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"token": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
Responses
Schema of the response body
{
"type": "object",
"properties": {}
}
{
"state": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"state": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
Service
POST /auth/service/handshake
Request body
{
"serviceName": "string",
"sKey": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"serviceName": {
"type": "string"
},
"sKey": {
"type": "string"
}
},
"required": [
"serviceName",
"sKey"
]
}
Responses
{
"apiKey": "string",
"keyid": "string",
"expiresAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"apiKey": {
"type": "string"
},
"keyid": {
"type": "string"
},
"expiresAt": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
Accounts
POST /auth/accounts
Request body
{
"uid": "string",
"notes": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"uid": {
"type": "string"
},
"notes": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"uid"
]
}
Responses
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string",
"description": "The Account UID"
},
"notes": {
"type": "string"
},
"status": {
"type": "string",
"description": "Account status: 'active' or 'deactivated'"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"apiKeyCount": {
"type": "integer",
"description": "Number of API keys for this account (only present when includeKeyCounts=true)",
"nullable": true
}
}
}
GET /auth/accounts
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for next page | |
includeDeactivated |
query | boolean | No | When true, deactivated accounts are included | |
limit |
query | integer | No | Page size (max 10000, default 100) |
Responses
{
"data": [
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.account"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
GET /auth/accounts/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No | ||
includeDeactivated |
query | boolean | No | When true, a deactivated account is returned instead of 404 | |
uid |
query | string | No | If set to 'true', treat the id as a uid |
Responses
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string",
"description": "The Account UID"
},
"notes": {
"type": "string"
},
"status": {
"type": "string",
"description": "Account status: 'active' or 'deactivated'"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"apiKeyCount": {
"type": "integer",
"description": "Number of API keys for this account (only present when includeKeyCounts=true)",
"nullable": true
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
PATCH /auth/accounts/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Request body
{
"uid": "string",
"notes": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"uid": {
"type": "string"
},
"notes": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
Responses
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string",
"description": "The Account UID"
},
"notes": {
"type": "string"
},
"status": {
"type": "string",
"description": "Account status: 'active' or 'deactivated'"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"apiKeyCount": {
"type": "integer",
"description": "Number of API keys for this account (only present when includeKeyCounts=true)",
"nullable": true
}
}
}
DELETE /auth/accounts/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No | ||
uid |
query | string | No | If set to "true", treat id as the uid |
Responses
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string",
"description": "The Account UID"
},
"notes": {
"type": "string"
},
"status": {
"type": "string",
"description": "Account status: 'active' or 'deactivated'"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"apiKeyCount": {
"type": "integer",
"description": "Number of API keys for this account (only present when includeKeyCounts=true)",
"nullable": true
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/accounts/{accountId}/apikeys
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
path | string | No | ||
cursor |
query | string | No | Cursor for next page | |
limit |
query | integer | No | Page size (max 10000, default 100) | |
uid |
query | string | No | If set to "true", treat id as the uid |
Responses
{
"data": [
{
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.safeapikey"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
GET /dashboard/accounts
List accounts
Description
Returns a list of all accounts
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Pagination cursor | |
includeDeactivated |
query | boolean | No | When true, deactivated accounts are included | |
limit |
query | integer | No | Page size |
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
POST /dashboard/accounts
Create account
Description
Creates a new account
Request body
{
"uid": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"uid": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"id": "string",
"uid": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string"
}
}
}
GET /dashboard/accounts/{id}
Get account
Description
Returns an account by ID
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"id": "string",
"uid": "string",
"createdAt": "string",
"updatedAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uid": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"additionalProperties": true
}
PATCH /dashboard/accounts/{id}
Update account
Description
Updates an existing account
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Request body
{
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
DELETE /dashboard/accounts/{id}
Delete account
Description
Deletes an account
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
POST /dashboard/search/accounts
Search accounts
Description
Search accounts by uid/notes text, keyring access, and more
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Pagination cursor | |
limit |
query | integer | No | Page size |
Request body
{
"uid": "string",
"notes": "string",
"keyringName": "string",
"keyringId": "string",
"includeKeyCounts": true,
"includeDeactivated": true,
"sortBy": "string",
"sortOrder": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"uid": {
"type": "string",
"description": "Substring match against uid (case-insensitive)"
},
"notes": {
"type": "string",
"description": "Substring match against notes (case-insensitive)"
},
"keyringName": {
"type": "string",
"description": "Filter by keyring name"
},
"keyringId": {
"type": "string",
"description": "Filter by keyring ID"
},
"includeKeyCounts": {
"type": "boolean",
"description": "Include apiKeyCount in results"
},
"includeDeactivated": {
"type": "boolean",
"description": "When true, deactivated accounts are included"
},
"sortBy": {
"type": "string",
"description": "Column to sort by: uid, createdAt, or updatedAt (default: createdAt)"
},
"sortOrder": {
"type": "string",
"description": "Sort direction: asc or desc (default: asc)"
}
}
}
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
GET /dashboard/accounts/{id}/apikeys
Get account API keys
Description
Returns all API keys for an account
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
API Keys
GET /auth/apikey
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for next page | |
limit |
query | integer | No | Page size (max 10000, default 100) |
Responses
{
"data": [
{
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.safeapikey"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
POST /auth/apikey
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
uid |
query | string | No | If set to 'true', will treat the accountId field as the Account UID |
Request body
{
"accountId": "string",
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string",
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"accountId": {
"type": "string"
},
"flags": {
"type": "object",
"properties": {},
"description": "The permissions for this API Key"
},
"maxUses": {
"type": "integer",
"description": "The max number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"description": "A strinf array of activity that count toward maxUses. Any other activities not listed here will not count toward the maxCount."
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"description": "ISO-8601 timestamp of the time when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"description": "ISO-8601 timestamp that describes when the API Key will expire"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"accountId",
"flags"
]
}
Responses
{
"key": "string",
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"keyid": {
"type": "string"
},
"active": {
"type": "boolean"
},
"accountId": {
"type": "string"
},
"references": {
"$ref": "#/components/schemas/auth.apikeyref"
},
"flags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"maxUses": {
"type": "integer",
"nullable": true
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"autoDisableOnLimit": {
"type": "boolean"
},
"currentUses": {
"type": "integer"
},
"validFrom": {
"type": "string",
"nullable": true
},
"validUntil": {
"type": "string",
"nullable": true
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
PUT /auth/apikey
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | If true, treat the apikey body property as an apikeyid |
Request body
{
"op": "delete",
"apikey": "string",
"active": true,
"accountId": "string",
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string",
"flags": {},
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"op": {
"type": "string",
"enum": [
"delete",
"merge",
"replace"
]
},
"apikey": {
"type": "string",
"description": "The API Key value (or apikeyid if querystring id=true)"
},
"active": {
"type": "boolean"
},
"accountId": {
"type": "string"
},
"maxUses": {
"type": "integer",
"description": "The max number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"description": "A string array of activity that count toward maxUses. Any other activities not listed here will not count toward the maxCount."
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"description": "ISO-8601 timestamp of the time when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"description": "ISO-8601 timestamp that describes when the API Key will expire"
},
"flags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"op",
"apikey"
]
}
Responses
{
"key": "string",
"keyid": "string",
"op": null,
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string",
"flags": {},
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "If the key is provided, it will be returned"
},
"keyid": {
"type": "string"
},
"op": {
"enum": [
"delete",
"merge",
"replace"
],
"description": "The operationt o perform"
},
"active": {
"type": "boolean"
},
"accountId": {
"type": "string",
"description": "The Account associated with this API Key"
},
"references": {
"type": "object",
"properties": {
"accountId": {
"type": "string"
}
}
},
"maxUses": {
"type": "integer",
"nullable": true,
"description": "The max number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"description": "A string array of activity that count toward maxUses"
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp of the time when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp that describes when the API Key will expire"
},
"flags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /auth/apikey/{apikeyid}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
apikeyid |
path | string | No | The API Key ID |
Responses
{
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"keyid": {
"type": "string"
},
"active": {
"type": "boolean"
},
"accountId": {
"type": "string"
},
"references": {
"$ref": "#/components/schemas/auth.apikeyref"
},
"flags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"maxUses": {
"type": "integer",
"nullable": true
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"autoDisableOnLimit": {
"type": "boolean"
},
"currentUses": {
"type": "integer"
},
"validFrom": {
"type": "string",
"nullable": true
},
"validUntil": {
"type": "string",
"nullable": true
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
DELETE /auth/apikey/{apikey}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
apikey |
path | string | No | The API Key | |
id |
query | string | No | 'true' = treats apikey as an API Key ID, otherwise use the API Key |
Responses
{
"apikey": "string",
"id": true
}
Schema of the response body
{
"type": "object",
"properties": {
"apikey": {
"type": "string",
"description": "The deleted API Key"
},
"id": {
"type": "boolean",
"description": "If true, the apikey is the API Key ID"
}
},
"required": [
"apikey",
"id"
]
}
GET /auth/apikey/{apikeyid}/props
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
apikeyid |
path | string | No | The API Key ID |
Responses
{
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"keyid": {
"type": "string"
},
"active": {
"type": "boolean"
},
"accountId": {
"type": "string"
},
"references": {
"$ref": "#/components/schemas/auth.apikeyref"
},
"flags": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"maxUses": {
"type": "integer",
"nullable": true
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"autoDisableOnLimit": {
"type": "boolean"
},
"currentUses": {
"type": "integer"
},
"validFrom": {
"type": "string",
"nullable": true
},
"validUntil": {
"type": "string",
"nullable": true
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
GET /dashboard/apikey
List API keys
Description
Returns a list of all API keys
Responses
{
"apikeys": [
{}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"apikeys": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
POST /dashboard/apikey
Create API key
Description
Creates a new API key
Request body
{
"name": "string",
"accountId": "string",
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"accountId": {
"type": "string"
},
"flags": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"maxUses": {
"type": "integer",
"nullable": true,
"description": "The max number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"description": "A string array of activity that count toward maxUses"
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp of the time when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp that describes when the API Key will expire"
}
}
}
Responses
{
"key": "string",
"keyid": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"keyid": {
"type": "string"
}
}
}
PUT /dashboard/apikey
Update API key
Description
Updates an existing API key. Use querystring id=true to update by apikeyid instead of key value
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | If true, treat the apikey body property as an apikeyid |
Request body
{
"op": "delete",
"apikey": "string",
"flags": {},
"active": true,
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"op": {
"type": "string",
"enum": [
"delete",
"merge",
"replace"
],
"description": "The operation to perform"
},
"apikey": {
"type": "string",
"description": "The API Key value (or apikeyid if querystring id=true)"
},
"flags": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"active": {
"type": "boolean"
},
"maxUses": {
"type": "integer",
"description": "The max number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"description": "A string array of activity that count toward maxUses"
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"description": "ISO-8601 timestamp of the time when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"description": "ISO-8601 timestamp that describes when the API Key will expire"
}
}
}
Responses
{
"keyid": "string",
"op": null,
"active": true,
"maxUses": 0,
"currentUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string",
"flags": {},
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"keyid": {
"type": "string"
},
"op": {
"enum": [
"delete",
"merge",
"replace"
],
"description": "The operation performed"
},
"active": {
"type": "boolean"
},
"maxUses": {
"type": "integer",
"nullable": true,
"description": "The max number of uses"
},
"currentUses": {
"type": "integer",
"description": "The current number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"description": "Activities that count toward maxUses"
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp when the API Key will expire"
},
"flags": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
GET /dashboard/apikey/{id}
Get API key
Description
Returns an API key by ID
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"keyid": "string",
"active": true,
"maxUses": 0,
"currentUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"validFrom": "string",
"validUntil": "string",
"accountId": "string",
"references": {},
"flags": {},
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"keyid": {
"type": "string"
},
"active": {
"type": "boolean"
},
"maxUses": {
"type": "integer",
"nullable": true,
"description": "The max number of uses"
},
"currentUses": {
"type": "integer",
"description": "The current number of uses"
},
"countedActions": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"description": "Activities that count toward maxUses"
},
"autoDisableOnLimit": {
"type": "boolean",
"description": "If set, will disable the API Key when the limits are hit"
},
"validFrom": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp when the API Key becomes valid"
},
"validUntil": {
"type": "string",
"nullable": true,
"description": "ISO-8601 timestamp when the API Key will expire"
},
"accountId": {
"type": "string"
},
"references": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"flags": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
DELETE /dashboard/apikey/{id}
Delete API key
Description
Deletes an API key
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
POST /dashboard/search/keyring/{keyringname}/apikey
Search keyring API keys
Description
Finds API keys with access to a keyring
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for pagination | |
id |
query | string | No | If set to 'true', will treat the keyringname as a KeyRing ID | |
keyringname |
path | string | No | ||
limit |
query | integer | No | Maximum number of API keys to return (default: 100, max: 10000) |
Request body
{
"accountId": "string",
"active": true
}
Schema of the request body
{
"type": "object",
"properties": {
"accountId": {
"type": "string",
"description": "Filter by Account ID"
},
"active": {
"type": "boolean",
"description": "Filter by active status (true/false)"
}
}
}
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Search
POST /auth/search/keyring/{keyringname}/apikey
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for pagination | |
id |
query | string | No | If set to 'true', will treat the keyringname as a KeyRing ID | |
keyringname |
path | string | No | The KeyRing name | |
limit |
query | integer | No | Maximum number of API keys to return (default: 100, max: 10000) |
Request body
{
"accountId": "string",
"active": true
}
Schema of the request body
{
"type": "object",
"properties": {
"accountId": {
"type": "string",
"description": "Filter by Account ID"
},
"active": {
"type": "boolean",
"description": "Filter by active status (true/false)"
}
}
}
Responses
{
"data": [
{
"keyid": "string",
"active": true,
"accountId": "string",
"references": {
"accountId": "string"
},
"flags": {},
"maxUses": 0,
"countedActions": [
"string"
],
"autoDisableOnLimit": true,
"currentUses": 0,
"validFrom": "string",
"validUntil": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string"
}
],
"pagination": {
"limit": 10.12,
"count": 10.12,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.safeapikey"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "number"
},
"count": {
"type": "number"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
],
"additionalProperties": true
}
}
}
POST /auth/search/activity
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for next page (from previous response) | |
limit |
query | integer | No | Page size (max 10000, default 100) |
Request body
{
"accountUid": "string",
"accountId": "string",
"action": "string",
"ring": "string",
"start": 0,
"end": 0,
"keyid": "string",
"valid": true,
"props": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"accountUid": {
"type": "string",
"description": "The Account UID"
},
"accountId": {
"type": "string",
"description": "The Account ID"
},
"action": {
"type": "string",
"description": "The Activity Action"
},
"ring": {
"type": "string",
"description": "The Key Ring name"
},
"start": {
"type": "integer",
"description": "Start timestamp (epoch UTC)"
},
"end": {
"type": "integer",
"description": "End timestamp (epoch UTC)"
},
"keyid": {
"type": "string"
},
"valid": {
"type": "boolean",
"description": "Whether or not the Activity was granted or denied"
},
"props": {
"type": "object",
"properties": {},
"description": "Search for activities based on any props that are set"
}
}
}
Responses
{
"data": [
{
"id": "string",
"keyid": "string",
"createdAt": 0,
"props": {}
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.activity"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
POST /auth/search/accounts
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Cursor for next page | |
limit |
query | integer | No | Page size (max 10000, default 100) |
Request body
{
"uid": "string",
"notes": "string",
"keyringName": "string",
"keyringId": "string",
"includeKeyCounts": true,
"includeDeactivated": true,
"status": "string",
"sortBy": "string",
"sortOrder": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"uid": {
"type": "string",
"description": "Substring match against uid (case-insensitive)"
},
"notes": {
"type": "string",
"description": "Substring match against notes (case-insensitive)"
},
"keyringName": {
"type": "string",
"description": "Filter to accounts with API keys that have access to this keyring (by name)"
},
"keyringId": {
"type": "string",
"description": "Filter to accounts with API keys that have access to this keyring (by ID)"
},
"includeKeyCounts": {
"type": "boolean",
"description": "Include apiKeyCount in each result"
},
"includeDeactivated": {
"type": "boolean",
"description": "When true, deactivated accounts are included in results"
},
"status": {
"type": "string",
"description": "Restrict results to accounts with this status (active|deactivated)"
},
"sortBy": {
"type": "string",
"description": "Column to sort by: uid, createdAt, or updatedAt (default: createdAt)"
},
"sortOrder": {
"type": "string",
"description": "Sort direction: asc or desc (default: asc)"
}
}
}
Responses
{
"data": [
{
"id": "string",
"uid": "string",
"notes": "string",
"status": "string",
"props": {},
"createdAt": "string",
"updatedAt": "string",
"apiKeyCount": 0
}
],
"pagination": {
"limit": 0,
"count": 0,
"hasMore": true,
"nextCursor": "string",
"totalCount": 0
}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/auth.account"
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"count": {
"type": "integer"
},
"hasMore": {
"type": "boolean"
},
"nextCursor": {
"type": "string"
},
"totalCount": {
"type": "integer"
}
},
"required": [
"limit",
"count",
"hasMore"
]
}
}
}
Activity
GET /auth/activity/{id}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No | The Activity ID |
Responses
{
"id": "string",
"keyid": "string",
"createdAt": 0,
"props": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"keyid": {
"type": "string"
},
"createdAt": {
"type": "integer",
"description": "Epoch UTC time"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
}
}
POST /dashboard/search/activity
Search activity
Description
Searches activity logs
Request body
{
"filter": {},
"pagination": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"filter": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
GET /dashboard/activity/{id}
Get activity
Description
Returns an activity by ID
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"id": "string",
"keyid": "string",
"createdAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"keyid": {
"type": "string"
},
"createdAt": {
"type": "string"
}
},
"additionalProperties": true
}
Asym Service
POST /asym/keyrings
Request body
{
"name": "string",
"algo": "aes256",
"props": {},
"keyProps": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"algo": {
"type": "string",
"enum": [
"aes256"
]
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
},
"keyProps": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"required": [
"name"
]
}
Responses
{
"ring": {
"id": "string",
"name": "string",
"displayName": "string",
"activeKey": "string",
"activeAlgorithm": null,
"publicKey": "string",
"createdAt": "string",
"updatedAt": "string"
},
"key": {
"type": null,
"id": "string",
"props": {},
"keyData": {
"key": "string"
}
},
"privateKey": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"$ref": "#/components/schemas/asym.keyring"
},
"key": {
"$ref": "#/components/schemas/asym.key"
},
"privateKey": {
"type": "string",
"description": "Base64 encoded Private Key that has been generated"
}
}
}
GET /asym/keyrings/{ringname}/keys/{keyId}
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
query | string | No | If set to 'true', the ringname will be treated as the KeyRing ID | |
keyId |
path | string | No | The Key ID | |
ringname |
path | string | No | The KeyRIng name |
Responses
{
"type": null,
"id": "string",
"props": {},
"keyData": {
"key": "string"
}
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"enum": [
"AES256"
],
"description": "The Algorithm this Key is used for"
},
"id": {
"type": "string",
"description": "The Key ID"
},
"props": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true,
"description": "Any custom properties on this Key"
},
"keyData": {
"$ref": "#/components/schemas/asym.keydata",
"description": "The Actual Key Data"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
POST /asym/rotate
Request body
{
"ringname": "string",
"algo": "aes256"
}
Schema of the request body
{
"type": "object",
"properties": {
"ringname": {
"type": "string",
"description": "The KeyRing name"
},
"algo": {
"type": "string",
"enum": [
"aes256"
]
}
},
"required": [
"ringname"
]
}
Responses
{
"key": {
"type": null,
"id": "string",
"props": {},
"keyData": {
"key": "string"
}
}
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"$ref": "#/components/schemas/asym.key"
}
}
}
{
"message": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"message": {
"type": "string"
}
}
}
Health
GET /dashboard/healthz
Health check
Description
Returns the health status of the dashboard-api
Responses
{
"status": "string",
"service": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"status": {
"type": "string"
},
"service": {
"type": "string"
}
}
}
Keyrings
GET /dashboard/keyrings
List keyrings
Description
Returns a list of all keyrings
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | Pagination cursor | |
limit |
query | integer | No | Page size | |
sortBy |
query | string | No | Column to sort by: name or createdAt (default: createdAt) | |
sortOrder |
query | string | No | Sort direction: asc or desc (default: asc) |
Responses
{
"keyrings": [
{}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"keyrings": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
POST /dashboard/keyrings
Create keyring
Description
Creates a new keyring
Request body
{
"name": "string",
"publicKey": "string",
"props": {},
"keyProps": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"publicKey": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"keyProps": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"ring": {},
"key": {},
"privateKey": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"key": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"privateKey": {
"type": "string"
}
},
"additionalProperties": true
}
GET /dashboard/keyrings/{id}
Get keyring
Description
Returns a keyring by ID
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"ring": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
DELETE /dashboard/keyrings/{id}
Delete keyring
Description
Deletes a keyring
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
id |
path | string | No |
Responses
{
"success": true
}
Schema of the response body
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
}
}
}
GET /dashboard/keyrings/{id}/keys
Get keyring keys
Description
Returns all keys in a keyring
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
cursor |
query | string | No | ||
id |
query | string | No | If set to 'true' will treat the id as the KeyRing ID | |
id |
path | string | No | ||
limit |
query | number | No |
Responses
{
"data": [
{}
],
"pagination": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
POST /dashboard/rotate
Rotate keys
Description
Rotates keys in a keyring
Request body
{
"ringname": "string",
"algo": "string"
}
Schema of the request body
{
"type": "object",
"properties": {
"ringname": {
"type": "string"
},
"algo": {
"type": "string"
}
}
}
Responses
{
"key": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"key": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
POST /dashboard/asym/keyrings
Create asymmetric keyring
Description
Creates a new asymmetric keyring
Request body
{
"name": "string",
"algo": "string",
"props": {},
"keyProps": {}
}
Schema of the request body
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"algo": {
"type": "string"
},
"props": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"keyProps": {
"type": "object",
"properties": {},
"additionalProperties": true
}
}
}
Responses
{
"ring": {},
"key": {},
"privateKey": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"ring": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"key": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"privateKey": {
"type": "string"
}
},
"additionalProperties": true
}
GET /dashboard/keyrings/config
Get keyring config
Description
Returns configuration for a keyring
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
ringname |
query | string | No | The KeyRing name |
Responses
{
"config": {}
}
Schema of the response body
{
"type": "object",
"properties": {
"config": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Analytics
GET /dashboard/analytics/summary
Get analytics summary
Description
Returns aggregated KPI summary stats
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"startTime": "string",
"endTime": "string",
"totalActivities": 0,
"cryptoOperations": 0,
"successfulOperations": 0,
"failedOperations": 0,
"encryptOperations": 0,
"decryptOperations": 0,
"rotateOperations": 0,
"aksOperations": 0,
"uniqueAccounts": 0,
"uniqueKeyrings": 0,
"uniqueApiKeys": 0,
"successRate": 10.12,
"lastUpdated": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"totalActivities": {
"type": "integer"
},
"cryptoOperations": {
"type": "integer"
},
"successfulOperations": {
"type": "integer"
},
"failedOperations": {
"type": "integer"
},
"encryptOperations": {
"type": "integer"
},
"decryptOperations": {
"type": "integer"
},
"rotateOperations": {
"type": "integer"
},
"aksOperations": {
"type": "integer"
},
"uniqueAccounts": {
"type": "integer"
},
"uniqueKeyrings": {
"type": "integer"
},
"uniqueApiKeys": {
"type": "integer"
},
"successRate": {
"type": "number"
},
"lastUpdated": {
"type": "string"
}
}
}
GET /dashboard/analytics/hourly
Get hourly distribution
Description
Returns 24-hour activity distribution
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"data": [
{
"hour": "string",
"total": 0,
"successful": 0,
"failed": 0
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hour": {
"type": "string"
},
"total": {
"type": "integer"
},
"successful": {
"type": "integer"
},
"failed": {
"type": "integer"
}
}
}
}
}
}
GET /dashboard/analytics/accounts
Get top accounts
Description
Returns top accounts by activity volume
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
limit |
query | integer | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"data": [
{
"accountId": "string",
"accountName": "string",
"operations": 0,
"encryptions": 0,
"decryptions": 0,
"rotations": 0,
"successRate": 10.12,
"trend": "string"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accountId": {
"type": "string"
},
"accountName": {
"type": "string",
"nullable": true
},
"operations": {
"type": "integer"
},
"encryptions": {
"type": "integer"
},
"decryptions": {
"type": "integer"
},
"rotations": {
"type": "integer"
},
"successRate": {
"type": "number"
},
"trend": {
"type": "string"
}
}
}
}
}
}
GET /dashboard/analytics/actions
Get action distribution
Description
Returns distribution of action types
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | ||
limit |
query | integer | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"data": [
{
"action": "string",
"count": 0,
"percentage": 10.12
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"action": {
"type": "string"
},
"count": {
"type": "integer"
},
"percentage": {
"type": "number"
}
}
}
}
}
}
GET /dashboard/analytics/timeline
Get timeline data
Description
Returns time-series activity data
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
accountId |
query | string | No | ||
granularity |
query | string | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"granularity": "string",
"data": [
{
"timestamp": "string",
"total": 0,
"successful": 0,
"failed": 0,
"encryptions": 0,
"decryptions": 0,
"rotations": 0
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"granularity": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string"
},
"total": {
"type": "integer"
},
"successful": {
"type": "integer"
},
"failed": {
"type": "integer"
},
"encryptions": {
"type": "integer"
},
"decryptions": {
"type": "integer"
},
"rotations": {
"type": "integer"
}
}
}
}
}
}
GET /dashboard/analytics/assets
Get asset stats
Description
Returns aggregated asset statistics
Responses
{
"totalAssets": 0,
"recentAssets": 0,
"activeAssets": 0,
"unConnectedAssets": 0,
"connectedAssets": 0,
"avgParentsPerAsset": 10.12,
"maxParentsPerAsset": 0,
"lastUpdated": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"totalAssets": {
"type": "integer"
},
"recentAssets": {
"type": "integer"
},
"activeAssets": {
"type": "integer"
},
"unConnectedAssets": {
"type": "integer"
},
"connectedAssets": {
"type": "integer"
},
"avgParentsPerAsset": {
"type": "number"
},
"maxParentsPerAsset": {
"type": "integer"
},
"lastUpdated": {
"type": "string"
}
}
}
GET /dashboard/analytics/assets/trend
Get asset creation trend
Description
Returns daily asset creation counts
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"data": [
{
"date": "string",
"count": 0,
"label": "string"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"count": {
"type": "integer"
},
"label": {
"type": "string"
}
}
}
}
}
}
GET /dashboard/analytics/assets/activity
Get asset activity trend
Description
Returns daily asset activity counts from asset_activity table
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"data": [
{
"date": "string",
"count": 0,
"label": "string"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"count": {
"type": "integer"
},
"label": {
"type": "string"
}
}
}
}
}
}
GET /dashboard/analytics/keyrings/{name}/timeline
Get keyring activity timeline
Description
Returns time-series activity data for a specific keyring
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
granularity |
query | string | No | ||
name |
path | string | No | ||
timeRange |
query | string | No |
Responses
{
"timeRange": "string",
"granularity": "string",
"data": [
{
"timestamp": "string",
"total": 0,
"successful": 0,
"failed": 0,
"encryptions": 0,
"decryptions": 0,
"rotations": 0
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"timeRange": {
"type": "string"
},
"granularity": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"timestamp": {
"type": "string"
},
"total": {
"type": "integer"
},
"successful": {
"type": "integer"
},
"failed": {
"type": "integer"
},
"encryptions": {
"type": "integer"
},
"decryptions": {
"type": "integer"
},
"rotations": {
"type": "integer"
}
}
}
}
}
}
Stats
GET /dashboard/stats/counts
Get system counts
Description
Returns total entity counts across the platform, independent of filters
Responses
{
"keyrings": 0,
"accounts": 0,
"users": 0,
"assets": 0,
"activities": 0,
"apiKeys": 0,
"updatedAt": "string"
}
Schema of the response body
{
"type": "object",
"properties": {
"keyrings": {
"type": "integer"
},
"accounts": {
"type": "integer"
},
"users": {
"type": "integer"
},
"assets": {
"type": "integer"
},
"activities": {
"type": "integer"
},
"apiKeys": {
"type": "integer"
},
"updatedAt": {
"type": "string"
}
}
}
Schemas
asym.key
| Name | Type | Description |
|---|---|---|
id |
string | The Key ID |
keyData |
asym.keydata | The Actual Key Data |
props |
Any custom properties on this Key | |
type |
The Algorithm this Key is used for |
asym.keydata
| Name | Type | Description |
|---|---|---|
key |
string | Base64 encoded Key cryptographic data |
asym.keyring
| Name | Type | Description |
|---|---|---|
activeAlgorithm |
The active algorithm on the KeyRing | |
activeKey |
string | The Key ID that is currently active |
createdAt |
string | Creation timestamp |
displayName |
string | The KeyRing display name |
id |
string | The KeyRing ID |
name |
string | The KeyRing name |
publicKey |
string | The KeyRing's Public Key. It is base64 endcoded. |
updatedAt |
string | Updated timestamp |
auth.account
| Name | Type | Description |
|---|---|---|
apiKeyCount |
integer | null | Number of API keys for this account (only present when includeKeyCounts=true) |
createdAt |
string | |
id |
string | |
notes |
string | |
props |
||
status |
string | Account status: 'active' or 'deactivated' |
uid |
string | The Account UID |
updatedAt |
string |
auth.activity
| Name | Type | Description |
|---|---|---|
createdAt |
integer | Epoch UTC time |
id |
string | |
keyid |
string | |
props |
auth.activity.create
| Name | Type | Description |
|---|---|---|
action |
string | |
apikeyId |
string | |
createdAt |
integer | |
props |
||
ringname |
string | |
validAction |
boolean |
auth.apikey
| Name | Type | Description |
|---|---|---|
accountId |
string | |
active |
boolean | |
autoDisableOnLimit |
boolean | |
countedActions |
Array<string> | |
createdAt |
string | |
currentUses |
integer | |
flags |
||
key |
string | |
keyid |
string | |
maxUses |
integer | null | |
props |
||
references |
auth.apikeyref | |
updatedAt |
string | |
validFrom |
string | null | |
validUntil |
string | null |
auth.apikeyref
| Name | Type | Description |
|---|---|---|
accountId |
string |
auth.pagination
| Name | Type | Description |
|---|---|---|
count |
integer | |
hasMore |
boolean | |
limit |
integer | |
nextCursor |
string |
auth.password.validation
| Name | Type | Description |
|---|---|---|
details |
Properties: minLength, newPasswordLength, minUppercase, newPasswordUppercase, minLowercase, newPasswordLowercase, minSpecialChar, newPasswordSpecialChar, minNumber, newPasswordNumber |
|
isValid |
boolean |
auth.safeapikey
| Name | Type | Description |
|---|---|---|
accountId |
string | |
active |
boolean | |
autoDisableOnLimit |
boolean | |
countedActions |
Array<string> | |
createdAt |
string | |
currentUses |
integer | |
flags |
||
keyid |
string | |
maxUses |
integer | null | |
props |
||
references |
auth.apikeyref | |
updatedAt |
string | |
validFrom |
string | null | |
validUntil |
string | null |
auth.user
| Name | Type | Description |
|---|---|---|
displayName |
string | The User's display name |
email |
string | The User's email |
firstName |
string | The User's first name |
id |
string | The User ID |
keys |
Array<string> | A list of all API Key IDs owned by the user |
lastName |
string | The User's last name |
props |
Any unique props stored on the User | |
username |
string | The unique user name |
auth.validate.trustedservice
| Name | Type | Description |
|---|---|---|
ctx |
auth.validate.trustedservicectx | |
service |
string | The Service Name |
auth.validate.trustedservicectx
| Name | Type | Description |
|---|---|---|
options |
Properties: suppressActivity |
|
user |
Properties: userId, username |
ks.algorithm
Type: string
ks.key
| Name | Type | Description |
|---|---|---|
id |
string | The Key ID |
keyData |
ks.keydataencrypted | The encrypted Key Data |
props |
Any unique data stored on the Key | |
type |
ks.algorithm | The Algorithm |
ks.keydata
| Name | Type | Description |
|---|---|---|
key |
string |
ks.keydataencrypted
| Name | Type | Description |
|---|---|---|
encrypted |
Properties: key |
|
iv |
string |
ks.keyring
| Name | Type | Description |
|---|---|---|
activeAlgorithm |
The Active Algorithm | |
activeKey |
string | The Active Key ID |
createdAt |
string | The created at timestamp |
displayName |
string | Upper and lowercase preserved name |
id |
string | The Keyring ID |
name |
string | The KeyRing name |
props |
Additional properties on the KeyRing | |
publicKey |
string | Base64 encoded Public Key |
updatedAt |
string | The updated at timestamp |
ks.keyringconfig
| Name | Type | Description |
|---|---|---|
algos |
Properties: aes256 |
|
key |
Properties: props |
|
props |
ks.signedasset
| Name | Type | Description |
|---|---|---|
data |
||
id |
string | |
message |
string | |
valid |
boolean |
Security schemes
| Name | Type | Scheme | Description |
|---|---|---|---|
| BearerAuth | http | bearer |
More documentation
Grizzly Platform Documentation