Bootstrap
First-run setup of a fresh control plane.
10 endpoints · Plakar Control Plane v0.18 · Base URL, authentication and errors
Get the bootstrap account
/api/v1/bootstrap/account
Response 200 OK application/json
-
accountstring -
auth_providerstring -
avatar_urlstring -
emailstring -
must_reset_passwordboolean nullable -
namestring -
organization_idstring<uuid> -
user_idstring<uuid>
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/bootstrap/account'Response 200
{
"account": "string",
"auth_provider": "string",
"avatar_url": "string",
"email": "string",
"must_reset_password": true,
"name": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"user_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}Enroll the control plane
/api/v1/bootstrap/enroll
Request body application/json required
-
emailstring required -
namestring required -
organization_idstring<uuid> -
passwordstring required
Response 200 OK application/json
-
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/bootstrap/enroll' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"name": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"password": "string"
}'Response 200
{
"token": "string"
}Enroll the control plane from a license
/api/v1/bootstrap/enroll/license
Request body application/json required
-
emailstring required -
licensestring required -
namestring required -
organization_namestring nullable -
passwordstring required
Response 200 OK application/json
-
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/bootstrap/enroll/license' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"license": "string",
"name": "string",
"organization_name": "string",
"password": "string"
}'Response 200
{
"token": "string"
}Preview a license
/api/v1/bootstrap/enroll/license/preview
Request body application/json required
-
licensestring required
Response 200 OK application/json
-
expires_atstring<date-time> -
modestring -
organization_idstring<uuid> -
organization_namestring -
planstring
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/bootstrap/enroll/license/preview' \
-H 'Content-Type: application/json' \
-d '{
"license": "string"
}'Response 200
{
"expires_at": "2026-01-01T00:00:00Z",
"mode": "string",
"organization_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"organization_name": "string",
"plan": "string"
}Enroll the control plane offline
/api/v1/bootstrap/enroll/offline
Request body application/json required
-
emailstring required -
licensestring required -
namestring required -
organization_namestring required -
passwordstring required
Response 200 OK application/json
-
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/bootstrap/enroll/offline' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"license": "string",
"name": "string",
"organization_name": "string",
"password": "string"
}'Response 200
{
"token": "string"
}Preview an offline enrollment
/api/v1/bootstrap/enroll/offline/preview
Request body application/json required
-
emailstring required -
licensestring required -
namestring required -
organization_namestring required -
passwordstring required
Response 200 OK application/json
-
admin_emailstring -
admin_namestring -
expires_atstring<date-time> -
identity_idstring<uuid> -
issued_atstring<date-time> -
modestring -
organization_idstring<uuid> -
organization_namestring -
planstring -
validboolean
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/bootstrap/enroll/offline/preview' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"license": "string",
"name": "string",
"organization_name": "string",
"password": "string"
}'Response 200
{
"admin_email": "string",
"admin_name": "string",
"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",
"organization_name": "string",
"plan": "string",
"valid": true
}Start a bootstrap login
/api/v1/bootstrap/login
Request body application/json required
-
emailstring required -
redirectboolean
Response 200 OK application/json
-
URLstring nullable -
poll_idstring -
tokenstring nullable
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/bootstrap/login' \
-H 'Content-Type: application/json' \
-d '{
"email": "string",
"redirect": true
}'Response 200
{
"URL": "string",
"poll_id": "string",
"token": "string"
}Poll a bootstrap login
/api/v1/bootstrap/login/poll
Request body application/json required
-
completion_codestring nullable -
poll_idstring required
Response 200 OK application/json
-
tokenstring
Response 202 The login is still pending
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 -X POST 'https://pcp.example.com/api/v1/bootstrap/login/poll' \
-H 'Content-Type: application/json' \
-d '{
"completion_code": "string",
"poll_id": "string"
}'Response 200
{
"token": "string"
}List the organizations available to enroll
/api/v1/bootstrap/organizations
Response 200 OK application/json
-
created_atstring<date-time> -
idstring<uuid> -
infomap[string] -
namestring -
parent_idstring<uuid> -
revisioninteger -
typestring -
updated_atstring<date-time>
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/bootstrap/organizations'Response 200
[
{
"created_at": "2026-01-01T00:00:00Z",
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"info": {
"key": "string"
},
"name": "string",
"parent_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"revision": 0,
"type": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
]Create an organization to enroll
/api/v1/bootstrap/organizations
Request body application/json required
-
infomap[string] -
namestring required
Response 200 OK application/json
-
created_atstring<date-time> -
idstring<uuid> -
infomap[string] -
namestring -
parent_idstring<uuid> -
revisioninteger -
typestring -
updated_atstring<date-time>
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/bootstrap/organizations' \
-H 'Content-Type: application/json' \
-d '{
"info": {
"key": "string"
},
"name": "string"
}'Response 200
{
"created_at": "2026-01-01T00:00:00Z",
"id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"info": {
"key": "string"
},
"name": "string",
"parent_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
"revision": 0,
"type": "string",
"updated_at": "2026-01-01T00:00:00Z"
}