Quickstart
From nothing to a todo you created over HTTP.
You need a Doozy account with a workspace, and curl. Five steps, about five minutes. Every step shows what comes back.
1. Create a key
In Doozy, open Settings, then API keys, then Create key.
Give it a name you will recognise later, and choose what it may do. For this walkthrough, pick Full access; for anything real, grant the least that works. Scopes explains what each one opens.
The key appears once, when you create it:
doozy_sk_KFpivWUqE0iq5EhgHGdq70X0VLdhyC2l7Itf8mdk0eJAVICopy it now. We store only a hash, so we cannot show it again. If you lose it, revoke it and create another.
Keep it out of your source code. An environment variable is the usual place:
export DOOZY_API_KEY="doozy_sk_..."2. Check it works
curl https://api.usedoozy.com/api/v1/me \
-H "Authorization: Bearer $DOOZY_API_KEY"{
"object": "identity",
"workspace": { "id": "7f2a...", "name": "Acme customer success" },
"user": { "id": "3c8e...", "email": "you@acme.com", "name": "You" },
"credential": {
"type": "api_key",
"name": "Quickstart",
"scopes": [
"todos:read", "todos:write",
"chats:read", "chats:write",
"agents:read", "agents:write",
"captures:read", "captures:write"
],
"expiresAt": null
}
}That workspace is where every request with this key lands, and scopes is whatever you granted in step 1.
If this fails instead: 401 means the key is wrong, revoked, or was pasted with a line break in it. 403 means the key is fine but was not granted the scope this call needs. Errors has the rest.
3. Read the workspace
curl "https://api.usedoozy.com/api/v1/todos?limit=5" \
-H "Authorization: Bearer $DOOZY_API_KEY"Lists come back the same way everywhere: data holds the records, hasMore says whether there are more, and nextCursor is what you pass back to get them.
4. Create a todo
curl -X POST https://api.usedoozy.com/api/v1/todos \
-H "Authorization: Bearer $DOOZY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"title": "Review the Q3 numbers",
"content": "Compare against the forecast and flag anything more than 10 percent out.",
"priority": "high",
"dueDate": "2026-09-01"
}'{
"object": "todo",
"id": "1b4c...",
"title": "Review the Q3 numbers",
"status": "ready",
"priority": "high",
"dueDate": "2026-09-01",
"assignees": [],
"createdAt": "2026-08-20T14:03:11.000Z"
}Open Doozy and it is there. Keep the id: the next step uses it.
The Idempotency-Key header is worth the habit. If the request times out and you retry with the same key, you get the first response back instead of a second todo. See Errors.
5. Hand it to an agent
This is the part other todo APIs do not have. Find an agent first:
curl https://api.usedoozy.com/api/v1/agents \
-H "Authorization: Bearer $DOOZY_API_KEY"Take an agent’s id from data in that list, and the todo id from step 4, and start the work:
curl -X POST https://api.usedoozy.com/api/v1/todos/1b4c.../runs \
-H "Authorization: Bearer $DOOZY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agentId": "3c8e..." }'{
"object": "todo_run",
"id": "5d2f...",
"todoId": "1b4c...",
"chatId": "8e91...",
"status": "running",
"startedAt": "2026-08-20T14:04:02.000Z",
"finishedAt": null
}The agent is now working, and this response came back before it finished — that is how every agent operation behaves. chatId is where the work happens: read that chat’s messages to watch it, and its status to know when it is done. Working with agents shows both.
Next
- Working with agents for how to get the answer back out.
- Authentication and keys for how keys behave, rate limits, and how to rotate one.
- Recipes for the things integrations usually want.
- API reference for every operation.