Skip to content
Hoody.com

This page documents the agent’s model and provider registry, plus the credential-management endpoints used to bind LLM providers. Use these routes to enumerate bindable models and providers, to read and manage a provider’s auth status (API key vs. OAuth), to drive an OAuth login flow, and to maintain a pooled OAuth account pool per provider. All routes live under the agent service on the container host https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com.

Returns the merged model catalogue: every catalogued provider model alongside every selectable fusion composite (fusion/<slug>). Each entry carries source: "provider" or source: "fusion". A composite’s context_window is the minimum across its catalogued members, and composites carry no per-token price. Fusion composites are resolved against the cwd/config_dir scope honored by the X-Hoody-Cwd / X-Hoody-Config-Dir headers; only selectable composites appear — broken composites are excluded.

NameInTypeRequiredDescription
pagequeryintegerNo1-based page number for pagination.
limitqueryintegerNoMaximum items per page (0 = no pagination).
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves.
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=). Rejected (400 realm_scope_unsupported) on active-only / no-realm routes.
realmquerystringNoIn-query alias of the X-Hoody-Realm header (read only when the header is absent).
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/models?page=1&limit=50" \
-H "Authorization: Bearer <HOODY_TOKEN>"

Returns one catalogued model by its full spec (e.g. anthropic/claude-opus-4-8) or a fusion composite by its fusion/<slug> spec. The spec itself contains a slash, so it is passed URL-encoded or as the trailing path segment (models.get). A per-request realm header (and X-Hoody-Container) returns 400 realm_scope_unsupported.

NameInTypeRequiredDescription
specpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope: the .hoody project layer / record cwd / tool+workflow cwd. Required by routes that resolve a cwd.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override selecting which on-disk .hoody install a stateless read/write resolves.
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. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/models/anthropic%2Fclaude-opus-4-8" \
-H "Authorization: Bearer <HOODY_TOKEN>"

Lists every catalogued LLM provider (id, display name, model prefix, wire format, model count) from the merged providers.json catalogue. The catalogue is process-wide with no realm dimension, so a per-request realm header returns 400 realm_scope_unsupported.

NameInTypeRequiredDescription
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.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported) on global-no-realm routes.
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers?page=1&limit=50" \
-H "Authorization: Bearer <HOODY_TOKEN>"

Returns one provider’s metadata plus its full catalogued model list (providers.get).

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic" \
-H "Authorization: Bearer <HOODY_TOKEN>"

Reports a provider’s stored-credential state: whether an API key or OAuth login is stored, the effective default method, the passwordless flag, and the secret-free OAuth account pool. Any stored API key is surfaced as a 10-character prefix only — the full key is never returned.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth" \
-H "Authorization: Bearer <HOODY_TOKEN>"

GET /api/v1/agent/providers/{id}/auth/accounts

Section titled “GET /api/v1/agent/providers/{id}/auth/accounts”

Lists the secret-free OAuth account pool for a provider: key, label, active flag, cooldown — never a token. Returns 422 oauth_unsupported when the provider has no OAuth flow.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
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.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/accounts" \
-H "Authorization: Bearer <HOODY_TOKEN>"

POST /api/v1/agent/providers/{id}/auth/accounts

Section titled “POST /api/v1/agent/providers/{id}/auth/accounts”

Begins an OAuth login that adds to the provider’s account pool. Returns a {job_id}; drive it with the same poll/submit endpoints used by startProviderOAuth. Returns 422 oauth_unsupported when the provider has no OAuth flow.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.

This endpoint accepts no documented body fields.

Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/accounts" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{}'

PUT /api/v1/agent/providers/{id}/auth/accounts/{key}/active

Section titled “PUT /api/v1/agent/providers/{id}/auth/accounts/{key}/active”

Makes one pooled OAuth account active for a provider. The {key} path value names the account; the trailing /active sub-resource names the activation verb. Returns the resulting secret-free account pool. Returns 422 oauth_unsupported.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
keypathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.

This endpoint accepts no documented body fields.

Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/accounts/acct_work/active" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{}'

DELETE /api/v1/agent/providers/{id}/auth/accounts/{key}

Section titled “DELETE /api/v1/agent/providers/{id}/auth/accounts/{key}”

Drops one pooled OAuth account for a provider. The {key} path value names the account. Returns the resulting secret-free account pool. Returns 422 oauth_unsupported.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
keypathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X DELETE "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/accounts/acct_work" \
-H "Authorization: Bearer <HOODY_TOKEN>"

