A REST API over everything Termn tracks: contacts, workspaces, agreements and the conditions they are waiting on, the money moving against them, and the ledger that flattens all of it into what you are owed and owe. 20 calls in 7 groups, typed end to end.
Download the OpenAPI schema Browse it interactively
OpenAPI 3.1 · Version 1.0.0 · Base URL https://termn.ai
Create an organization token in the app under Settings, then Developers. It is shown once, so store it before you close the page. Send it as a bearer token on every request.
curl https://termn.ai/api/v1/me \
-H "Authorization: Bearer $TERMN_TOKEN"
The reply names the organization the token belongs to and the scope it carries. Every other call is scoped to that organization: another organization’s record reads as not found, never as forbidden, so a wrong token never confirms that a record exists.
13 of the 20 calls are reads. The token column names the ones a read-only token is refused for.
Who the calling token belongs to.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/me | Describe the calling token | Read |
People and entities your organization does business with. Organization-scoped and reusable; agreements reference contacts rather than copying them.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/contacts | List contacts | Read |
| POST /api/v1/contacts | Create a contact | Read and write |
| GET /api/v1/contacts/{contact_id} | Fetch one contact | Read |
| PATCH /api/v1/contacts/{contact_id} | Update a contact | Read and write |
One workspace per deal or matter. Agreements live inside a workspace.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/workspaces | List workspaces | Read |
| POST /api/v1/workspaces | Create a workspace | Read and write |
| GET /api/v1/workspaces/{workspace_id} | Fetch one workspace | Read |
| POST /api/v1/workspaces/{workspace_id}/contacts | Reference a contact from a workspace | Read and write |
Agreements with their ordered stages and gates. Create drafts here; publishing an agreement to participants happens in the Termn app.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/agreements | List agreements | Read |
| POST /api/v1/agreements | Create a draft agreement | Read and write |
| GET /api/v1/agreements/{agreement_id} | Fetch one agreement | Read |
| GET /api/v1/agreements/{agreement_id}/information | Answers to an agreement's information requests | Read |
| POST /api/v1/agreements/{agreement_id}/participants | Add a participant to an agreement | Read and write |
Read-only, deliberately. Authorizing a payment and confirming that one arrived are evidence-gated acts: only receiver-side evidence at recipient-confirmed assurance or better may reconcile a movement, and a sender's acknowledgement never proves receipt. An organization-wide API token is not that evidence, so those transitions are performed by a person in the Termn app and observed here.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/movements | List money movements | Read |
| GET /api/v1/movements/{movement_id} | Fetch one money movement | Read |
Every obligation and asset across all workspaces, in one flat list.
| Call | What it does | Token |
|---|---|---|
| GET /api/v1/ledger | List ledger rows | Read |
The only door to protected effects. A machine credential may propose publishing or cancelling an agreement; a member of the organization reviews the plain-language summary at confirm_url in the Termn app and confirms or declines it there. Nothing executes until they do. Undecided proposals expire after 72 hours.
| Call | What it does | Token |
|---|---|---|
| POST /api/v1/proposals | Propose a protected effect | Read and write |
| GET /api/v1/proposals | List proposals | Read |
| GET /api/v1/proposals/{proposal_id} | Fetch one proposal | Read |
Paths are shown in full: the base URL above plus any row is the URL you call. Every request and response body is typed in the schema, so point a generator at it rather than transcribing fields by hand.
These hold for every call, from every client, on every token.
Every failure is the same envelope with a stable error.code to branch on, a message for a person to read, and a request id to quote to us. Validation failures add a list naming each field. These are the statuses to handle.
| Status | What it means |
|---|---|
| 401 | Missing, malformed, expired, or revoked token. |
| 403 | This token is read-only. |
| 404 | No such record in your organization. |
| 409 | Idempotency-Key reused with a different request. |
| 422 | The request did not pass validation. |
| 500 | Unexpected failure on our side. |
not_found · unauthenticated · forbidden · invalid_request · method_not_allowed · conflict · internal_error
Rather than polling, register an endpoint in the app under Settings, then Developers. Each event is posted as JSON with an HMAC-SHA-256 signature over the timestamp and body. Delivery is at-least-once, so treat a repeat as normal and check the event id.
For scripts, back-office jobs, and your own product.
For agents that work the follow-up rather than call endpoints.
The API and the schema cost nothing, and drafting through them is free exactly as it is in the app. $149 activates the workspace when you are ready to send. See all pricing.
Your first workspace is free: one person, one agreement, start to finish.
Run your first agreement freeRather talk it through first? Contact us at sales@termn.ai.