Skip to main content

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 deletion — DELETE endpoints complete or cancel items instead.

Further documentation

Licence

MIT

Metadata

Release files for things-api 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for things-api 0.3.2
File Size Uploaded
things_api-0.3.2.tar.gz 71.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for things-api 0.3.2
File Interpreter ABI Platform
things_api-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 89.2 kB

Release files / things_api-0.3.2.tar.gz

Download URL things_api-0.3.2.tar.gz
Size 71.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e07d412a16dee91fe244598c821153e3fea9414552b209bc7251ac06554234b4
BLAKE2b-256 checksum
How to use checksums
1a6d9097d55016e473b95f04b0f1030e2a7def0c70d13af3c0e288f3a5f67f78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 5, 2026.

Transparency log

Release files / things_api-0.3.2-py3-none-any.whl

Download URL things_api-0.3.2-py3-none-any.whl
Size 17.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d46d1627423569ba03c3c212ea06c427f5ab1b467e8222414f603d0b3becb73f
BLAKE2b-256 checksum
How to use checksums
65ccb48f7f16111da723bb6862ff2eb1ab54254ed1ba912d14560ffffaaea845
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page