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.0.tar.gz (71.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.3.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: things_api-0.3.0.tar.gz
  • Upload date:
  • Size: 71.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.3.0.tar.gz
Algorithm Hash digest
SHA256 8cc3cce9eaca6c000390df809fa6a2283da7d1accf9dd18cd0fa47a5953f7812
MD5 4cf9ded47a2ebdb81bc80a2b51dc697c
BLAKE2b-256 6c9214e50287c845154d5156f33e42b10734a68c9dcc6f8039e3f099cbb1f76a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: things_api-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 71d9d66af4757f8ca76be73e603dd4838423ac1043bd791165392e52ca158045
MD5 80453255739f94bcf9e3cd839836ad1a
BLAKE2b-256 3a9e19fa32229d160b703b84f7281c9201c6b935a010c3b157ae61c3700f4e13

See more details on using hashes here.

Provenance

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