post_api_models_catalog_refresh
const url = 'https://example.com/api/models/catalog/refresh';const options = {method: 'POST'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/models/catalog/refreshResponses
Section titled “Responses”object
object
object
Axis 2 (mig 272) — the model’s harness-native available_modes (Claude
['build','plan']), joined from model_capabilities. None until a probe has
landed; the FE then hides the Mode picker (degrade).
Mig 358 — enforced | advisory | unsupported: whether a concurrency
ceiling structurally holds on this harness (codex takes a real per-session
cap) or is only stated to the model. The max-subagents control labels itself
from this, so a wish is never displayed as a guarantee.
Mig 358 — the measured detail behind [Self::subagent_cap_level].
Mig 358 — measured | documented: whether the claim was verified against the
running CLI or read off the harness’s own docs.
Mig 358 — WHY [Self::supports_subagents] is what it is, quoted verbatim from
the runner’s harness registry. The FE renders this instead of inventing an
explanation, so a hidden or disabled control always says why.
Mig 358 — the seam the SUBAGENTS axis reaches this harness through. None
while supports_subagents is Some(true) is the honest “the harness can, we
do not drive it yet” state: the FE shows the toggle as a no-op rather than
pretending it works or hiding a real capability.
#626 D4.0 — the model’s HARNESS-NATIVE effort ladder (advertised order), joined
from the model_capabilities table (the runner’s task-START capability probe).
None until a probe has landed for this (provider, model_id) — the FE then
degrades the EffortSlider to the canonical 5-step scale. The top stage
(ultracode/ultra) is the last element when the harness presents it.
#626 D4.0 — the model’s supports_fast_mode capability flag, joined from
model_capabilities. None until a probe has landed.
Axis 1 (mig 272; TRI-STATE since mig 358) — the model’s supports_subagents
capability flag, joined from model_capabilities.
Some(true) — a probe established that the harness has subagents.
Some(false) — a probe established that it genuinely has none; the FE
disables the toggle and shows subagent_reason.
None — no probe has landed. UNKNOWN: the FE offers the toggle with
an “unverified” hint rather than hiding it, because hiding
an unmeasured axis is indistinguishable from hiding an
unsupported one — the ambiguity this tri-state removes.
(The former note “Some(true) only on Claude in v1” was already false when it
was written and is gone: codex, opencode, openclaude, gemini/agy, qwen,
qwen-code, openrouter and copilot all report true — eight harnesses, several
of them measured against the pinned CLI. See harness-kit/subagents.ts.)
Examplegenerated
{ "fetched_at": "2026-04-15T12:00:00Z", "last_error": "example", "providers": [ { "id": "example", "models": [ { "available_modes": [ "example" ], "context": 1, "cost": { "cache_read": 1, "cache_write": 1, "input": 1, "note": "example", "output": 1 }, "id": "example", "modalities_input": [ "example" ], "modalities_output": [ "example" ], "name": "example", "reasoning": true, "subagent_cap_level": "example", "subagent_cap_note": "example", "subagent_evidence": "example", "subagent_reason": "example", "subagent_wired_by": "example", "supported_effort_levels": [ "example" ], "supports_fast_mode": true, "supports_subagents": true, "tool_call": true } ], "name": "example" } ], "refresh_interval_hours": 1, "source": "example"}Structured client error
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Authentication required
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Permission denied
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}Structured server error
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
Machine-readable, stable error code.
Present only on a quota-exceeded 403 — the inline upgrade-CTA payload.
object
The entitlement feature key that was hit, e.g. apps.max_count.
The plan’s limit for this key.
Where to send the user to upgrade.
Current usage (count or bytes, per the key).
Human-readable message (the server’s English text; the client may localize
by code).
Example
{ "code": "not_found"}