Overview
Todo lists are containers for organizing todo items. Each list has a name, color, and order. System lists cannot be deleted. Base URL:/todos/todo-lists
Authentication: All endpoints require authentication via Bearer token.
Encryption: The name field is encrypted at rest using AES-GCM with user-specific keys. System lists skip encryption for the name field.
List Todo Lists
GET /todos/todo-lists
Retrieve all todo lists for the authenticated user
Response
Returns an array of todo list objects ordered by theorder field.
Unique identifier for the list (UUID)
User ID that owns this list
List name (decrypted from storage)
Hex color code (e.g.,
#FF5733)Whether this is a system-generated list (cannot be deleted)
Sort order for displaying lists
Example Request
Example Response
Create Todo List
POST /todos/todo-lists
Create a new todo list
Request Body
List name (max 100 characters, will be encrypted)
Hex color code matching pattern
^#[0-9a-fA-F]{6}$Response
Returns the created todo list object.Unique identifier for the created list
User ID that owns this list
List name (decrypted)
Hex color code
Always
false for user-created listsAutomatically assigned order (minimum existing order - 1)
Example Request
Example Response
Error Responses
Update Todo List
PUT /todos/todo-lists/{list_id}
Update an existing todo list
Path Parameters
UUID of the list to update
Request Body
All fields are optional. Only provided fields will be updated.New list name (max 100 characters, will be encrypted)
New hex color code matching pattern
^#[0-9a-fA-F]{6}$New sort order
Response
Returns the updated todo list object.Example Request
Example Response
Error Responses
Delete Todo List
DELETE /todos/todo-lists/{list_id}
Delete a todo list
Path Parameters
UUID of the list to delete
Response
Confirmation message: “List deleted”
Example Request
Example Response
Error Responses
Reorder Lists
POST /todos/todo-lists/reorder
Reorder all todo lists at once
Request Body
Array of list UUIDs in the desired order
Response
Confirmation message: “Reordered”
Example Request
Example Response
The first UUID in the array will be assigned
order: 0, the second order: 1, and so on.Data Security
Encryption Details: The
name field is encrypted using AES-GCM (256-bit) with:- User-specific keys derived via HKDF-SHA256
- 12-byte random IV per encryption
- Additional authenticated data (AAD) includes user ID
- System lists skip encryption for performance
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.