System
Service discovery, health, diagnostics and updates.
22 endpoints · Plakar Control Plane v0.19 · Base URL, authentication and errors
Describe the deployment
/api/v1/
Response 200 OK application/json
-
enrolledboolean -
licenseobject nullable-
expires_atstring<date-time> -
identity_idstring<uuid> -
issued_atstring<date-time> -
modestring nullable -
organization_idstring<uuid> -
planstring -
quota_hardinteger<int64> -
quota_softinteger<int64>
-
-
namestring -
replicationobject nullable-
lag_secondsnumber<double> nullable -
last_sync_atstring<date-time> nullable -
primary_urlstring nullable -
rolestring
-
-
stored_bytesinteger nullableMax: 1.8446744073709552e+19 -
versionstring
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/'Response 200
{
"enrolled": true,
"license": {
"expires_at": "2026-01-01T00:00:00Z",
"identity_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"issued_at": "2026-01-01T00:00:00Z",
"mode": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"plan": "string",
"quota_hard": 0,
"quota_soft": 0
},
"name": "string",
"replication": {
"lag_seconds": 0,
"last_sync_at": "2026-01-01T00:00:00Z",
"primary_url": "string",
"role": "string"
},
"stored_bytes": 0,
"version": "string"
}Get the appliance hardware specs
/api/v1/appliance/specs
Response 200 OK application/json
-
cpuobject nullable-
countinteger -
modelstring nullable
-
-
dataobject-
free_bytesintegerMax: 1.8446744073709552e+19 -
fs_typestring -
persistentboolean -
size_bytesintegerMax: 1.8446744073709552e+19
-
-
disksarray[object] nullable-
modelstring nullable -
namestring -
size_bytesintegerMax: 1.8446744073709552e+19
-
-
memoryobject nullable-
available_bytesintegerMax: 1.8446744073709552e+19 -
total_bytesintegerMax: 1.8446744073709552e+19
-
-
warningsarray[string]
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/appliance/specs'Response 200
{
"cpu": {
"count": 0,
"model": "string"
},
"data": {
"free_bytes": 0,
"fs_type": "string",
"persistent": true,
"size_bytes": 0
},
"disks": [
{
"model": "string",
"name": "string",
"size_bytes": 0
}
],
"memory": {
"available_bytes": 0,
"total_bytes": 0
},
"warnings": [
"string"
]
}Download a database dump
/api/v1/database/dump
Query parameters
-
formatstringDump encoding.Allowed: sql, gzip, gz, zip Default: "sql"
Response 200 The database dump application/gzip
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/database/dump' \
-H 'Authorization: Bearer <badge>'Get the debug log state
/api/v1/debuglog
Response 200 OK application/json
-
enabledboolean
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/debuglog' \
-H 'Authorization: Bearer <badge>'Response 200
{
"enabled": true
}Turn the debug log on or off
/api/v1/debuglog
Request body application/json required
-
enabledboolean -
revert_after_secondsinteger
Response 200 OK application/json
-
enabledboolean
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X PUT 'https://pcp.example.com/api/v1/debuglog' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"enabled": true,
"revert_after_seconds": 0
}'Response 200
{
"enabled": true
}Check whether an update is available
/api/v1/has-update
Response 200 OK application/json
-
current_versionstring -
descriptionstring -
has_updateboolean -
next_versionstring
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/has-update' \
-H 'Authorization: Bearer <badge>'Response 200
{
"current_version": "string",
"description": "string",
"has_update": true,
"next_version": "string"
}Ping the control plane
/api/v1/janitor/ping
Response 200 OK application/json
-
pongboolean
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X POST 'https://pcp.example.com/api/v1/janitor/ping'Response 200
{
"pong": true
}Replace the instance license
/api/v1/license
Request body application/json required
-
licensestring required
Response 200 OK application/json
-
expires_atstring<date-time> -
identity_idstring<uuid> -
issued_atstring<date-time> -
modestring nullable -
organization_idstring<uuid> -
planstring -
quota_hardinteger<int64> -
quota_softinteger<int64>
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X PUT 'https://pcp.example.com/api/v1/license' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"license": "string"
}'Response 200
{
"expires_at": "2026-01-01T00:00:00Z",
"identity_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"issued_at": "2026-01-01T00:00:00Z",
"mode": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"plan": "string",
"quota_hard": 0,
"quota_soft": 0
}Download the daemon log for a day
/api/v1/logs
Query parameters
-
datestring<date-time>Day whose log to return. Defaults to today.
Response 200 The gzipped daemon log application/gzip
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/logs' \
-H 'Authorization: Bearer <badge>'Enroll a replica
/api/v1/replication/enroll
Request body application/json required
-
enrollment_keystring required -
namestring required -
public_keystring required -
schema_versioninteger -
versionstring required
Response 200 OK application/json
-
replica_idstring<uuid> -
schema_versioninteger -
tokenstring -
versionstring
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X POST 'https://pcp.example.com/api/v1/replication/enroll' \
-H 'Content-Type: application/json' \
-d '{
"enrollment_key": "string",
"name": "string",
"public_key": "string",
"schema_version": 0,
"version": "string"
}'Response 200
{
"replica_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"schema_version": 0,
"token": "string",
"version": "string"
}Generate a replication enrollment key
/api/v1/replication/enrollment-key/generate
Response 200 OK application/json
-
alertingobject nullable-
emailstring
-
-
authobject nullable-
api_key_rotation_grace_hoursinteger -
api_key_rotation_ttl_daysinteger -
badge_ttl_secondsinteger
-
-
edgeobject nullable-
enrollment_keystring
-
-
logsobject nullable-
retention_daysinteger nullable
-
-
mailerobject nullable-
from_addressstring -
hoststring -
passwordstring -
portinteger -
tlsboolean -
usernamestring
-
-
packagesobject nullable-
repository_urlstring
-
-
replicationobject nullable-
enrollment_keystring
-
-
retentionobject nullable-
min_versionsinteger nullable
-
-
securityobject nullable-
mfa_enforcedboolean
-
-
ssoobject nullable-
providersarray[object]-
domainsarray[string] -
providerstring
-
-
-
vectorobject nullable-
addressstring
-
-
webhookobject nullable-
auth_typestring -
enabledboolean -
eventsmap[array[string]] -
secretstring -
urlstring
-
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X POST 'https://pcp.example.com/api/v1/replication/enrollment-key/generate' \
-H 'Authorization: Bearer <badge>'Response 200
{
"alerting": {
"email": "string"
},
"auth": {
"api_key_rotation_grace_hours": 0,
"api_key_rotation_ttl_days": 0,
"badge_ttl_seconds": 0
},
"edge": {
"enrollment_key": "string"
},
"logs": {
"retention_days": 0
},
"mailer": {
"from_address": "string",
"host": "string",
"password": "string",
"port": 0,
"tls": true,
"username": "string"
},
"packages": {
"repository_url": "string"
},
"replication": {
"enrollment_key": "string"
},
"retention": {
"min_versions": 0
},
"security": {
"mfa_enforced": true
},
"sso": {
"providers": [
{
"domains": [
"string"
],
"provider": "string"
}
]
},
"vector": {
"address": "string"
},
"webhook": {
"auth_type": "string",
"enabled": true,
"events": {
"key": [
"string"
]
},
"secret": "string",
"url": "string"
}
}Promote this replica
/api/v1/replication/promote
Response 200 OK application/json
-
promoted_atstring<date-time> -
reportstring -
restart_requiredboolean
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X POST 'https://pcp.example.com/api/v1/replication/promote' \
-H 'Authorization: Bearer <badge>'Response 200
{
"promoted_at": "2026-01-01T00:00:00Z",
"report": "string",
"restart_required": true
}List the enrolled replicas
/api/v1/replication/replicas
Query parameters
-
offsetintegerNumber of items to skip.Default: 0 -
limitintegerMaximum number of items to return.Default: 100 Min: 1 Max: 100
Response 200 OK application/json
-
itemsarray[object]-
created_atstring<date-time> -
idstring<uuid> -
last_seenstring<date-time> nullable -
namestring -
public_keystring -
schema_versioninteger -
versionstring
-
-
totalinteger
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/replication/replicas' \
-H 'Authorization: Bearer <badge>'Response 200
{
"items": [
{
"created_at": "2026-01-01T00:00:00Z",
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"last_seen": "2026-01-01T00:00:00Z",
"name": "string",
"public_key": "string",
"schema_version": 0,
"version": "string"
}
],
"total": 0
}Revoke a replica
/api/v1/replication/replicas/{replica_id}
Path parameters
-
replica_idstring required
Response 204 No Content
No response body.
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X DELETE 'https://pcp.example.com/api/v1/replication/replicas/{replica_id}' \
-H 'Authorization: Bearer <badge>'List the replicated tables
/api/v1/replication/tables
Response 200 OK application/json
-
tablesarray[object]-
keysarray[string] -
namestring
-
-
versioninteger
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/replication/tables'Response 200
{
"tables": [
{
"keys": [
"string"
],
"name": "string"
}
],
"version": 0
}Read a page of a replicated table
/api/v1/replication/tables/{name}
Path parameters
-
namestring required
Query parameters
-
offsetintegerNumber of items to skip.Default: 0 -
limitintegerMaximum number of items to return.Default: 500 Min: 1 Max: 500
Response 200 OK application/json
-
next_offsetinteger nullable -
rowsarray
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/replication/tables/{name}'Response 200
{
"next_offset": 0,
"rows": [
{}
]
}Get the safe mode state
/api/v1/safe-mode
Response 200 OK application/json
-
bystring nullable -
enabledboolean -
reasonstring nullable -
sincestring<date-time> nullable
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/api/v1/safe-mode' \
-H 'Authorization: Bearer <badge>'Response 200
{
"by": "string",
"enabled": true,
"reason": "string",
"since": "2026-01-01T00:00:00Z"
}Turn safe mode on or off
/api/v1/safe-mode
Request body application/json required
-
enabledboolean -
reasonstringMax length: 512
Response 200 OK application/json
-
bystring nullable -
enabledboolean -
reasonstring nullable -
sincestring<date-time> nullable
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X PUT 'https://pcp.example.com/api/v1/safe-mode' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"enabled": true,
"reason": "string"
}'Response 200
{
"by": "string",
"enabled": true,
"reason": "string",
"since": "2026-01-01T00:00:00Z"
}Update the control plane to the latest version
/api/v1/update
Request body application/json required
-
next_versionstring
Response 200 OK application/json
-
task_idstring<uuid>
Errors
- 400 Bad Request (validation or deserialization error)
- 401 Missing, invalid or expired credentials
- 403 The caller may not do this
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl -X POST 'https://pcp.example.com/api/v1/update' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"next_version": "string"
}'Response 200
{
"task_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}Check liveness
/health
Response 200 OK
No response body.
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/health'Check readiness
/health/ready
Response 200 Ready application/json
-
statusstring
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
- 503 Not ready
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/health/ready'Response 200
{
"status": "string"
}Check replication
/health/replication
Response 200 OK application/json
Errors
- 400 Bad Request (validation or deserialization error)
- 500 Internal Server Error (panics)
Every error returns the standard error body.
Request
curl 'https://pcp.example.com/health/replication'Response 200
{}