POST /api/v1/agent/providers/{id}/auth/oauth

Section titled “POST /api/v1/agent/providers/{id}/auth/oauth”

Begins an interactive OAuth login for a provider and returns {success, job_id, verification_uri, user_code?}. Drive the flow with GET .../oauth/{job} (poll) and, for a manual/PKCE code, POST .../oauth/{job}/code (submit). The job carries only the non-secret verification URL and user code — never a token. Returns 422 oauth_unsupported.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
NameTypeRequiredDescription
add_accountbooleanNoWhen true, the login ADDS to the provider’s OAuth account pool (LoginAddAccount) instead of replacing the primary login.
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/oauth" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{}'

GET /api/v1/agent/providers/{id}/auth/oauth/{job}

Section titled “GET /api/v1/agent/providers/{id}/auth/oauth/{job}”

Polls an in-flight OAuth login job. Reports state: "pending" until the user authorizes, then state: "complete" (with the now-current secret-free auth status) or state: "error" (with a scrubbed error message).

Returns 404 job_not_found when the job is unknown or expired; 422 oauth_unsupported when the provider has no OAuth flow.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
jobpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X GET "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/oauth/oauth-job-7f3a9b" \
-H "Authorization: Bearer <HOODY_TOKEN>"

POST /api/v1/agent/providers/{id}/auth/oauth/{job}/code

Section titled “POST /api/v1/agent/providers/{id}/auth/oauth/{job}/code”

Supplies the authorization code (or full redirect URL) a blocked OAuth flow is waiting for — the explicit code-exchange step for manual-paste / PKCE flows. Idempotent-safe: a second submit on an already-fed job is a no-op (submitted: false). Returns 404 job_not_found when the job is unknown or expired.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
jobpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
NameTypeRequiredDescription
codestringYesThe authorization code (or the full redirect URL) to complete the exchange.
Terminal window
curl -X POST "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/oauth/oauth-job-7f3a9b/code" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"code": "auth-code-xyz123"}'

DELETE /api/v1/agent/providers/{id}/auth/oauth

Section titled “DELETE /api/v1/agent/providers/{id}/auth/oauth”

Removes a provider’s stored OAuth credentials. Idempotent. Returns the resulting secret-free auth status. Returns 422 oauth_unsupported when the provider has no OAuth flow.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X DELETE "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/oauth" \
-H "Authorization: Bearer <HOODY_TOKEN>"

PUT /api/v1/agent/providers/{id}/auth/api-key

Section titled “PUT /api/v1/agent/providers/{id}/auth/api-key”

Stores a provider’s API key in the 0600 atomic ~/.hoody/.env keychainless store. The key is written 0600-atomic and is never returned — the reply carries only the secret-free auth status (10-character prefix). Returns 422 auth_method_unsupported for a passwordless provider.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
NameTypeRequiredDescription
api_keystringYesThe provider API key. Stored in the 0600 ~/.hoody/.env store; the reply echoes only a prefix.
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/api-key" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"api_key": "sk-ant-api03-REPLACE_ME"}'

DELETE /api/v1/agent/providers/{id}/auth/api-key

Section titled “DELETE /api/v1/agent/providers/{id}/auth/api-key”

Removes a provider’s stored API key and its default-method marker. Idempotent. Returns the resulting secret-free auth status.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
Terminal window
curl -X DELETE "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/api-key" \
-H "Authorization: Bearer <HOODY_TOKEN>"

PUT /api/v1/agent/providers/{id}/auth/default

Section titled “PUT /api/v1/agent/providers/{id}/auth/default”

Sets the effective default credential method for a provider: api_key or oauth. The daemon validates the method against the provider’s capabilities and that a credential of that kind is actually stored (else 422). Returns 422 oauth_unsupported / auth_method_unsupported / credential_not_stored.

NameInTypeRequiredDescription
idpathstringYesPath identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container. Rejected (400) on routes with no container dimension.
X-Hoody-RealmheaderstringNoPer-request realm selector. Rejected (400 realm_scope_unsupported).
realmquerystringNoIn-query alias of the X-Hoody-Realm header.
NameTypeRequiredDescription
defaultstringYesThe default method: "api_key" or "oauth". Must be a method the provider supports AND has a stored credential for.
Terminal window
curl -X PUT "https://{projectId}-{containerId}-agent-1.{server}.containers.hoody.com/api/v1/agent/providers/anthropic/auth/default" \
-H "Authorization: Bearer <HOODY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"default": "api_key"}'