Report this listener#

PropertyValue
Servicecrossfire
OperationreportListener
MethodPUT
Path/api/agents/{agentId}/listener-runs/{runId}
Authenticationagent
Success status200
Response dataUnpaginated value
Request formatjson
Maximum request body2097152 bytes (service default)
Permission codeslistener.report.self

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#

object; fields below; unknown fields rejected

Field pathRepresentation and constraints
agentIdlowercase opaque UUID
runIdlowercase opaque UUID

Validation#

check.object({ agentId: check.identifier, runId: check.identifier })

Referenced definitions:

Query parameters#

custom validation: none ; 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 none(input: unknown) {
    const parsed = listQuery([])(input);
    return parsed.ok ? success({}) : parsed;
}

Validation#

query.none

Referenced definitions:

Request body#

object; fields below; unknown fields rejected ( heartbeat )

Field pathRepresentation and constraints
releasestring; 1–200 UTF-16 units; well-formed Unicode; no C0/DEL controls
messagesDeliveredexact JSON integer; 0…9007199254740991
stoppedboolean
controllerobject; fields below; unknown fields rejected
controller.fleetIdlowercase opaque UUID
controller.connectionIdlowercase opaque UUID
controller.credentialstring; 1–200 UTF-16 units; well-formed Unicode; no C0/DEL controls
statisticsobject; fields below; unknown fields rejected; constraint: Invalid interval or duplicate summaries ( statisticsBatch ); JSON null permitted
statistics.sequenceexact JSON integer; 1…9007199254740991
statistics.startedAtexact JSON integer; 0…9007199254740991 ( count )
statistics.endedAtexact JSON integer; 0…9007199254740991 ( count )
statistics.droppedexact JSON integer; 0…9007199254740991 ( count )
statistics.flowsarray; 0–256 entries; item: object; fields below; unknown fields rejected ( trafficFlow )
statistics.flows[].roomIdimmutable Matrix room ID; maximum 255 UTF-16 units
statistics.flows[].senderMatrixIdwell-formed Matrix user ID; maximum 255 UTF-16 units
statistics.flows[].messageTypestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
statistics.flows[].observedexact JSON integer; 0…9007199254740991 ( count )
statistics.flows[].deliveredexact JSON integer; 0…9007199254740991 ( count )
statistics.flows[].contentBytesexact JSON integer; 0…9007199254740991 ( count )
statistics.flows[].deliveredBytesexact JSON integer; 0…9007199254740991 ( count )
statistics.flows[].attachmentBytesexact JSON integer; 0…9007199254740991 ( count )
statistics.flows[].largestBytesexact JSON integer; 0…9007199254740991 ( count )
statistics.usagearray; 0–32 entries; item: object; fields below; unknown fields rejected ( usageSample )
statistics.usage[].runtimestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
statistics.usage[].sessionIdstring; 1–255 UTF-16 units; well-formed Unicode; no C0/DEL controls
statistics.usage[].tokensobject; fields below; unknown fields rejected; constraint: Token subsets exceed their parent counts ( tokenCounts )
statistics.usage[].tokens.inputexact JSON integer; 0…9007199254740991 ( count )
statistics.usage[].tokens.cachedInputexact JSON integer; 0…9007199254740991 ( count )
statistics.usage[].tokens.cacheWriteInputexact JSON integer; 0…9007199254740991 ( count ); JSON null permitted
statistics.usage[].tokens.outputexact JSON integer; 0…9007199254740991 ( count )
statistics.usage[].tokens.reasoningOutputexact JSON integer; 0…9007199254740991 ( count ); JSON null permitted
statistics.usage[].tokens.totalexact JSON integer; 0…9007199254740991 ( count )

Additional checks#

The following checks apply in addition to the field limits.

Constraint on statistics:

value => value.endedAt >= value.startedAt && new Set(value.flows.map(flow => JSON.stringify([flow.roomId, flow.senderMatrixId, flow.messageType]))).size === value.flows.length
    && new Set(value.usage.map(sample => JSON.stringify([sample.runtime, sample.sessionId]))).size === value.usage.length

Constraint on statistics.usage[].tokens:

value => value.cachedInput <= value.input && (value.cacheWriteInput ?? 0) <= value.input
    && (value.reasoningOutput ?? 0) <= value.output

Validation#

req.heartbeat

Referenced definitions:

Response data#

object; fields below; unknown fields rejected ( report )

Field pathRepresentation and constraints
disconnectboolean
currentReleasestring; 1–200 UTF-16 units; well-formed Unicode; no C0/DEL controls
statisticsAcceptedboolean

Validation#

res.report

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"
  }
}