Contracts Overview
Read every contract folded from its documents: terms with verbatim quotes, status on the day, key dates and the processes the data starts, via /v1/contracts.
contracts). Add it from the Apps catalog or with POST /v1/apps and slug contracts; GET /v1/apps lists the apps a workspace has added.The Contracts API exposes the Contracts app, catalog slug contracts. The app folds every contract's documents (the base contract, amendments, renewals, terminations and price sheets) into one record per contract: the terms in force, the contract's status on the day, the dates that need someone, and the processes the contract's data starts for sales, billing, legal, operations, property, contract management, procurement and controlling. A workspace uses these endpoints after adding the app; GET /v1/apps lists a workspace's apps by slug.
Every term on a contract cites the document it was read from and the verbatim quote that supports it, and a term counts only when the quote occurs in the document and prints the value. A value that does not verify is stored with the reason and shown, but never folded into the terms in force. This is the rule behind every number the API returns: an annual value, a notice period or an expiry date is traceable to a passage a person can open, and a hand-set value goes through the same check as a value the model read.
A contract is identified by a contract key. The key comes from a person, else from the filename key of the document store, else from the verified printed contract number, else from the first document. Documents that belong to one contract but were filed under different keys are brought together by key rules and by the merge and reconcile routes. The status of a contract is one of draft, active, expired, terminated or unknown, as of the day the contract was last folded (computed_on).
Facts come from documents, decisions come from people. A person can mark a contract terminated, notice_sent, renewal_declined or active, mark a key date or a process item handled, correct a document's role, exclude it, re-key it or set one of its terms by hand. These corrections persist across re-reads and rebuilds, and each is audited with the calling API key as the actor (actor kind app, id api:<key id>), never as a person.
read scope. Writes need the write scope and the key's person must be a member or above in the workspace. All routes act on the workspace of the authenticated key; the master view is rejected on every route.Worked Example: From the Register to a Handled Deadline
List the active contracts, open the 360 view of one, then look at the key dates that fall inside the next 90 days. The register is not paginated and is ordered by counterparty, then contract key, so a filter on status or q is the way to narrow it.
cURL: 1. Find the contract
curl "https://api.talonic.com/v1/contracts?status=active&q=stadtwerke" \
-H "Authorization: Bearer $TALONIC_API_KEY"Response: Register entries
{
"data": [
{
"id": "6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11",
"contract_key": "1043020-WLV",
"title": "Waermelieferungsvertrag",
"counterparty": "Stadtwerke Musterstadt GmbH",
"status": "active",
"effective_date": "2021-01-01",
"expiry_date": "2026-12-31",
"notice_deadline": "2026-06-30",
"auto_renewal": true,
"annual_value": 184000,
"currency": "EUR",
"direction": "sell",
"direction_source": "read",
"documents": 4,
"next_date": { "kind": "notice_deadline", "due_date": "2026-06-30", "days_left": 56 },
"processes": { "open": 2, "next_due": "2026-06-30", "departments": ["legal", "sales"] }
}
]
}Open the 360 view with the contract id to see each term together with its source passage, then record the decision once the contract has been dealt with. The decision recomputes the contract, so the response is the contract in its new state.
cURL: 2. Read the 360 view and record a decision
curl "https://api.talonic.com/v1/contracts/6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11" \
-H "Authorization: Bearer $TALONIC_API_KEY"
curl -X POST "https://api.talonic.com/v1/contracts/6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11/decision" \
-H "Authorization: Bearer $TALONIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"state": "notice_sent", "note": "Notice letter posted on 2026-05-02"}'The surface splits into six groups: the register and the 360 view, key dates, the process items the data starts, the import queue that reads documents for terms, the corrections a person makes to documents, terms and decisions, and the cleaning tools (issues, merge, reconcile and key rules) that keep one contract from being split across several keys.
expired only when it is folded again; the daily pass folds each contract once per calendar day. Use POST /v1/contracts/{id}/recompute to fold immediately after a correction made outside this API.