Quick start

Create an API key at sharetodos.com/developers, then make your first request:

curl https://api.sharetodos.com/v1/lists \
  -H "X-API-Key: sk_live_your_key_here"

Add an item to a list:

curl -X POST https://api.sharetodos.com/v1/actions/add \
  -H "X-API-Key: sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"items": ["buy milk", "call dentist"], "list": "Shopping"}'

Base URL

https://api.sharetodos.com/v1

All requests must be made over HTTPS. The API returns JSON for all responses.

Endpoints

Lists

GET /lists All lists you own or are a member of
POST /lists Create a list
GET /lists/:id Get a specific list
DELETE /lists/:id Delete a list
GET /lists/:id/items Items in a list (?filter=open|done)
POST /lists/:id/items Add items directly to a list by ID

Items

PATCH /items/:id Update an item (done, priority)
DELETE /items/:id Delete an item

Actions

Action endpoints handle all domain logic — they resolve lists by name, apply the profanity filter, and keep an audit trail for undo.

POST /actions/add Add items (resolves list by name)
POST /actions/done Mark items done (fuzzy match)
POST /actions/undone Unmark done items
POST /actions/clear Archive all completed items
POST /actions/undo Reverse the last action
POST /actions/priority Toggle priority on items (fuzzy match)
POST /actions/share Get the share URL and token
POST /actions/invite Invite a user to a list

Profile

GET /me Current user and active scopes

Response format

Every response uses a consistent envelope:

{
  "data": { ... },  // null on error
  "error": null       // string on error
}

Error example:

{
  "data": null,
  "error": "Insufficient scope: items:write"
}