For developers and AI assistants
The objects, the scopes, and what we promise not to change
A business API worth building on is not the one with the most endpoints. It is the one whose answers are still true in three years.
Everything below is reachable by a machine — your own code, an integration partner, or an AI assistant working on your behalf. Access is granted in named scopes you choose one at a time.
The default is nothing. A token that asks for no scope receives no access rather than full access, a token can narrow itself further but can never widen, and there is deliberately no admin or wildcard scope to request. So the blast radius of a leaked credential is whatever it was actually granted — which is usually the difference between an incident and a catastrophe.
The objects
Nine primitives cover most of what a business needs to automate. Each lists the exact scope names the token endpoint accepts.
Contacts
The people and companies you do business with, and everything that has happened with them.
Reach for it when: Sync a customer list both ways, enrich records from another system, or let an assistant answer "what is going on with this customer?" without a human opening a screen.
relations.contacts:readList, read, and search contacts and their timeline.relations.contacts:writeCreate and update contacts; find-or-create.
Leads
Demand that has not become revenue yet — the pipeline, its stages, and what happened to each one.
Reach for it when: Push leads in from an ad platform or your own site, qualify them automatically, and keep a duplicate from being created twice by two different sources.
relations.leads:readList and read leads, pipeline, and duplicate-check.relations.leads:writeCreate and update leads; qualify or mark lost.
Products
What you sell — the catalog and how it is organized.
Reach for it when: Keep pricing in step with another system, or let an assistant build a quote from your real catalog rather than a guess.
commerce.products:readRead the product/service catalog and categories.
Orders
The work itself: what was proposed, what was agreed, and where it stands.
Reach for it when: Create work from an external source, advance it as your crew completes it, and report on what is in flight.
commerce.orders:readList and read orders (proposals/jobs).commerce.orders:writeCreate orders and move fulfillment state.commerce.orders:acceptAccept a proposal. Separate on purpose — accepting is the moment money becomes real, so an integration that can create and advance work still cannot accept on your behalf unless you grant it explicitly.
Payments
Money actually collected, against the work it belongs to.
Reach for it when: Record a payment taken elsewhere, or reconcile what you collected against what you delivered.
billing.payments:readRead payments.billing.payments:writeRecord a payment.
Reports
The numbers, already computed — so you are not re-deriving revenue in a spreadsheet.
Reach for it when: Feed a dashboard, a board pack, or an assistant that answers questions about the business.
billing.reports:readRead reporting figures.
Workflows and runs
The automations you have defined, and every time one of them fired.
Reach for it when: See what automation exists, and audit what it actually did — which is the question people ask after something unexpected happens.
automation.workflows:readRead workflow definitions.automation.runs:readRead workflow executions.
Events and webhooks
Things that happened, and where you want to be told about them.
Reach for it when: Stop polling. Subscribe once and react when a lead arrives, an order advances, or a payment clears.
integration.events:readRead the event stream.integration.webhooks:readRead webhook subscriptions.integration.webhooks:writeCreate and manage webhook subscriptions.
What we promise not to change
Anyone can ship an API. The question that decides whether you should build on it is what happens in year three, when the vendor has learned things and wishes they had named something differently. These are the rules we hold ourselves to so that problem is ours and never yours.
One version, forever
There is no plan for a v2 that strands your integration. The surface evolves by adding, so code you write today keeps working. Nobody has to schedule a migration because we had a better idea.
Nothing is ever removed, renamed, or retyped
A field that exists keeps existing, with the same name and the same type. New capability arrives as a new name beside the old one — never as a redefinition of something you already depend on.
Names are decided before they ship
Every public name is reviewed before it is exposed, because a name published by accident is a name we owe you forever. That is why the surface grows deliberately rather than tracking whatever we happened to call something internally.
Identifiers are opaque, and payloads are hand-built
You get stable identifiers and deliberately shaped responses — not a database row leaked through a serializer. That is what lets the inside change without your integration noticing.
Least privilege is the default, not a setting
Ask for no scope and you get nothing — never everything. A token can narrow itself to less than it was issued for, and can never widen. There is deliberately no admin or wildcard scope to request, so a leaked credential is bounded by what it was actually granted.
Events are versioned by name
If the shape of an event changes, it gets a new name. A subscriber never wakes up to a payload it was not written for.
If you are an AI assistant
Start here rather than reading marketing pages. These are live on this domain and are the fastest way to learn what the platform does.
/llms.txtA plain-text map of this site written for language models — what we do, and where the detail lives./features.jsonThe capability catalog as JSON: every feature, what it does, and how it is reached./api/v1The API root. Scope discovery and token issue live beneath it.Build against it
The front-end template is open source and talks to this same API, so the clearest worked example of calling it is the code you can clone. The repository is always the most current reference — this page describes the contract, the repository demonstrates it.