Skip to main content
The model is the LLM a turn runs on; the agent harness is the software driving it. This page lives on the instance URL, not the hosting API: the base is https://{instanceId}.agent37.app, with the same sk_live_ key sent as the X-Agent37-Key header. See Instance and preview URLs.

List models

GET /v1/models lists the models a harness can run, in the OpenAI list shape, { "object": "list", "data": [...] }, so any OpenAI-compatible client works against it. It reports on one harness: the instance default, or the one named by ?agent=, hermes, openclaw, claude-code, codex, grok, or opencode, and the response echoes which agent answered. An unknown ?agent= value is 400 validation_error, omitting it (or sending it empty) targets the instance default, and targeting a harness the instance was not provisioned with is 503 agent_unavailable. On Hermes the result is cached for about 60 seconds (the cache also clears when the Hermes config changes), so a newly available model can take up to a minute to appear. On OpenClaw the list is read live on every call. Claude Code lists five aliases, default, fable, opus, sonnet, and haiku, all with owned_by anthropic. Pass one as model on a turn; the usage bills to your own Anthropic account. Codex lists its own live model catalog, the gpt-5.x family. Pass an id as model on a turn, and set reasoning_effort per turn; ultra maps to Codex’s multi-agent mode. The usage bills to your own OpenAI account. OpenCode lists every model it can run as a provider/model id: agent37/default (the managed model, metered against your wallet like Hermes) plus every model of any provider you registered with an instance env key. Pass one as model on a turn; omit it and the turn runs on agent37/default. A bare or malformed id is rejected with model_error. reasoning_effort maps onto OpenCode’s per-model variant, clamped to what the target model advertises, with none omitting it. See Host OpenCode. Grok lists the models your xAI API key can run, the grok-4.x family; with no key set the list is empty. reasoning_effort maps onto Grok’s effort levels by name (ultra maps to max), and non-reasoning models ignore the knob. See Host Grok. What you get depends on the harness. Hermes lists the models of each provider it holds credentials for, plus custom providers, model aliases, and its configured default. OpenClaw lists its own configured LLM catalog as provider/model ids, with owned_by set to the provider; a provider whose OAuth login has gone idle stays listed, because OpenClaw refreshes it on the next turn. OpenClaw reports no default: default_model is null, default_provider is openclaw, and every entry has is_default: false.
string
Always "list".
string
Which harness this list is for, hermes, openclaw, claude-code, codex, grok, or opencode.
string | null
The model used when a turn does not name one. Hermes reports its configured default; OpenClaw keeps its default in its own config and reports null.
string | null
The provider of the default model on Hermes. On OpenClaw this is the literal string openclaw; read each model’s provider from its owned_by.
array
One entry per model. Each is an OpenAI-compatible model object plus a few additive fields a UI can group and label on:
  • id: the model id. Pass it as model on a turn. The shape depends on the harness: on Hermes a model of the default_provider (or a custom entry) is the bare id and a model of any other configured provider is @provider:model; on OpenClaw every id is provider/model.
  • object: always "model".
  • created: Unix seconds. We don’t track per-model creation time, so this is a stable placeholder (0).
  • owned_by: the upstream provider, e.g. nous or anthropic. Hermes alias entries (source: "alias") report aliases here instead of a provider.
  • label: a display name. OpenClaw returns the catalog’s alias or name; Hermes returns the upstream model id (an alias entry reads alias -> target).
  • source: where the entry comes from. catalog is a model of a built-in provider, custom a model of a user-defined custom provider, current the configured default when no listed provider contains it, and alias an entry from Hermes’ model_aliases. OpenClaw entries are always catalog.
  • is_default: true for the default model. Always false on OpenClaw, where the list carries no default.

Choosing a model per turn

model and provider are dials you set per turn on POST /v1/responses, and the response echoes what you sent (null when you sent nothing). What they do depends on the harness.
  • Hermes: the turn runs on the model and provider it names, or on the instance default (default_model and default_provider above) when it names none. A continuation does not inherit the previous turn’s choice, so send them on every turn that should not run on the default.
  • OpenClaw: a turn that names a model (a provider/model id from the list) sets it on the session, and later turns that omit model keep running on it; a turn that omits model never clears it. provider is ignored, since the provider is part of the model id.