Corrections and Decisions
Record a decision, set or clear a term with its quote, change a document role or key, remove a document, re-read or recompute a contract. All audited per key.
The platform reads documents, and people correct what it read. The routes on this page are the corrections: a decision on the contract, a change to how one document counts, a value set by hand, a re-read and a recompute. Every correction persists across re-reads and rebuilds, and every edit of a contract document appends an audit entry with the actor (the calling key as api:<key id>) and the optional note. The 360 view returns that history per document.
Decisions
POST /v1/contracts/{id}/decision records terminated, notice_sent, renewal_declined or active; active withdraws an earlier decision. The decision is recorded with actor kind app and id api:<key id>, then the contract is recomputed and returned in its new state. A notice that was sent or a renewal that was declined fixes the term the notice was given for, so the end in force changes accordingly.
/v1/contracts/{id}/decisionBody fields
Document Role, Exclusion and Key
PUT /v1/contracts/{id}/documents/{rowId} changes how one document counts. role is one of master, amendment, renewal, termination, price_sheet, correspondence or other; excluded leaves the document out of the fold (a withdrawn draft, a misfiled letter); contract_key files the document under another contract. A key set this way is hand-set, so re-extraction keeps it, and null returns the document to its derived key. rowId is the id of the entry in the contract's documents, not the document id. The response is 200 with the recomputed contract, which is the contract the document is filed under after the change when the key changed.
/v1/contracts/{id}/documents/{rowId}Body fields
/v1/contracts/{id}/documents/{rowId}Setting a Term
POST /v1/contracts/{id}/documents/{rowId}/terms gives one term of one document one of three answers. With value and quote, the value counts only when the quote occurs in the document and prints the value; otherwise the request is refused with 422 and nothing is saved. With clear: true, the document is recorded as not stating the term, because it was read wrongly, and that answer holds across re-reads. With state: "not_maintained", the term is deliberately empty in the contract and in the ERP.
Clearing and not_maintained each need a note, and they are exclusive: neither combines with the other, with value or with quote. The fields title and is_draft cannot be not_maintained. field is one of the term vocabulary: title, counterparty, our_party, our_side, family, site, signed_date, effective_date, service_start, expiry_date, initial_term_months, auto_renewal, renewal_term_months, notice_days, notice_months, terminated_on, annual_value, currency, escalation_pct, escalation_date, min_commitment, cap_amount, payment_terms_days, governing_law, is_draft.
/v1/contracts/{id}/documents/{rowId}/termsBody fields
cURL: Set a notice period with its quote
curl -X POST "https://api.talonic.com/v1/contracts/6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11/documents/d2a8e1f4-9b3c-4d57-a6e0-1c5f8b7a2d93/terms" \
-H "Authorization: Bearer $TALONIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"field": "notice_months",
"value": 6,
"quote": "Die Kuendigungsfrist betraegt sechs Monate zum Vertragsende.",
"note": "Model read 3 months from a table footnote"
}'cURL: Mark a term as deliberately empty
curl -X POST "https://api.talonic.com/v1/contracts/6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11/documents/d2a8e1f4-9b3c-4d57-a6e0-1c5f8b7a2d93/terms" \
-H "Authorization: Bearer $TALONIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"field": "governing_law", "state": "not_maintained", "note": "Not kept in the ERP"}'Re-read and Recompute
POST /v1/contracts/{id}/reread queues one document row (document_row_id) or all of the contract's documents for a forced re-read of their terms; the body is optional. Hand-set values and roles survive the re-read. The response is 201 with the queued and skipped counts. POST /v1/contracts/{id}/recompute folds the contract again as of today and rebuilds its process items, with no model call. The change is announced to the other apps only when what they see changed.
/v1/contracts/{id}/rereadBody fields (optional)
/v1/contracts/{id}/recomputeResponse: 422 when the quote does not print the value
{
"statusCode": 422,
"code": "VALIDATION_ERROR",
"error": "Unprocessable Entity",
"message": "Not saved: the quote does not occur in the document.",
"retryable": false,
"timestamp": "2026-05-06T09:12:44.000Z",
"path": "/v1/contracts/6f1c2a9e-1d4b-4a7e-9c33-2b8a5e0d7f11/documents/d2a8e1f4-9b3c-4d57-a6e0-1c5f8b7a2d93/terms"
}notice_months or payment_terms_days are exempt from the "prints the number" check, because the document may state "6 Monate" or "sechs Monate" for the value 6.