Issued per workspace
Access starts empty. A key is granted only the actions you name.
The API
The action surface the product itself runs on, with the tenancy, the ceilings and the isolation applied identically. What is not exposed yet is said so here, rather than discovered after you have written against it.
One channel live · Scoped per workspace · Attributable per client
POST /v1/tenants{ "name": "Northwind Partners", "external_id": "client-4471"}201 { "id": "tnt_4b91", "status": "active" }The API
The action surface and the tenancy around it. The selection endpoints follow, behind the same keys.

Access starts empty. A key is granted only the actions you name.
Usage is recorded against one client, so a reseller can account for it cleanly.
One client's data cannot be reached with another client's key.
A replay reproduces the first result exactly, errors included.
Guarantees
An API is a promise about what stays true while your code is not running. These are the ones we make.
A key is granted only the actions you name, one at a time, and holds nothing by default. Widening it is a decision someone makes and the record keeps, rather than a checkbox that was already ticked when the key was issued.
Usage is recorded against a single client, so a platform or reseller can account for what each engagement consumed without keeping a parallel ledger of its own.
An engagement that runs for six weeks holds its own position. Nothing is lost because your service restarted, and nothing has to be replayed by you to catch up.
Pacing, spacing and per-account ceilings are enforced beneath the API exactly as they are in the product, and allowance is drawn at the instant of the attempt. There is no path through the interface that lets an integration spend an account faster than its owner allowed.
Keys are issued per workspace and scoped to what you are granted — which is a conversation, not a form.