Method & PathPermissionPurposeSide effects
GET expenses / GET expenses/{expense}expense.viewList / detail—
POST expensesexpense.manageCreate draftComputes tax from the linked tax rate
DELETE expenses/{expense}expense.manageDelete draft—
GET expenses/{expense}/pdfexpense.viewStream PDF with signature block—
GET/POST expenses/{expense}/attachmentsexpense.view/expense.manageAttachments (e.g. receipts)Stores file, audit
GET expenses/{expense}/historyexpense.viewWorkflow history—
POST expenses/{expense}/submit | /review | /approve | /reject | /reverseexpense.submit/review/approve/reject/reverseWorkflowapprove posts to ledger (402 usage_limit_reached at the monthly transaction cap); reverse submits a reversing entry for approval