Ways in

Other programs reach an account four ways, and each is deliberately narrow. Nothing here runs code inside ontoplano: there is no plugin that is a file you drop in, and that is on purpose — a plugin platform made of processes on somebody's own machine cannot take the instance down with it.

API tokens

A token is created in Settings → Integrations, shown once, and stored as a hash. It carries scopes, and a scope is a sentence somebody agreed to rather than a permission bit: a grant given to a string of jargon is not informed.

Scope What granting it allows
streams:write Send readings into your data streams, and create new streams
streams:read Read everything your data streams have ever recorded
schedule:read Read everything on your calendar for the days ahead
today:read See today's blocks, habits and tasks — what the phone widget shows
plugin:declare Name and describe itself on your integrations page
webhooks:manage Ask to be told when things happen — and manage those subscriptions
shopping:read See everything on your shopping list
shopping:write Add to your shopping list, and tick things bought
calendar:read Show your plan in a calendar app. It can see the plan and change nothing

The narrowness is the point. A phone pushing weight readings needs to write to a stream and read the schedule; it has no business reading the diary if that phone is ever lost.

The calendar link

The one exception to "shown once". A calendar app cannot send a header, so the credential has to live in the URL — which means it is written into config files, walked past by every proxy in between, and sometimes shared with a household.

Two things keep that bounded. It holds calendar:read and nothing else, and the feed route accepts a token holding exactly that — a powerful token pasted into a feed URL is refused rather than honoured. And because what it can do is so small, the address is kept and can be shown again, which is what makes adding a second device possible without breaking the first. Up to five, each revoked on its own.

Data streams

An external program declares a stream and pushes points into it. The app decides how to draw them; the program decides nothing about the UI. This is how anything that measures the world — a scale, a sensor, a script — gets onto the dashboard without shipping any code into ontoplano.

Webhooks

The other direction: a subscription is an address, a set of events, and a secret the delivery is signed with, so the receiver can tell it is really us.

Event When it fires
todo.created a todo is added
todo.completed a todo is finished
idea.created an idea is captured
diary.created a diary entry is written
shopping.added something goes on the shopping list
shopping.bought something on the list is bought

A subscription that keeps failing is disabled rather than retried forever, and says so on the settings page where it can be revived.