your first request in five minutes
Quickstart
You need init.Tasks installed and signed in on one device, and curl. There is no registration and no approval step.
1. Create a token
In init.Tasks, open settings → api keys (the account page lists them too) and create a key. Give it the todos:read and todos:write scopes.
The key is shown once. It is itk_ and 44 more characters. Copy all of it:
itk_xPVI8n9JBtWHk76bLvrPdEWY5AuEdpkOCQkUVs-Whb6yThe token unlocks your encryption key. Store it the way you store a password, not the way you store an API key.
Put it in your shell:
# every example below reads this variable
export INITTASKS_TOKEN='itk_…' # the whole key2. Call the API
GET /v1/me reports which scopes your token holds. It is the cheapest way to prove the token works.
curl -s https://api.inittasks.com/v1/me \
-H "Authorization: Bearer $INITTASKS_TOKEN"{
"sub": "kQ8vM2xRpL4Ns1Zd7Ty6Ye3Wu0Bg5Mj2Hc7Qf4Ln8A",
"scopes": ["todos:read", "todos:write"],
"grant": { "id": "4F2A1B8E-6C3D-4A57-9E20-1B8D5F3C7A64", "kind": "pat", "clientId": null },
"webhooks": { "disabled": 0 }
}A 401 means the token is wrong, expired, or revoked. See unauthorized.
3. Create a to-do
POST /v1/todos takes a title and returns the row it created. The Idempotency-Key header makes the call safe to retry. Send the same key with the same body, and the server replays its first answer instead of writing twice.
curl -s https://api.inittasks.com/v1/todos \
-X POST \
-H "Authorization: Bearer $INITTASKS_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"title":"buy milk","whenDate":"2026-09-16","tags":["errands"]}'{
"id": "9C3F1A72-8E4F-4B21-A0D5-3F7B2C1E6A94",
"createdAt": "2026-09-16T08:12:03.441+00:00",
"updatedAt": "2026-09-16T08:12:03.441+00:00",
"title": "buy milk",
"parentId": null,
"headingId": null,
"subtitle": null,
"description": null,
"tags": ["errands"],
"whenDate": "2026-09-16",
"deadline": null,
"status": "open",
"priority": null,
"colorHex": null,
"colorStyle": null,
"reminderTime": null,
"recurrenceRule": null,
"recurrenceAnchor": null,
"completedAt": null,
"trashedAt": null,
"sortKey": "zV3",
"sorted": true,
"whenTime": null,
"durationMin": null,
"reminders": [],
"subtasks": []
}Every field is described under Todo.
The title is encrypted on the way in and decrypted on the way out. The tag errands is created if it does not exist, so there is no vocabulary to register first.
4. Read it back
GET /v1/todos returns a page of rows and a cursor.
curl -s "https://api.inittasks.com/v1/todos?limit=5" \
-H "Authorization: Bearer $INITTASKS_TOKEN"Each row in data is the same to-do object, shortened here:
{
"data": [
{ "id": "9C3F1A72-8E4F-4B21-A0D5-3F7B2C1E6A94", "title": "buy milk", "whenDate": "2026-09-16", "tags": ["errands"], "status": "open", "…": "…" }
],
"next_cursor": null
}Follow next_cursor until it comes back null. Do not build a cursor yourself.
Next
- Authentication covers scopes, and OAuth for an app other people will use.
- Encryption covers what the server can and cannot see.
- Reference lists every route.
- MCP connects Claude, ChatGPT or Cursor to the same data without code.