expense_update
Edits an expense's own fields only — status and approval stamps refuse with VALIDATION_ERROR here since those are transitions (expense_submit, expense_approve, expense_reject, expense_reimburse). amount_cents, if changed, must stay integer CENTS. Only the expense's own creator may edit it, and content freezes once the row is 'pending', reimbursed, or approved by someone else — draft, rejected, and your own self-approved rows stay editable.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The expense id (expense_list shows them). | |
| notes | No | ||
| status | No | ||
| vendor | No | ||
| currency | No | ||
| ocr_json | No | ||
| tax_type | No | ||
| tags_json | No | ||
| approved_at | No | ||
| approved_by | No | ||
| category_id | No | ||
| receipt_key | No | ||
| rejected_at | No | ||
| amount_cents | No | ||
| expense_date | No | ||
| submitted_at | No | ||
| tax_rate_bps | No | ||
| recurrence_id | No | ||
| reimbursed_at | No | ||
| subtotal_cents | No | ||
| rejection_reason | No | ||
| tax_amount_cents | No | ||
| expected_updated_at | No | Optional compare-and-set guard: the updated_at you last read. Mismatch returns CONFLICT with the current value. |