Providers & sign-in
App-level LLM providers, model lists, agent provider configs and subscription sign-in (ChatGPT, Grok).
On this page
App providers and which agents use them
/runtime/providersResponses
| Status | Description | Body | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Providers (hasApiKey only) | ProviderDiagnostics | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
agentUsagerequiredarray<object> | 7 fields of | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
agentIdrequired | string | |
handle | string | |
namerequired | string | |
providerIdrequired | string | |
modelIdrequired | string | |
sourcerequired | string | |
credentialStoragerequired | string | null |
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl "http://127.0.0.1:7385/runtime/providers" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"Add an API-key provider
/runtime/providersFor every agent on this daemon. The key goes to the daemon secret store (OS keychain, or the owner's passphrase file), never the settings file, and is never returned: the settings entry carries apiKeyStorage: "secret-store" and an empty apiKey, and the daemon fills the key in when it resolves the provider. openai-compatible needs baseUrl (apiKey optional, for local servers); subscriptions (ChatGPT, Grok) sign in instead (400 subscription_type). The name is made unique (OpenRouter 2); the first provider becomes the default.
Request bodyapplication/json · AddProviderBody · required
| Field | Type | Description |
|---|---|---|
typerequired | string | |
name | string | |
baseUrl | string | Required for openai-compatible |
defaultModel | string | |
preset | string | Provider catalog key (e.g. groq) |
apiKey | string | Required except for openai-compatible. Stored in the daemon secret store, never returned. |
Responses
| Status | Description | Body | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 201 | Added | AddProviderResponse | ||||||||||||||||||||||||||||||||||||
defaultProviderIdrequiredstring | null | | |||||||||||||||||||||||||||||||||||||
Errors 400 · 401 · 403 · 405 · 409 · 500
| 400 | Invalid body (bad_type, subscription_type, api_key_required, base_url_required, bad_base_url) | |
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin | |
| 405 | Settings store is read-only (read_only) | |
| 409 | The secret store is locked or not set up (secret_store_locked): set up or unlock the owner identity first | |
| 500 | Saving failed (save_failed) |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/runtime/providers" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"anthropic","apiKey":"sk-ant-…"}'Remove an app provider and its stored key
/runtime/providers/{id}The default moves to the next provider.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string | App provider id (settings.providers[].id) |
Responses
| Status | Description | Body | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Removed | RemoveProviderResponse | ||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||
Errors 401 · 403 · 404 · 405
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin | |
| 404 | Unknown provider (not_found) | |
| 405 | Settings store is read-only (read_only) |
Error bodies use the error format.
Example
curl -X DELETE "http://127.0.0.1:7385/runtime/providers/custom%3Aab12cd" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"List a provider's models
/runtime/modelsApp providers, or an agent's own provider (and its agent-scoped key) with agentId. Remote failures come back as 200 { models: [], error }.
Query parameters
| Name | Type | Description |
|---|---|---|
providerrequired | string | Provider id |
agentId | string | Resolve the provider in this agent's config |
Responses
| Status | Description | Body | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Models | ModelsResponse | |||||||||
| |||||||||||
Errors 400 · 401 · 403
| 400 | Invalid request: missing or malformed field, query parameter or body. A body Fastify cannot parse gets Fastify's own shape (statusCode, code, error, message).bad_requestFST_ERR_CTP_EMPTY_JSON_BODY | |
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl "http://127.0.0.1:7385/runtime/models?provider=anthropic" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"provider": "anthropic",
"models": [
"claude-sonnet-4-5",
"claude-opus-4-1"
]
}Sign-in and API-key status of every provider
/runtime/authResponses
| Status | Description | Body | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Auth status | AuthDiagnostics | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grokrequiredobject | 5 fields of | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
authenticatedrequired | boolean | |
email | string | |
expiresAt | integer | Epoch ms |
flowPending | boolean | |
flowError | string |
providersrequired5 fields of providers
idrequired | string | |
typerequired | string | |
namerequired | string | |
credentialStoragerequired | string | |
hasApiKeyrequired | boolean |
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl "http://127.0.0.1:7385/runtime/auth" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"ChatGPT subscription sign-in status
/auth/chatgpt/statusResponses
| Status | Description | Body | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Status | SubscriptionAuthStatus | |||||||||||||||
| |||||||||||||||||
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl "http://127.0.0.1:7385/auth/chatgpt/status" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"authenticated": true,
"email": "me@example.com",
"expiresAt": 1790003600000
}Start a ChatGPT subscription sign-in
/auth/chatgpt/startThe daemon keeps its own subscription session, separate from Studio's. ChatGPT uses a loopback OAuth redirect, so the callback server must run where the browser is. loopback (default) serves it in the daemon: open authUrl, then poll GET /auth/chatgpt/status. relay (for a remote daemon) keeps the PKCE verifier in the daemon while the caller serves the callback on its own loopback redirectUri (required, loopback only) and posts code + state to /auth/chatgpt/complete within 10 minutes.
Request bodyapplication/json · ChatGptAuthStartRequest · optional
| Field | Type | Description |
|---|---|---|
mode | string | Where the OAuth callback is served (default loopback) |
redirectUri | string | Relay mode only, and required there: the caller's own loopback callback URL |
Responses
| Status | Description | Body | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Flow started; open authUrl | ChatGptAuthStartResponse | |||||||||||||||||||||
| |||||||||||||||||||||||
Errors 400 · 401 · 403
| 400 | Invalid request: missing or malformed field, query parameter or body. A body Fastify cannot parse gets Fastify's own shape (statusCode, code, error, message).bad_requestFST_ERR_CTP_EMPTY_JSON_BODY | |
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/auth/chatgpt/start" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "relay",
"redirectUri": "http://127.0.0.1:1455/auth/callback"
}'Complete a relayed ChatGPT sign-in
/auth/chatgpt/completeExchanges the code captured by the caller's callback server. Each flowId is single-use and expires 10 minutes after start; an unknown or expired flowId, a mismatched state or a failed token exchange answers 400. After any sign-in (loopback, relay or Grok) every loaded loop in error from an auth failure of that provider type returns to idle and emits agent.recovered; the failed turn is not re-run.
Request bodyapplication/json · ChatGptAuthCompleteRequest · required
| Field | Type | Description |
|---|---|---|
flowIdrequired | string | |
coderequired | string | Authorization code from the caller's OAuth callback |
staterequired | string |
Responses
| Status | Description | Body | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Signed in | ChatGptAuthCompleteResponse | ||||||||||||||||||||||||||||||||||||||||||
recoveredrequiredarray<AuthRecovery> | Loops that left 4 fields of | |||||||||||||||||||||||||||||||||||||||||||
agentIdrequired | string | |
filePathrequired | string | null | |
looprequired | string | |
noticerequired | string |
Errors 400 · 401 · 403
| 400 | Invalid request: missing or malformed field, query parameter or body. A body Fastify cannot parse gets Fastify's own shape (statusCode, code, error, message).bad_requestFST_ERR_CTP_EMPTY_JSON_BODY | |
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/auth/chatgpt/complete" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{"flowId":"string","code":"string","state":"string"}'Sign out of ChatGPT
/auth/chatgpt/logoutNo body.
Responses
| Status | Description | Body | |||
|---|---|---|---|---|---|
| 200 | Signed out | SuccessResponse | |||
| |||||
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/auth/chatgpt/logout" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"success": true
}Grok (xAI) subscription sign-in status
/auth/grok/statusflowPending while a device-code flow runs; a failed flow surfaces flowError.
Responses
| Status | Description | Body | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Status | SubscriptionAuthStatus | |||||||||||||||
| |||||||||||||||||
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl "http://127.0.0.1:7385/auth/grok/status" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"authenticated": true,
"email": "me@example.com",
"expiresAt": 1790003600000
}Start a Grok device-code sign-in
/auth/grok/startOAuth device-code flow (RFC 8628): no localhost callback, so it works against a remote daemon. Open verificationUriComplete (or verificationUri and enter userCode) in any browser, then poll GET /auth/grok/status; the daemon polls xAI in the background. No body.
Responses
| Status | Description | Body | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Flow started | GrokAuthStartResponse | |||||||||||||||
| |||||||||||||||||
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/auth/grok/start" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"started": true,
"userCode": "ABCD-EFGH",
"verificationUri": "https://accounts.x.ai/device",
"verificationUriComplete": "https://accounts.x.ai/device?code=ABCD-EFGH",
"expiresIn": 900
}Sign out of Grok
/auth/grok/logoutNo body.
Responses
| Status | Description | Body | |||
|---|---|---|---|---|---|
| 200 | Signed out | SuccessResponse | |||
| |||||
Errors 401 · 403
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/auth/grok/logout" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"{
"success": true
}Attach or update a provider in the agent config
/agents/{id}/providersPath parameters
| Name | Type | Description |
|---|---|---|
idrequired | string | Loaded agent: its id, handle or name. |
Request bodyapplication/json · ProviderAttachBody · required
| Field | Type | Description | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
providerrequired | object | A provider carried in the agent's own config. Its API key is a credential (PUT …/providers/{providerId}/credential), never part of this object. | |||||||||||||||||||||||||||||||||
8 fields of | |||||||||||||||||||||||||||||||||||
idrequired | string |
| ||||||
typerequired | string | |||||||
namerequired | string | |||||||
baseUrlrequired | string | |||||||
preset | string | |||||||
defaultModel | string | |||||||
params | array<object> | |||||||
2 fields of | ||||||||
keyrequired | string | |
valuerequired | string |
requestDelayMsResponses
| Status | Description | Body | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Attached | ProviderAttachResponse | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
paramsarray<object> | 2 fields of | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
keyrequired | string | |
valuerequired | string |
provider_paramsinstructionsrequiredcontextrequiredcompact_threshold, audit, dynamic_instructions
toolsrequiredTool declarations
5 fields of tools
namerequired | string | |
enabledrequired | boolean | |
visible | boolean | |
restricted | boolean | |
locked | boolean |
triggersrequiredon_startup, on_inbox, on_outbox, on_file_change, on_chat, on_timer, on_tool_call, on_task_create, on_task_complete, on_logs, on_llm_call
3 fields of triggers
enabledrequired | boolean | ||||||||||||||||||||||||||||||||||
targetsrequired | array<TriggerTarget> | ||||||||||||||||||||||||||||||||||
11 fields of | |||||||||||||||||||||||||||||||||||
scoperequired | string | |
lambda | string | System scope: |
command | string | System scope: shell command (alternative to lambda) |
warm | boolean | |
filter | object | |
debounce_ms | integer | |
interval_ms | integer | |
batch_ms | integer | |
batch_count | integer | |
locked | boolean | |
loop | string | Cognition loop this target wakes; absent = main |
lockedsecurityrequiredlimitsrequiredmessagingrequiredmode (proactive | respond_only | listen_only), receive, network, …
mcp2 fields of mcp
serversrequired | array<McpServerConfig> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 fields of | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
namerequired | string | ||||||||||
transportrequired | string | ||||||||||
command | string | ||||||||||
args | array<string> | ||||||||||
url | string | ||||||||||
oauth | boolean | ||||||||||
headers | map<string, string> | ||||||||||
header_env | array<object> | ||||||||||
bearer_token_env_var | string | ||||||||||
env | map<string, string> | ||||||||||
env_keys | array<string> | ||||||||||
env_schema | array<object> | ||||||||||
npm_package | string | ||||||||||
pypi_package | string | ||||||||||
source | string | ||||||||||
available_tools | array<object> | ||||||||||
tool_call_timeout_ms | integer | ||||||||||
restricted | boolean | ||||||||||
run_location | string | ||||||||||
credential_files | array<object> | ||||||||||
3 fields of | |||||||||||
pathrequired | string | |
required | boolean | |
write_back | boolean |
new_tools_restrictedadaptersChannel adapters by type
4 fields of adapters
enabledrequired | boolean | ||||
config | object | Adapter-specific settings (no secrets: tokens are credentials) | |||
policy | object | ||||
limits | object | ||||
1 field of | |||||
max_attachment_size | integer | Bytes |
providers8 fields of providers
idrequired | string |
| ||||||
typerequired | string | |||||||
namerequired | string | |||||||
baseUrlrequired | string | |||||||
preset | string | |||||||
defaultModel | string | |||||||
params | array<object> | |||||||
2 fields of | ||||||||
keyrequired | string | |
valuerequired | string |
requestDelayMsloopsInner (side) loops; main is implicit
8 fields of loops
namerequired | string | |
goalrequired | string | Becomes the loop's instructions |
enabledrequired | boolean | |
autostart | boolean | |
autonomous | boolean | |
model | object | |
compact_threshold | integer | null | |
tools | array<string> | Absolute allow-list, intersected with the host's enabled tools |
ws_connectionsservinglocked_fieldsmetadatarequiredcreated_at, updated_at, author, tags, version
Errors 400 · 401 · 403 · 404 · 500
| 400 | Invalid request: missing or malformed field, query parameter or body. A body Fastify cannot parse gets Fastify's own shape (statusCode, code, error, message).bad_requestFST_ERR_CTP_EMPTY_JSON_BODY | |
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin | |
| 404 | Unknown agent (or the named resource: loop, task, file, …) | |
| 500 | Unexpected runtime failure |
Error bodies use the error format.
Example
curl -X POST "http://127.0.0.1:7385/agents/agent-1/providers" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider": {
"id": "custom:ab12cd",
"type": "openai-compatible",
"name": "Local LLM",
"baseUrl": "http://127.0.0.1:11434/v1"
}
}'Detach a provider and delete its credentials
/agents/{id}/providers/{providerId}Removes the provider config and every provider:{providerId}:* identity row.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string | Loaded agent: its id, handle or name. |
providerIdrequired | string | Provider id in the agent config |
Responses
| Status | Description | Body | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 200 | Detached | ProviderDetachResponse | |||||||||||||||
| |||||||||||||||||
Errors 401 · 403 · 404 · 500
| 401 | Missing or wrong bearer token (unauthorized) | |
| 403 | The request guard refused it: Host header not allowed (host_not_allowed, DNS-rebinding protection) or a browser cross-site request (cross_origin)host_not_allowedcross_origin | |
| 404 | Unknown agent (or the named resource: loop, task, file, …) | |
| 500 | Unexpected runtime failure |
Error bodies use the error format.
Example
curl -X DELETE "http://127.0.0.1:7385/agents/agent-1/providers/anthropic" \
-H "Authorization: Bearer $ADF_DAEMON_TOKEN"