Create, update, list, and close tasks via the PAW API. Use when an agent needs to manage task lifecycle: creating new tasks, updating status/notes, filtering active work, or closing completed items.
Base URL: http://127.0.0.1:18789
Token: 341c3e8015df9c77f6ed4cba1359403135994364caf7c668
Header: Authorization: Bearer <token>
Always include Content-Type: application/json on POST/PATCH requests.
| Field | Type | Values / Notes |
|---|---|---|
title | string | Required on create. Short, imperative description. |
status | string | active | cancelled |
workState | string | not_started | queued | | | |
in_progressblockeddoneagent | string | programmer | architect | researcher | writer | reviewer |
notes | string | Markdown. Use for context, constraints, acceptance criteria. |
projectId | string | UUID of parent project, or null. |
blockedBy | string | UUID of blocking task, or null. |
pinned | boolean | Pin to top of queue. |
modelTier | string | standard | heavy |
estimatedMinutes | number | Optional time estimate. |
curl -s -X POST http://127.0.0.1:18789/api/tasks \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668" \
-H "Content-Type: application/json" \
-d '{
"title": "Task title here",
"agent": "programmer",
"notes": "## Problem\n...\n\n## Acceptance Criteria\n- [ ] ...",
"workState": "queued"
}'
Minimum required: title only. Add agent, notes, and workState for complete tasks.
# All active tasks
curl -s http://127.0.0.1:18789/api/tasks \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668"
# Filter by status or workState
curl -s "http://127.0.0.1:18789/api/tasks?status=active&workState=queued" \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668"
# Filter by agent
curl -s "http://127.0.0.1:18789/api/tasks?agent=programmer" \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668"
Filter query params: status, workState, agent, projectId
curl -s -X PATCH http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668" \
-H "Content-Type: application/json" \
-d '{"workState": "done", "notes": "Updated notes here"}'
Only send fields you want to change. All other fields are preserved.
To mark done:
curl -s -X PATCH http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668" \
-H "Content-Type: application/json" \
-d '{"workState": "done"}'
To cancel:
curl -s -X PATCH http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668" \
-H "Content-Type: application/json" \
-d '{"status": "cancelled"}'
To hard-delete:
curl -s -X DELETE http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668"
Prefer status: cancelled or workState: done over hard-delete. Delete only for test/junk tasks.
curl -s http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668"
curl -s -X PATCH http://127.0.0.1:18789/api/tasks/<task-id> \
-H "Authorization: Bearer 341c3e8015df9c77f6ed4cba1359403135994364caf7c668" \
-H "Content-Type: application/json" \
-d '{"blockedBy": "<blocking-task-id>", "workState": "blocked"}'
Use structured markdown in notes for well-formed tasks:
## Problem
Brief description of what needs to be solved.
## Acceptance Criteria
- [ ] Criterion one
- [ ] Criterion two
## Context
Any relevant background, constraints, or links.
workState: done when acceptance criteria are met.| Code | Meaning | Action |
|---|---|---|
| 401 | Bad/missing token | Check auth header |
| 404 | Task ID not found | Verify ID, may be deleted |
| 409 | Conflict/race | Re-read and retry once |
| 422 | Invalid payload | Fix field names/types |
| 5xx | Server error | Retry with backoff |