Skip to main content

REST API for Things 3 — expose your tasks over HTTP

Project description

Things API

REST API for Things 3 — expose your tasks over HTTP.

Things API reads directly from the Things SQLite database via things.py and writes back through the Things URL scheme. It runs as a lightweight FastAPI service on any Mac where Things is installed, giving you full programmatic access to your tasks from tools like n8n, curl, or any HTTP client.

Getting started

Requirements: macOS with Things 3 installed, Python 3.12+, and uv.

1. Clone and install

git clone https://github.com/jaydenk/things-api.git
cd things-api
uv venv
uv pip install -e .

2. Configure

cp env.example .env

Open .env and set your API token — this is the bearer token that authenticates every request:

THINGS_API_TOKEN=choose-a-secure-random-string

To enable write operations (creating, updating, completing todos), you also need a Things URL scheme auth token. To get one, open Things > Settings > General > Enable Things URLs and copy the token:

THINGS_AUTH_TOKEN=your-things-url-scheme-token

Without THINGS_AUTH_TOKEN, the API runs in read-only mode.

See docs/configuration.md for all configuration options.

3. Run

uv run things-api

The server starts on http://localhost:5225.

4. Try it

# Health check
curl http://localhost:5225/health \
  -H "Authorization: Bearer YOUR_TOKEN"

# List today's tasks
curl http://localhost:5225/today \
  -H "Authorization: Bearer YOUR_TOKEN"

# Create a todo (requires THINGS_AUTH_TOKEN)
curl -X POST http://localhost:5225/todos \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy milk", "when": "today"}'

To run the server persistently (auto-start at login, auto-restart on crash), see the deployment guide.

Endpoints overview

Every endpoint requires a valid Authorization: Bearer <token> header.

Resource Endpoints Description
Todos GET POST PUT DELETE /todos Full CRUD for todos
Projects GET POST PUT DELETE /projects Full CRUD for projects
Smart lists GET /inbox /today /upcoming /anytime /someday /logbook Read-only access to Things smart lists
Tags GET /tags List tags and items by tag
Areas GET /areas List areas
Search GET /search /search/advanced Full-text and filtered search
Health GET /health Service status and database connectivity

Note: DELETE on todos and projects is irreversible — it completes or cancels the item. Things 3 does not support true deletion.

See docs/api-reference.md for full endpoint details, request/response schemas, and query parameters.

Limitations

  • macOS only — Things 3 is a Mac app. The API must run on the same machine.
  • GUI session required for writes — Write operations invoke the Things URL scheme, which requires an active GUI session.
  • No true deletionDELETE endpoints complete or cancel items instead.

Further documentation

Licence

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

things_api-0.1.0.tar.gz (61.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

things_api-0.1.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file things_api-0.1.0.tar.gz.

File metadata

  • Download URL: things_api-0.1.0.tar.gz
  • Upload date:
  • Size: 61.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for things_api-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5f55f4821cf466a9ef44beb160450ea6781cc8281b54da338d0f8216404c3cb4
MD5 4baac6eade4925443c08b06724b396e0
BLAKE2b-256 9c6437f8adfb4b23ef25153398dfd1af828ec6e8f05354f51fe01fa92bf49d9c

See more details on using hashes here.

File details

Details for the file things_api-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: things_api-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for things_api-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ffbdf3bda9a8c1459bc4b98e493f09d900ff7c84551a74bb28ca68e9b4842f0d
MD5 c1063f7c807d6a9cdac67bd20120be62
BLAKE2b-256 a3584135bdf52b12964b69e4725be67ea474a44e0b15371cea7b33de574c599b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page