Drafts & Approval

Crane Ledger provides a draft → validate → approve workflow for MCP agent writes. Nothing reaches your books until an approver commits the draft.

Why drafts?

Agent-facing ledgers need a credible trust story: agents can prepare financial changes, the system validates them (balancing, required fields, valid entities), and a human or privileged caller approves before posting.

MCP tools

ToolCostEffect
create_draft0 creditsPersist staged write; returns draft_id
validate_draft0 creditsRe-run validation; returns {valid, errors[]}
approve_draftUnderlying opPerforms real write; charges once
reject_draft0Soft-delete draft
get_draft / list_drafts0Read draft status

create_draft accepts operation (e.g. create_transaction) and payload (the same JSON the underlying write tool would use).

Organization policy

Set require_draft_approval=true on an organization to block direct write tools for MCP callers. Agents receive a message pointing to the draft flow. approve_draft always bypasses this gate.

Optional books_closed_through date rejects transaction drafts on or before that date during validation.

REST API

Drafts are also available via REST (same auth as other endpoints):

POST   /organizations/{org_id}/drafts
GET    /organizations/{org_id}/drafts
GET    /organizations/{org_id}/drafts/{draft_id}
POST   /organizations/{org_id}/drafts/{draft_id}/validate
POST   /organizations/{org_id}/drafts/{draft_id}/approve
POST   /organizations/{org_id}/drafts/{draft_id}/reject

Example flow

// 1. Stage
{ "operation": "create_transaction", "payload": { "description": "...", "transaction_date": "2026-06-30", "entries": [...] } }

// 2. Validate (catches unbalanced entries before approval)
{ "draft_id": "DRFT_..." }

// 3. Approve (posts to ledger)
{ "draft_id": "DRFT_..." }

Need help?

Create a free account to access our support portal. Once signed in, use the Support tab in your dashboard to submit a support ticket — our team typically responds within 24 hours.