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 and Python 3.12+.

1. Install

Run directly with uvx (no install needed):

uvx things-api

Or install with pip:

pip install things-api

Or clone the repo for development:

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

2. Configure

Create a .env file in the directory you'll run the server from:

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

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.2.1.tar.gz (62.1 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.2.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: things_api-0.2.1.tar.gz
  • Upload date:
  • Size: 62.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for things_api-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e0882ddfc9dc1f7ffb31924e36c106e61f8275e0e5cc21de7f0ea4208ce8b1b3
MD5 4b64405c1a3b2cd6365016f63d78a4cc
BLAKE2b-256 3b355f3fa64dda71c1e56f65c5fa3aa149b9c7bb00c9180a3187539d8e962050

See more details on using hashes here.

Provenance

The following attestation bundles were made for things_api-0.2.1.tar.gz:

Publisher: publish.yml on jaydenk/things-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: things_api-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for things_api-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c1a64cea806237ece3f6e64fcc92bfb7c36869dfaffb94ed7beabfbd9237c361
MD5 a898bc38d30c863c1373b1cd44b616f1
BLAKE2b-256 5030e023c699b0960a495afe6a6eb0ec64ee7ccf78db2eb915781047d599e748

See more details on using hashes here.

Provenance

The following attestation bundles were made for things_api-0.2.1-py3-none-any.whl:

Publisher: publish.yml on jaydenk/things-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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