Items
An item is a note or a todo, owned by a project. The capture endpoint is the path you'll use 90% of the time — it accepts free-form text and, only if you ask, runs the AI organizer.
Capture
/api/v1/captureFree-form text → an item. AI is off by default; opt in with organize:true.
Body fields: text (required, ≤20k chars), project_id (uuid, optional — defaults to your inbox), type (note | todo, defaults to todo), organize (boolean, defaults to false — Pro only when set to true), client_id (uuid for idempotent retries).
Bringing your own agent? Leave organize off. Your agent already classified the input, picked the project, and parsed the due date — running the server organizer on top is a double tax (latency + your daily AI quota). Pass type and project_id explicitly instead.
# Default — no AI, no Pro requirement, no quota hit.
curl https://quik.md/api/v1/capture \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{
"text":"Call the dentist tomorrow at 4pm",
"type":"todo",
"project_id":"<your-project-uuid>"
}'Update with parsed fields
If your agent extracted a due date, a tag, or a status, write it straight to the item via PATCH — don’t round-trip through the AI organizer.
curl -X PATCH https://quik.md/api/v1/items/<id> \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{
"title":"Call dentist",
"due_at":"2026-04-25T16:00:00Z",
"status":"todo"
}'List recent / since
/api/v1/items?since=&limit=&cursor=Cursor-paginated. Use ?since=ISO for incremental sync.
curl "https://quik.md/api/v1/items?limit=50" \
-H "Authorization: Bearer qk_..."Read one
/api/v1/items/:idUpdate
/api/v1/items/:idPartial update. Send only the fields you want to change.
curl -X PATCH https://quik.md/api/v1/items/<id> \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{"title":"Call dentist","due_at":"2026-04-25T16:00:00Z"}'Toggle complete
/api/v1/items/:id/toggleBody: { is_completed: true|false }. Subtasks cascade automatically.
curl -X POST https://quik.md/api/v1/items/<id>/toggle \
-H "Authorization: Bearer qk_..." \
-H "Content-Type: application/json" \
-d '{"is_completed":true}'Archive / unarchive / delete
/api/v1/items/:id/archive/api/v1/items/:id/unarchive/api/v1/items/:idSoft delete (archives the row).
Subtasks
/api/v1/items/:id/childrenDirect children, ordered by position.
Toggling a parent cascades to all descendants in both directions — you don’t need to walk the tree client-side.
Rate limits
Per-user limits apply to every authenticated call. Free: 60/min, 1000/day. Pro: 300/min, 10000/day. On 429, back off using the Retry-After header. See Authentication for the full table.