Overview
Todo items represent individual tasks within todo lists. Each item has a title, completion status, optional scheduled date, and belongs to a specific list. Base URL:/todos
Authentication: All endpoints require authentication via Bearer token.
Encryption: The title field is encrypted at rest using AES-GCM with user-specific keys.
List Todo Items
GET /todos
Retrieve todo items for the authenticated user
Query Parameters
Filter todos by list ID. Use
"all" or omit to retrieve all todos.Response
Returns an array of todo objects ordered by theorder field.
Unique identifier for the todo (UUID)
User ID that owns this todo
Todo title (decrypted from storage)
Whether the todo is marked as complete
ISO date string when the todo is scheduled (e.g.,
"2026-03-15"), or nullUUID of the list this todo belongs to
Sort order for displaying todos
ISO timestamp when the todo was created
ISO timestamp when the todo was last updated
Example Request
Example Response
Create Todo Item
POST /todos
Create a new todo item
Request Body
Todo title (max 500 characters, will be encrypted)
UUID of the list this todo belongs to (must exist and belong to user)
ISO date string (e.g.,
"2026-03-15"), or nullResponse
Returns the created todo object.Unique identifier for the created todo
User ID that owns this todo
Todo title (decrypted)
Always
false for newly created todosScheduled date if provided
List UUID
Automatically assigned order (minimum existing order - 1)
Creation timestamp
Update timestamp (same as createdAt initially)
Example Request
Example Response
Error Responses
Update Todo Item
PUT /todos/{todo_id}
Update an existing todo item
Path Parameters
UUID of the todo to update
Request Body
All fields are optional. Only provided non-null fields will be updated.New todo title (max 500 characters, will be encrypted)
New completion status
New scheduled date (ISO format) or
null to removeMove todo to a different list (must exist and belong to user)
New sort order
Response
Returns the updated todo object.Example Request
Example Response
Error Responses
Delete Todo Item
DELETE /todos/{todo_id}
Delete a todo item
Path Parameters
UUID of the todo to delete
Response
Confirmation message: “Todo deleted”
Example Request
Example Response
Error Responses
Data Security
Encryption Details: The
title field is encrypted using AES-GCM (256-bit) with:- User-specific keys derived via HKDF-SHA256 from master key
- 12-byte random initialization vector (IV) per encryption
- Additional authenticated data (AAD) including user ID
- Base64 encoding for storage (IV + ciphertext)
"[Decryption Error]".Field Validation
Rate Limiting
All endpoints are subject to the API rate limit configured in application settings. Exceeding the rate limit will return a429 Too Many Requests response.