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
| Tool | Cost | Effect |
|---|---|---|
create_draft | 0 credits | Persist staged write; returns draft_id |
validate_draft | 0 credits | Re-run validation; returns {valid, errors[]} |
approve_draft | Underlying op | Performs real write; charges once |
reject_draft | 0 | Soft-delete draft |
get_draft / list_drafts | 0 | Read 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.
- ✨ For LLMs/AI assistants: Read our structured API reference