Agent directory#

PropertyValue
Servicecrossfire
Operationagents
MethodGET
Path/api/agents
Authenticationhuman
Success status200
Response dataPaginated collection
Request formatjson
Maximum request body2097152 bytes (service default)
Permission codesagent.read.owned, agent.read.any

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: agents ; see function below

Accepted query parameters: ownerId, status, listener, search.

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 agents(input: unknown) {
    const parsed = checked(input, ['ownerId', 'status', 'listener', 'search']);
    if (!parsed.ok)
        return parsed;
    const params = parsed.value;
    const bounds = pagination(params), ownerId = params.get('ownerId'), search = params.get('search') ?? '';
    if (!bounds.ok)
        return bounds;
    if (ownerId !== null) {
        const valid = check.identifier(ownerId);
        if (!valid.ok)
            return valid;
    }
    const statuses: ('active' | 'suspended' | 'revoked')[] = [];
    const selection = params.get('status') ?? 'active,suspended';
    for (const value of selection === '' ? [] : selection.split(',')) {
        const parsedStatus = check.status(value);
        if (!parsedStatus.ok)
            return parsedStatus;
        if (statuses.includes(parsedStatus.value))
            return failure('invalid', 'Duplicate account status');
        statuses.push(parsedStatus.value);
    }
    const listener = check.choice('all', 'online', 'offline', 'disconnecting')(params.get('listener') ?? 'all');
    if (!listener.ok)
        return listener;
    if (!check.text(200, 0)(search).ok)
        return failure('invalid', 'Invalid search');
    return success({ ...bounds.value, statuses, search, listener: listener.value, ...(ownerId === null ? {} : { ownerId }) });
}

Validation#

query.agents

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 ( agent )

Field pathRepresentation and constraints
[].agentIdlowercase opaque UUID
[].matrixUserIdwell-formed Matrix user ID; maximum 255 UTF-16 units
[].namelowercase name; pattern [a-z][a-z0-9-]{0,39}
[].displayNamestring; 1–255 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].ownerobject; fields below; unknown fields rejected ( owner )
[].owner.memberIdlowercase opaque UUID
[].owner.matrixUserIdwell-formed Matrix user ID; maximum 255 UTF-16 units
[].owner.displayNamestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].owner.statusvalidator choice('active', 'suspended', 'revoked') ( status )
[].statusvalidator choice('active', 'suspended', 'revoked') ( status )
[].revisionexact JSON integer; 0…9007199254740991
[].createdAtexact JSON integer; 0…9007199254740991
[].applicationobject; fields below; unknown fields rejected ( application )
[].application.appliedRevisionexact JSON integer; 0…9007199254740991; JSON null permitted
[].application.appliedStatusvalidator choice('active', 'suspended', 'revoked') ( status ); JSON null permitted
[].application.nativeDisplayNamestring; 1–255 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].application.lastAttemptAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].application.lastSuccessAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].application.errorCodestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].application.errorMessagestring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].activityobject; fields below; unknown fields rejected ( activity )
[].activity.statusonline or offline or disconnecting
[].activity.activeMsexact JSON integer; 0…9007199254740991
[].activity.messagesDeliveredexact JSON integer; 0…9007199254740991
[].activity.lastSeenAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].activity.activeRunsarray; 0–100 entries; item: object; fields below; unknown fields rejected ( listenerRun )
[].activity.activeRuns[].runIdlowercase opaque UUID
[].activity.activeRuns[].agentIdlowercase opaque UUID
[].activity.activeRuns[].releasestring; 1–200 UTF-16 units; well-formed Unicode; no C0/DEL controls; JSON null permitted
[].activity.activeRuns[].controllerobject; fields below; unknown fields rejected; JSON null permitted
[].activity.activeRuns[].controller.fleetIdlowercase opaque UUID
[].activity.activeRuns[].controller.connectionIdlowercase opaque UUID
[].activity.activeRuns[].controller.credentialIdlowercase opaque UUID
[].activity.activeRuns[].startedAtexact JSON integer; 0…9007199254740991
[].activity.activeRuns[].lastSeenAtexact JSON integer; 0…9007199254740991
[].activity.activeRuns[].activeMsexact JSON integer; 0…9007199254740991
[].activity.activeRuns[].messagesDeliveredexact JSON integer; 0…9007199254740991
[].activity.activeRuns[].stoppedAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].activity.activeRuns[].disconnectRequestedAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].nativeRuntimeobject; fields below; unknown fields rejected ( nativeRuntimeSummary ); JSON null permitted
[].nativeRuntime.stateidle or working or waiting-approval or waiting-answer or failed or unavailable or sleeping or waking or stopped
[].nativeRuntime.observedAtexact JSON integer; 0…9007199254740991
[].nativeRuntime.lastActivityAtexact JSON integer; 0…9007199254740991; JSON null permitted
[].nativeRuntime.historyAvailableboolean; JSON null permitted
[].deploymentobject; fields below; unknown fields rejected
[].deployment.fleetIdlowercase opaque UUID
[].deployment.fleetKeylowercase name; pattern [a-z][a-z0-9-]{0,39}
[].deployment.labelstring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].deployment.controllerNamestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
[].deployment.reportedAtexact JSON integer; 0…9007199254740991
[].deployment.instanceKeylowercase name; pattern [a-z][a-z0-9-]{0,39}
[].canRetireboolean
[].allowedActionsarray; 0–3 entries; item: configure or room-grant.manage or retire

Validation#

check.list(res.agent, 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
  }
}