Skip to content
Hoody.com

Get and patch the agent’s effective settings, manage model-fusion composites, and configure BYOA / ACP backend agents and their secrets. This page covers the read/write surface of settings.json, the persisted fusion.json, and the per-backend acp configuration that arms a delegated-session backend.

Settings, fusion, and ACP per-agent secret routes have no realm dimension; sending any realm or container scope header to them returns 400 realm_scope_unsupported. The ACP status, enablement, and model routes accept the X-Hoody-Realm header (or its ?realm= alias); on those routes realm_scope_unsupported fires only when the agent is pinned to a different realm.

Returns the effective merged settings (home, project, and settings.local.json combined by a top-level merge) plus the home-layer object that patchSettings mutates.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves against.
Terminal window
curl "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/settings" \
-H "Authorization: Bearer <token>"

Applies a shallow top-level merge into the home settings.json. A null value deletes a key. The merge is top-level only: sending {"features":{...}} replaces the whole features object. Returns the resulting home object.

This endpoint takes no path, query, or header parameters.

FieldTypeRequiredDescription
patchobjectYesTop-level keys to merge into the home settings.json (a null value deletes the key).
Terminal window
curl -X PATCH "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/settings" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"patch":{"locale":"en-US","theme":"dark"}}'

These routes configure the BYOA delegated-session backend (claude). The status route folds X-Hoody-Config-Dir and X-Hoody-Cwd; for REMOTE BYOA, a bound X-Hoody-Container switches the report to on-container detection/login probing, and X-Hoody-Realm scopes that probe.

Reports the BYOA delegated-session backend availability. A fixed status object, not a paginated collection.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local). Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector: global or a 24-hex id (also accepted as ?realm=).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/acp/agents" \
-H "Authorization: Bearer <token>"

PUT /api/v1/agent/acp/agents/{agent}/enabled

Section titled “PUT /api/v1/agent/acp/agents/{agent}/enabled”

Arms or disarms a BYOA ACP backend for delegated sessions. A delegated session (POST /api/v1/agent/sessions with backend:"acp") is refused by the daemon while its backend is disabled, so this is the prerequisite for the whole delegated-session capability on a host configured over HTTP. Writes tools.acp_agents.<agent>.enabled in settings.json. 404 unknown_agent for anything that is not a known BYOA backend (claude).

The SDK reaches this same operation through 2 named methods:

  • client.agent.acp.enable(agent) sets body enabled=true.
  • client.agent.acp.disable(agent) sets body enabled=false.
NameInTypeRequiredDescription
agentpathstringYesThe agent.
X-Hoody-RealmheaderstringNoPer-request realm selector: “global” (not tied to a realm) or a 24-hex realm id (also accepted as ?realm=). On a session route it names the realm the session is looked up in: a session in another realm, or in a realm this login does not serve, is 404 not_found. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes, and for any other realm on an agent pinned to one realm.
realmquerystringNoPer-request realm selector, the in:query alias of the X-Hoody-Realm header (read only when the header is absent): “global” (not tied to a realm) or a 24-hex realm id. On a session route it names the realm the session is looked up in: a session in another realm, or in a realm this login does not serve, is 404 not_found. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes, and for any other realm on an agent pinned to one realm.
FieldTypeRequiredDescription
enabledbooleanNotrue arms the backend; false disarms it. Defaults to true when omitted.
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/acp/agents/claude/enabled" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"enabled":true}'

PUT /api/v1/agent/acp/agents/{agent}/model

Section titled “PUT /api/v1/agent/acp/agents/{agent}/model”

Sets the default model (and reasoning effort) a BYOA ACP backend runs on. These are the values the daemon passes to the backend at connect; a delegated session started without an explicit model inherits them. An empty value clears the pin and returns the backend to its own default. 404 unknown_agent for anything that is not a known BYOA backend (claude).

NameInTypeRequiredDescription
agentpathstringYesThe agent.
X-Hoody-RealmheaderstringNoPer-request realm selector: “global” (not tied to a realm) or a 24-hex realm id (also accepted as ?realm=). On a session route it names the realm the session is looked up in: a session in another realm, or in a realm this login does not serve, is 404 not_found. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes, and for any other realm on an agent pinned to one realm.
realmquerystringNoPer-request realm selector, the in:query alias of the X-Hoody-Realm header (read only when the header is absent): “global” (not tied to a realm) or a 24-hex realm id. On a session route it names the realm the session is looked up in: a session in another realm, or in a realm this login does not serve, is 404 not_found. Rejected (400 realm_scope_unsupported) on active-only / no-realm routes, and for any other realm on an agent pinned to one realm.
FieldTypeRequiredDescription
modelstringNoBackend model id or alias. Empty clears the pin.
effortstringNoReasoning effort (backend-specific; empty clears).
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/acp/agents/claude/model" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-5","effort":"high"}'

PUT /api/v1/agent/acp/agents/{agent}/secrets/{key}

Section titled “PUT /api/v1/agent/acp/agents/{agent}/secrets/{key}”

Stores (or clears) one per-backend env value for a BYOA ACP agent in a dedicated owner-only secrets file inside the container. The agent settings hold only the env key names; the value lives only in that secrets file. An empty value deletes (unsets) the reference. Access is decided by the container’s proxy permission policy.

NameInTypeRequiredDescription
agentpathstringYesThe agent.
keypathstringYesThe key.
FieldTypeRequiredDescription
valuestringNoThe env secret value. Empty string clears (unsets) the reference. Stored only in the agent’s owner-only secrets file.
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/acp/agents/claude/secrets/ANTHROPIC_API_KEY" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"value":"sk-ant-EXAMPLE-redacted"}'

The fusion routes manage model-fusion composites persisted to fusion.json. Composites are addressed by slug. A composite with no usable slug, or one of two entries sharing a slug, cannot be deleted or repaired through this API: fix or remove those entries by editing fusion.json inside the container.

Lists the persisted model-fusion composites. Pass ?include_invalid=true to also receive the entries that failed validation as a top-level invalid array beside items (each with the failure reason and its stable raw-file index; never mixed into or paginated with the selectable items) so a broken composite is diagnosable.

NameInTypeRequiredDescription
include_invalidquerybooleanNoWhen true, also return composites that failed validation as a top-level invalid array beside items. An entry with no usable slug, or a duplicate slug, cannot be deleted through this API.
pagequeryintegerNo1-based page number for pagination.
limitqueryintegerNoMaximum items per page (0 = no pagination).
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
Terminal window
curl "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/settings/fusion?page=1&limit=50" \
-H "Authorization: Bearer <token>"

Creates or updates a model-fusion composite keyed by slug. The composite is described by the spec object in the body. The persisted key is derived from spec.name (lowercased, separators collapsed to -); the path {slug} must normalize to the same slug or the request is rejected (400 slug_mismatch): the path cannot rename what the body describes. Structural invariants (name/method/members, cycle guard, non-zero context window) are validated server-side.

NameInTypeRequiredDescription
slugpathstringYesThe slug.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
FieldTypeRequiredDescription
specobjectYesThe fusion definition (name, method, members, …).
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/settings/fusion/balanced-ensemble" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"spec": {
"name": "Balanced Ensemble",
"method": "weighted",
"members": []
}
}'

DELETE /api/v1/agent/settings/fusion/{slug}

Section titled “DELETE /api/v1/agent/settings/fusion/{slug}”

Removes a model-fusion composite by slug.

NameInTypeRequiredDescription
slugpathstringYesThe slug.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
Terminal window
curl -X DELETE "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/settings/fusion/balanced-ensemble" \
-H "Authorization: Bearer <token>"