Record a payment against an expense
Records a full or partial payment against an expense and posts the payment journal entry from the given payment account (e.g. bank). Omitting amount pays the remaining balance. amount is the CHF (base-currency) book value, unlike invoice payments where it is in the invoice currency; a foreign-currency expense therefore refuses amount with 400 FW_AMOUNT_REQUIRED: send fwAmount (the amount paid in the expense currency) instead. The dashboard always does. The same rule applies to POST /revenue/{id}/receive. Currency errors (400): FX_RATE_UNAVAILABLE, FX_RATE_SOURCE_UNAVAILABLE (ESTV/BAZG unreachable, retry), INVALID_EXCHANGE_RATE, EXCHANGE_RATE_IMPLAUSIBLE (exchangeRate, or the rate baseAmount implies, outside 0.5x to 2x of the ESTV/BAZG rate of the payment date), AMOUNT_OUT_OF_RANGE, FW_AMOUNT_REQUIRED, PAYMENT_ACCOUNT_CURRENCY_MISMATCH, OPEN_ITEM_RATE_MISSING (the expense has no stored rate, so its open item has no CHF book value), PAYMENT_EXCEEDS_OPEN (fwAmount above what is still open; the expense row is locked for the payment, so a concurrent payment is seen). zeroSaldoSkipped reports a zero-saldo realization that was not booked.
Request
- Base URL: https://api.lumabill.ch/v1
- URL: https://api.lumabill.ch/v1/expenses/{id}/pay
- Auth: HTTP bearer
Request body
Example request
{
"paidDate": "2026-06-30",
"amount": 84.5
}Response
Payment recorded
Example response
{
"fx": {
"currency": "CHF"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.