Endpoints
Read the catalog rather than hard coding a model id. The set moves: sixteen bases are served today, and a model added to a base appears here before any page of ours could say so.
GET /v1/modelsreturns the global model catalog keyed by backend.GET /v1/harnesses/{id}/modelsreturns the model set allowed for one configured agent.GET /v1/basesreturns the base harnesses, each with its label, default model and allowed models, plus the runtime defaults every turn starts from.
Backend map
GET /v1/models is keyed by backend, and GET /v1/bases is keyed by base id. The two agree except for Claude Code, whose base id is claude-code and whose backend key is claude.
The sixteen base ids are codex, claude-code, hermes, pi, omp, dsh, opencode, aider, kimi, openhands, cheetahclaws, systemone, qwen, gemini, cline and goose.
{
"backends": {
"codex": {
"default": "<id>",
"models": [{ "id": "", "label": "", "backend": "", "available": true, "default": false }]
},
"claude": { "default": "<id>", "models": [] },
"hermes": { "default": "<id>", "models": [] }
}
}Runtime defaults
GET /v1/bases carries a runtimeDefaults object beside the base list. It is what a turn starts from when the configured agent and the request both leave a budget unset.
- maxStep
- 400
- timeoutSeconds
- 7200
- maxCostUsd
- 10.0
Both catalogs this page documents, GET /v1/models and the per-agent GET /v1/harnesses/{id}/models, are model discovery endpoints the Unified Harness Protocol assigns to its Harnesses chapter. See models in UHP's Harnesses chapter.
Ready to run this against a live workspace? Keys take under a minute.

