Contracts
3 operations. Each REST operation is also an MCP tool of the same name. REST https://tlntconnect.com/api/v1
GET/api/v1/contract-templates
The same templates the app's contract library shows: the agency's own (non-archived) templates and the TLNT premades its workspace may use. Rows: id, name, slug, description, category, status, source_kind (tlnt_premade | agency_custom), updated_at. Templates are managed in TLNT. Admin members on keys with contracts:write only (a non-admin member is 403 role_forbidden).
list_contract_templatescontracts:write- admin
- Ignored (read)
- 1
Responses
GET/api/v1/contract-templates/{template_id}
The list row plus latest_version {id, version, title, body_markdown, merge_fields, created_at}. Another workspace's template is 404.
get_contract_templatecontracts:write- admin
- Ignored (read)
- 1
Input
template_id path, requiredstring (uuid) — Contract template id.Responses
POST/api/v1/contracts/agreements
Validates the agreement exactly as the app does (titles, parties, terms within their limits, unique clause ids, every term placeholder used) and the links (the creator on this roster; campaign_id one of that creator's campaigns; previous_file_id a structured agreement already published for that creator — 404 / 400 otherwise). Written confirmation in chat: the first call (no confirmation_token) sends nothing and answers 200 { status: "confirmation_required", preview: { signer, document, terms, clauses }, confirmation_token, expires_at } — the signer, the agreement title and parties, every term and the full clause text with the terms filled in. Show it to the user; only after they confirm in writing call again with the same arguments plus confirmation_token (single use, this credential only, valid 10 minutes). That call generates the PDF and publishes it in the creator's portal with a signature requested — the same path as the app — once, and answers 200 { status: "executed", action_id, result: { file_id } }. A token for other arguments, another credential, expired or already used is refused (409 confirmation_invalid / confirmation_expired / confirmation_used); a creator renamed or archived after the preview is 409 confirmation_stale. When the credential asks for approval in TLNT for agreement signatures, the call is queued for an admin instead (202 pending_approval). Requires contracts:write, an Idempotency-Key and an admin member.
request_agreement_signaturecontracts:write- admin
- Runs after written confirmation in chat; queued when the credential asks for approval for contract_signature
- required
- 1
preview.signer.name
Input
Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.creator_id body, requiredstring (uuid) — The roster creator who signs.campaign_id bodystring (uuid) | null — One of this creator's campaigns, when the agreement belongs to one.previous_file_id bodystring (uuid) | null — The agreement this one replaces (a published structured agreement for this creator).agreement body, requiredobjectconfirmation_token bodystring — Leave out on the first call: it answers status confirmation_required with the exact preview and this token, and sends nothing. Show the preview to the user; only after they confirm in writing, call again with the same arguments plus this token.