Edge
Edge enrollment and the edge work channel.
16 endpoints · Plakar Control Plane v0.18 · Base URL, authentication and errors
List the edge pools
/api/v1/account/organizations/{id}/edge-pools
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s.
Query parameters
-
offsetintegerNumber of items to skip.Default: 0 -
limitintegerMaximum number of items to return.Default: 50 Min: 1 Max: 50 -
searchstringCase-insensitive match on the pool name. -
enrollmentstringOnly pools whose enrollment is open, or closed.Allowed: open, closed -
emptybooleanOnly pools holding no edge, or only pools holding some.
Response 200 OK application/json
-
itemsarray[object]-
created_atstring<date-time> -
edge_countinteger -
enrollment_openboolean -
idstring<uuid> -
namestring
-
-
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/account/organizations/{id}/edge-pools' \
-H 'Authorization: Bearer <badge>'Response 200
{
"items": [
{
"created_at": "2026-01-01T00:00:00Z",
"edge_count": 0,
"enrollment_open": true,
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"name": "string"
}
],
"total": 0
}Create an edge pool
/api/v1/account/organizations/{id}/edge-pools
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s.
Request body application/json required
-
namestring required
Response 200 OK application/json
-
created_atstring<date-time> -
edge_countinteger -
enrollment_openboolean -
idstring<uuid> -
namestring
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/account/organizations/{id}/edge-pools' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"name": "string"
}'Response 200
{
"created_at": "2026-01-01T00:00:00Z",
"edge_count": 0,
"enrollment_open": true,
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"name": "string"
}Get an edge pool
/api/v1/account/organizations/{id}/edge-pools/{pool_id}
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
pool_idstring required
Response 200 OK application/json
-
created_atstring<date-time> -
edge_countinteger -
enrollment_openboolean -
idstring<uuid> -
namestring
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/account/organizations/{id}/edge-pools/{pool_id}' \
-H 'Authorization: Bearer <badge>'Response 200
{
"created_at": "2026-01-01T00:00:00Z",
"edge_count": 0,
"enrollment_open": true,
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"name": "string"
}Delete an edge pool
/api/v1/account/organizations/{id}/edge-pools/{pool_id}
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
pool_idstring required
Response 200 OK
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/account/organizations/{id}/edge-pools/{pool_id}' \
-H 'Authorization: Bearer <badge>'Close enrollment into an edge pool
/api/v1/account/organizations/{id}/edge-pools/{pool_id}/enrollment-key
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
pool_idstring required
Response 200 OK
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/account/organizations/{id}/edge-pools/{pool_id}/enrollment-key' \
-H 'Authorization: Bearer <badge>'Generate an edge pool enrollment key
/api/v1/account/organizations/{id}/edge-pools/{pool_id}/enrollment-key/generate
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
pool_idstring required
Response 200 OK application/json
-
enrollment_keystring
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/account/organizations/{id}/edge-pools/{pool_id}/enrollment-key/generate' \
-H 'Authorization: Bearer <badge>'Response 200
{
"enrollment_key": "string"
}Generate an edge enrollment key
/api/v1/account/organizations/{id}/edge/enrollment-key/generate
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s.
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
-
-
mailerobject nullable-
from_addressstring -
hoststring -
passwordstring -
portinteger -
tlsboolean -
usernamestring
-
-
packagesobject nullable-
repository_urlstring
-
-
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/account/organizations/{id}/edge/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"
},
"mailer": {
"from_address": "string",
"host": "string",
"password": "string",
"port": 0,
"tls": true,
"username": "string"
},
"packages": {
"repository_url": "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"
}
}List the enrolled edges
/api/v1/account/organizations/{id}/edges
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s.
Query parameters
-
offsetintegerNumber of items to skip.Default: 0 -
limitintegerMaximum number of items to return.Default: 100 Min: 1 Max: 100 -
pool_idstring<uuid>Only edges in this pool. -
no_poolbooleanOnly edges in no pool. Cannot be combined with pool_id. -
searchstringCase-insensitive match on edge name or hostname.
Response 200 OK application/json
-
itemsarray[object]-
created_atstring<date-time> -
edge_versionstring -
hostnamestring -
idstring<uuid> -
last_seenstring<date-time> nullable -
namestring -
organization_idstring<uuid> -
pool_idstring<uuid> -
pool_namestring nullable -
protocol_versioninteger -
statusstring -
system_infoobject-
archstring nullable -
go_versionstring nullable -
kernelstring nullable -
kloset_versionstring nullable -
num_cpuinteger nullable -
osstring nullable -
total_memoryinteger nullableMax: 1.8446744073709552e+19
-
-
tagsarray[string] nullable
-
-
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/account/organizations/{id}/edges' \
-H 'Authorization: Bearer <badge>'Response 200
{
"items": [
{
"created_at": "2026-01-01T00:00:00Z",
"edge_version": "string",
"hostname": "string",
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"last_seen": "2026-01-01T00:00:00Z",
"name": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"pool_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"pool_name": "string",
"protocol_version": 0,
"status": "string",
"system_info": {
"arch": "string",
"go_version": "string",
"kernel": "string",
"kloset_version": "string",
"num_cpu": 0,
"os": "string",
"total_memory": 0
},
"tags": [
"string"
]
}
],
"total": 0
}Get an enrolled edge
/api/v1/account/organizations/{id}/edges/{edge_id}
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
edge_idstring required
Response 200 OK application/json
-
created_atstring<date-time> -
edge_versionstring -
hostnamestring -
idstring<uuid> -
last_seenstring<date-time> nullable -
namestring -
organization_idstring<uuid> -
pool_idstring<uuid> -
pool_namestring nullable -
protocol_versioninteger -
statusstring -
system_infoobject-
archstring nullable -
go_versionstring nullable -
kernelstring nullable -
kloset_versionstring nullable -
num_cpuinteger nullable -
osstring nullable -
total_memoryinteger nullableMax: 1.8446744073709552e+19
-
-
tagsarray[string] 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/account/organizations/{id}/edges/{edge_id}' \
-H 'Authorization: Bearer <badge>'Response 200
{
"created_at": "2026-01-01T00:00:00Z",
"edge_version": "string",
"hostname": "string",
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"last_seen": "2026-01-01T00:00:00Z",
"name": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"pool_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"pool_name": "string",
"protocol_version": 0,
"status": "string",
"system_info": {
"arch": "string",
"go_version": "string",
"kernel": "string",
"kloset_version": "string",
"num_cpu": 0,
"os": "string",
"total_memory": 0
},
"tags": [
"string"
]
}Put an edge in a pool
/api/v1/account/organizations/{id}/edges/{edge_id}/pool
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
edge_idstring required
Request body application/json required
-
pool_idstring<uuid>
Response 200 OK
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 PUT 'https://pcp.example.com/api/v1/account/organizations/{id}/edges/{edge_id}/pool' \
-H 'Authorization: Bearer <badge>' \
-H 'Content-Type: application/json' \
-d '{
"pool_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}'Take an edge out of its pool
/api/v1/account/organizations/{id}/edges/{edge_id}/pool
Path parameters
-
idstring<uuid> requiredOrganization ID, at or below the caller’s. -
edge_idstring required
Response 200 OK
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/account/organizations/{id}/edges/{edge_id}/pool' \
-H 'Authorization: Bearer <badge>'Enroll an edge
/api/v1/edge/enroll
Request body application/json required
-
edge_versionstring -
enrollment_keystring required -
hostnamestring -
namestring required -
organization_idstring<uuid> -
protocol_versioninteger -
system_infoobject-
archstring nullable -
go_versionstring nullable -
kernelstring nullable -
kloset_versionstring nullable -
num_cpuinteger nullable -
osstring nullable -
total_memoryinteger nullableMax: 1.8446744073709552e+19
-
Response 200 OK application/json
-
edge_idstring<uuid> -
protocol_versioninteger -
supportedboolean -
tokenstring
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/edge/enroll' \
-H 'Content-Type: application/json' \
-d '{
"edge_version": "string",
"enrollment_key": "string",
"hostname": "string",
"name": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"protocol_version": 0,
"system_info": {
"arch": "string",
"go_version": "string",
"kernel": "string",
"kloset_version": "string",
"num_cpu": 0,
"os": "string",
"total_memory": 0
}
}'Response 200
{
"edge_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"protocol_version": 0,
"supported": true,
"token": "string"
}Download a connector package for the edge platform
/api/v1/edge/packages/{name}/{version}
Path parameters
-
namestring required -
versionstring required
Query parameters
-
osstring requiredTarget operating system. -
archstring requiredTarget architecture.
Response 200 The connector package application/octet-stream
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/edge/packages/{name}/{version}' \
-H 'Authorization: Bearer <edge-token>'Wait for work
/api/v1/edge/poll
Request body application/json required
-
edge_versionstring -
hostnamestring -
protocol_versioninteger -
slotsinteger nullable -
system_infoobject-
archstring nullable -
go_versionstring nullable -
kernelstring nullable -
kloset_versionstring nullable -
num_cpuinteger nullable -
osstring nullable -
total_memoryinteger nullableMax: 1.8446744073709552e+19
-
-
tagsarray[string] nullable
Response 200 A piece of work application/json
-
opstring -
sourceobject nullable-
data_classesarray[string] nullable -
environmentstring nullable -
fieldsarray[object]-
keystring -
valstring
-
-
idstring<uuid> -
integrationobject-
idstring<uuid> -
namestring -
versionstring
-
-
namestring -
revisioninteger -
typestring -
urnstring -
urnidstring<uuid>
-
-
targetobject nullable-
data_classesarray[string] nullable -
environmentstring nullable -
fieldsarray[object]-
keystring -
valstring
-
-
idstring<uuid> -
integrationobject-
idstring<uuid> -
namestring -
versionstring
-
-
namestring -
revisioninteger -
typestring -
urnstring -
urnidstring<uuid>
-
-
task_configmap[string] -
work_idstring<uuid>
Response 204 No work arrived before the hold expired
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 POST 'https://pcp.example.com/api/v1/edge/poll' \
-H 'Authorization: Bearer <edge-token>' \
-H 'Content-Type: application/json' \
-d '{
"edge_version": "string",
"hostname": "string",
"protocol_version": 0,
"slots": 0,
"system_info": {
"arch": "string",
"go_version": "string",
"kernel": "string",
"kloset_version": "string",
"num_cpu": 0,
"os": "string",
"total_memory": 0
},
"tags": [
"string"
]
}'Response 200
{
"op": "string",
"source": {
"data_classes": [
"string"
],
"environment": "string",
"fields": [
{
"key": "string",
"val": "string"
}
],
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"integration": {
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"name": "string",
"version": "string"
},
"name": "string",
"revision": 0,
"type": "string",
"urn": "string",
"urnid": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
},
"target": {
"data_classes": [
"string"
],
"environment": "string",
"fields": [
{
"key": "string",
"val": "string"
}
],
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"integration": {
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"name": "string",
"version": "string"
},
"name": "string",
"revision": 0,
"type": "string",
"urn": "string",
"urnid": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
},
"task_config": {
"key": "string"
},
"work_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}Enroll an edge into a pool
/api/v1/edge/pools/enroll
Request body application/json required
-
edge_versionstring -
enrollment_keystring required -
hostnamestring -
namestring required -
protocol_versioninteger -
system_infoobject-
archstring nullable -
go_versionstring nullable -
kernelstring nullable -
kloset_versionstring nullable -
num_cpuinteger nullable -
osstring nullable -
total_memoryinteger nullableMax: 1.8446744073709552e+19
-
Response 200 OK application/json
-
edge_idstring<uuid> -
protocol_versioninteger -
supportedboolean -
tokenstring
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/edge/pools/enroll' \
-H 'Content-Type: application/json' \
-d '{
"edge_version": "string",
"enrollment_key": "string",
"hostname": "string",
"name": "string",
"protocol_version": 0,
"system_info": {
"arch": "string",
"go_version": "string",
"kernel": "string",
"kloset_version": "string",
"num_cpu": 0,
"os": "string",
"total_memory": 0
}
}'Response 200
{
"edge_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"protocol_version": 0,
"supported": true,
"token": "string"
}Reply to a piece of work
/api/v1/edge/{work_id}/reply
Path parameters
-
work_idstring required
Request body application/json required
-
messagestring nullable -
report -
state -
typestring
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 POST 'https://pcp.example.com/api/v1/edge/{work_id}/reply' \
-H 'Authorization: Bearer <edge-token>' \
-H 'Content-Type: application/json' \
-d '{
"message": "string",
"report": {},
"state": {},
"type": "string"
}'