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

Run the setup wizard:

things-api init

This generates an API token, checks your Things URL scheme settings, and writes the config to ~/.config/things-api/config. If you skip this step, the wizard runs automatically on first launch.

See docs/configuration.md for all configuration options.

3. Run

things-api

Override settings on the fly:

things-api --token my-token --port 8080

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

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.3.1.tar.gz (71.3 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.3.1-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: things_api-0.3.1.tar.gz
  • Upload date:
  • Size: 71.3 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.3.1.tar.gz
Algorithm Hash digest
SHA256 7347c9534d9e1b397f39cf9fc98ca7ea6b1f7889b47114a57681c8b14ca0b094
MD5 952833b7b655c4b94a2a8d2d28101a13
BLAKE2b-256 d2570cb199d5458b4ada80af929f07be88672d4e2013481f1b0e8dbcccff7e43

See more details on using hashes here.

Provenance

The following attestation bundles were made for things_api-0.3.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.3.1-py3-none-any.whl.

File metadata

  • Download URL: things_api-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 17.7 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.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a81c00f78e13771fc1da2953948985e3229284b90d32101b7ede59cd6235c7e5
MD5 7428740a18dabb1b008fee38b633fbce
BLAKE2b-256 3312c414e6066601a6c94b393f640b0752ed740428ddb97f42d724877c4de085

See more details on using hashes here.

Provenance

The following attestation bundles were made for things_api-0.3.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