POST /updateAgent
Update an agent
Base URL: https://www.taskade.com/api/v2
Authentication
Send a personal access token or an OAuth 2.0 access token as a bearer token. Create a personal access token at taskade.com/settings/api.
Authorization: Bearer tskdp_your_token_here
Request body
application/json
| Field | Type | Required | Description |
|---|---|---|---|
agentId |
string |
Yes | — |
name |
string |
No | — |
data |
object |
No | — |
data.commands |
object[] |
Yes | — |
data.commands[].name |
string |
Yes | Human-readable name of the command in title case. This should probably be a verb. |
data.commands[].description |
string |
No | Short summary for discovery (e.g. progressive disclosure / skill listing). The full instruction stays in prompt. |
data.commands[].prompt |
string |
Yes | Tell the agent what this command will do. It should be positioned as a direct instruction to the agent. At least 30 words. |
data.commands[].id |
string |
Yes | ID based on the name in snake case. |
data.commands[].mode |
string |
No | Allowed values: default, plan-and-execute-v1, plan-and-execute-v2. |
data.description |
string |
No | Role and purpose of agent, positioned as a direct instruction to the agent. Example: "You are a doctor that helps save lives.". At least 100 words. |
data.tone |
string |
No | Allowed values: authoritative, clinical, cold, confident, cynical, emotional, empathetic, formal, friendly, humourous, informal, ironic, optimistic, pessimistic, playful, sarcastic, serious, sympathetic, tentative, warm, creative, inspiring, casual. |
data.avatar |
object |
No | — |
data.avatar.type |
string |
Yes | Allowed values: emoji. |
data.avatar.data |
object |
Yes | — |
data.avatar.data.value |
string |
Yes | Pick the most suitable emoji for this agent. |
data.knowledgeEnabled |
boolean |
No | — |
data.language |
string |
No | The language of the agent, e.g. en-US, zh-Hans |
data.inputPlaceholder |
string |
No | — |
A nested field marked Yes is required whenever its parent object is present.
Example request
curl -X POST "https://www.taskade.com/api/v2/updateAgent" \
-H "Authorization: Bearer $TASKADE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"agentId":"<agentId>"}'
Responses
200 — Default response
| Field | Type | Required | Description |
|---|---|---|---|
ok |
boolean |
Yes | — |
item |
object |
Yes | — |
item.id |
string |
Yes | — |
item.name |
string |
Yes | — |
item.space_id |
string |
Yes | — |
item.data |
object |
Yes | — |
item.data.commands |
object[] |
Yes | — |
item.data.commands[].name |
string |
Yes | Human-readable name of the command in title case. This should probably be a verb. |
item.data.commands[].description |
string |
No | Short summary for discovery (e.g. progressive disclosure / skill listing). The full instruction stays in prompt. |
item.data.commands[].prompt |
string |
Yes | Tell the agent what this command will do. It should be positioned as a direct instruction to the agent. At least 30 words. |
item.data.commands[].id |
string |
Yes | ID based on the name in snake case. |
item.data.commands[].mode |
string |
No | Allowed values: default, plan-and-execute-v1, plan-and-execute-v2. |
item.data.description |
string |
No | Role and purpose of agent, positioned as a direct instruction to the agent. Example: "You are a doctor that helps save lives.". At least 100 words. |
item.data.tone |
string |
No | Allowed values: authoritative, clinical, cold, confident, cynical, emotional, empathetic, formal, friendly, humourous, informal, ironic, optimistic, pessimistic, playful, sarcastic, serious, sympathetic, tentative, warm, creative, inspiring, casual. |
item.data.avatar |
object |
No | — |
item.data.avatar.type |
string |
Yes | Allowed values: emoji. |
item.data.avatar.data |
object |
Yes | — |
item.data.avatar.data.value |
string |
Yes | Pick the most suitable emoji for this agent. |
item.data.knowledgeEnabled |
boolean |
No | — |
item.data.language |
string |
No | The language of the agent, e.g. en-US, zh-Hans |
item.data.inputPlaceholder |
string |
No | — |
Errors
Errors return an ok: false envelope. Rate limiting returns 429 with x-rate-limit-limit, x-rate-limit-remaining and x-rate-limit-reset headers. x-rate-limit-reset is the number of seconds until the window reopens. Retry-After is not sent, so schedule retries from x-rate-limit-reset; retrying sooner will fail again.
{ "ok": false, "message": "Unauthorized", "code": "UNAUTHORIZED" }
Rate limits for this version: enforced per endpoint; ceilings are not published and can change without notice. A 429 response carries x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset (seconds until the window reopens). Back off from those headers rather than hardcoding numbers. If you need sustained throughput, prefer batching (operations like /createTask accept arrays) over tightening polling loops. See Rate limits.