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 asmodelon a turn. The shape depends on the harness: on Hermes a model of thedefault_provider(or acustomentry) is the bare id and a model of any other configured provider is@provider:model; on OpenClaw every id isprovider/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.nousoranthropic. Hermes alias entries (source: "alias") reportaliaseshere 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 readsalias -> target).source: where the entry comes from.catalogis a model of a built-in provider,customa model of a user-defined custom provider,currentthe configured default when no listed provider contains it, andaliasan entry from Hermes’model_aliases. OpenClaw entries are alwayscatalog.is_default:truefor the default model. Alwaysfalseon 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
modelandproviderit names, or on the instance default (default_modelanddefault_providerabove) 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(aprovider/modelid from the list) sets it on the session, and later turns that omitmodelkeep running on it; a turn that omitsmodelnever clears it.provideris ignored, since the provider is part of the model id.