Skip to content
Select themeSelect language

The memory-pipeline measurement board: raw counters for a period, rates are derived by the consumer.

GET
/api/memories/metrics
curl --request GET \
--url https://example.com/api/memories/metrics
period_days
integer format: int32

Window in days, clamped server-side to 1..=90 (default 7).

Memory-pipeline Messbrett counters for the workspace and period

Media typeapplication/json

One workspace’s memory-pipeline counters over a period. Every field is a raw count; consumers derive: admission rate = (tier0_filed + distill_nothing + distill_covered) / (that + admission_rejected), distillation success = distill_distilled / (distill_distilled + distill_unavailable), inbox decision rate = proposals_created_decided / proposals_created (BOTH sides are the items created in the period — dividing the whenever-created proposals_decided by proposals_created compares two populations and can exceed 100 %), memories per injection = injected_memories / injections, citations per injection = citations / injections.

object
admission_rejected
required

Tier-0 admission form-filter rejections in the period (audit-sourced — before #1228 a rejection left no durable trace at all).

integer format: int64
citations
required

[mem:<uuid>] citations recorded in the period.

integer format: int64
distill_covered
required

#1228 slice 2 — distiller COVERED verdicts in the period: the run’s fact was already stated by an existing memory the distiller was shown (NOOP <id>; audit-sourced). Counts in the admission denominator beside NOTHING.

integer format: int64
distill_distilled
required

… of which the distillation succeeded.

integer format: int64
distill_nothing
required

Distiller NOTHING verdicts in the period (admitted by form, declined by substance; audit-sourced).

integer format: int64
distill_unavailable
required

… of which the distillation degraded (the un-distilled summary was filed, flagged unavailable).

integer format: int64
distill_unavailable_reason

The most frequent recorded reason among the degraded ones (03.09.2026), so a 0 % tile can name whether it looks at a configuration backlog (stage: all 35 were the pre-fix provider 403) or at a broken distiller. null when nothing degraded or no reason was recorded.

string | null
distill_unavailable_reason_count
required

How many of the degraded rows carry that reason.

integer format: int64
injected_memories
required

Total memories those injections carried.

integer format: int64
injections
required

Task context-block injections in the period (one per launched task that received a memory block).

integer format: int64
period_days
required

The period actually used (after clamping to 1..=90).

integer format: int32
proposals_created
required

Review items of ANY action created in the period.

integer format: int64
proposals_created_decided
required

Of the items CREATED in the period, how many are decided by now — the cohort-consistent numerator for the decision rate (a subset of proposals_created, so the quotient is bounded by 1).

integer format: int64
proposals_decided
required

Review items decided (approved or rejected) in the period, whenever they were created — inbox THROUGHPUT, not a rate numerator.

integer format: int64
proposals_pending_total
required

Review items pending RIGHT NOW (all-time inbox load, not a rate).

integer format: int64
tier0_filed
required

Tier-0 closeout_standard proposals filed in the period.

integer format: int64
Examplegenerated
{
"admission_rejected": 1,
"citations": 1,
"distill_covered": 1,
"distill_distilled": 1,
"distill_nothing": 1,
"distill_unavailable": 1,
"distill_unavailable_reason": "example",
"distill_unavailable_reason_count": 1,
"injected_memories": 1,
"injections": 1,
"period_days": 1,
"proposals_created": 1,
"proposals_created_decided": 1,
"proposals_decided": 1,
"proposals_pending_total": 1,
"tier0_filed": 1
}

Structured client error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden license_required license_expired bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited too_many_requests quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Authentication required

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden license_required license_expired bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited too_many_requests quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Permission denied

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden license_required license_expired bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited too_many_requests quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Structured server error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden license_required license_expired bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited too_many_requests quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}