Registered fleets#

Private controller API. Call this route through the user’s Unix socket, locally or over SSH. It is not exposed on the server’s public origin.

PropertyValue
Servicefleetd
Operationfleets
MethodGET
Path/api/fleets
Authenticationpublic
Success status200
Response dataPaginated collection
Request formatjson
Maximum request body1048576 bytes (service default)
Permission codesNone declared

Listed permission codes are alternatives, not token scopes. The service also checks access to the requested records and rejects stale revisions or controller generations.

Path parameters#

empty object; unknown fields rejected

Validation#

check.empty

Referenced definitions:

Query parameters#

custom validation: page ; see function below

Query parameters are URL text. The validation function below specifies their format, defaults and combinations. Pagination applies only to operations that use it.

Additional checks#

The following checks apply in addition to the field limits.

Constraint on value:

export function page(input: unknown) {
    const parsed = checked(input, []);
    return parsed.ok ? pagination(parsed.value) : parsed;
}

Validation#

page

Referenced definitions:

Request body#

empty object; unknown fields rejected

Validation#

check.empty

Referenced definitions:

Response data#

array; 0–100 entries; item: object; fields below; unknown fields rejected ( fleetView )

Field pathRepresentation and constraints
[].fleetIdlowercase opaque UUID
[].fleetKeylowercase name; pattern [a-z][a-z0-9-]{0,39}
[].labelstring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].directorystring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].revisionexact JSON integer; 0…9007199254740991
[].controllerobject; fields below; unknown fields rejected ( controller )
[].controller.namestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].controller.metadatacustom validation: metadata ; see function below; optional property
[].resumeInstanceKeysarray; 0–100 entries; item: lowercase name; pattern [a-z][a-z0-9-]{0,39}; JSON null permitted
[].phasestopped or starting or awaiting-approval or running or sleeping or waking or stopping or failed ( phase )
[].instancesarray; 0–100 entries; item: object; fields below; unknown fields rejected ( instanceView )
[].instances[].instanceobject; fields below; unknown fields rejected ( instance )
[].instances[].instance.keylowercase name; pattern [a-z][a-z0-9-]{0,39}
[].instances[].instance.namelowercase name; pattern [a-z][a-z0-9-]{0,39}
[].instances[].instance.definitionlowercase name; pattern [a-z][a-z0-9-]{0,39}
[].instances[].instance.workareastring; 1–1024 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].instances[].instance.workspacestring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; optional property
[].instances[].instance.runtimeOptionscustom validation: runtimeOptions ; see function below; optional property
[].instances[].instance.listenerOptionsobject; fields below; unknown fields rejected; optional property
[].instances[].instance.listenerOptions.historyModeshared or per-room; optional property
[].instances[].phasestopped or starting or awaiting-approval or running or sleeping or waking or stopping or failed ( phase )
[].instances[].listenerActiveboolean
[].instances[].desiredActiveboolean
[].instances[].lastActivityAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].instances[].historyAvailableboolean; JSON null permitted
[].instances[].sessionIdstring; 1–200 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].instances[].errorstring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].instances[].startedAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].errorstring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].connectionobject; fields below; unknown fields rejected
[].connection.connectedboolean
[].connection.deliveryEnabledboolean
[].connection.revisionexact JSON integer; 0…9007199254740991; JSON null permitted
[].connection.errorstring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted

Additional checks#

The following checks apply in addition to the field limits.

Constraint on [].controller.metadata:

function metadata(input: unknown): Result<Record<string, string>> {
    if (!input || typeof input !== 'object' || Array.isArray(input) || Object.keys(input).length > 16)
        return failure('invalid', 'Controller metadata supports at most 16 text fields');
    const output: Record<string, string> = {};
    for (const [key, value] of Object.entries(input)) {
        if (!/^[a-z][a-z0-9-]{0,39}$/u.test(key) || !check.text(256, 0)(value).ok || typeof value !== 'string')
            return failure('invalid', 'Invalid controller metadata');
        output[key] = value;
    }
    return success(output);
}

Constraint on [].instances[].instance.runtimeOptions:

(input: unknown): Result<Record<string, unknown>> => input && typeof input === 'object' && !Array.isArray(input) ? success(input as Record<string, unknown>) : failure('invalid', 'Expected runtime options')

Validation#

check.list(fleetView, 100)

Referenced definitions:

Response envelope#

A successful JSON response contains data and meta. Replace the data placeholder below with the response fields described above. Errors contain error instead of data.

{
  "data": "<value matching the response-data validator>",
  "meta": {
    "requestId": "00000000-0000-0000-0000-000000000001",
    "page": 1,
    "pageSize": 20,
    "totalItems": 0,
    "totalPages": 1
  }
}