Updates an expense by its ID (EXP-...). You can set its description, invoice_number, status, vat_amount, category, and accounting fields (tax rate, vendor, payment account, expense account). Send only the fields you want to change.
status is one of incomplete, pending_review, ready, or synced. If you don't send status, an incomplete expense moves to pending_review automatically once it's ready for review, for example when all required fields are filled.
The response is the updated expense. Unknown category or accounting identifiers return 422 with VALIDATION_ERROR, and an unknown expense ID returns 404. For the full expense fields, see the Expense object.
Prefer Update Expense TransactionUpdate expense transaction accepts either the transaction ID or the expense ID, returns the full transaction with its receipts, and validates more strictly. This endpoint has its own rules:
- The category field is
expense_category_identifier, notcategory_identifier.- Identifiers must exist, but disabled accounting records are accepted.
- A vendor's currency isn't checked against the transaction's.
vat_amountis read as an absolute value (a negative number becomes positive), with no upper limit.- A
nullidentifier is rejected, so you can't clear a field here. Use Update Expense Transaction for that.
429Too many requests. You sent more than 100 requests in 30 seconds from one IP address. This response has no JSON body. See Rate limits.