Separate reimbursable and non-billable costs
The billable flag decides whether a cost can be rebilled. An expense with no client is stored non-billable by default; it only counts as billable if it was logged with billable: true explicitly. update_expense moves a cost between the two sides by setting the client and the flag together.
Written and reviewed by the Billr team. Published , last reviewed .
- Who this is for
- Studios and freelancers whose expense book mixes client costs with their own software, travel and office spending.
- Billr capabilities used
update_expenselist_expenseslog_expense
What you need first
- Expenses already logged, either from an agent or the dashboard.
- A key with the Read and draft profile.
- A view on which costs are the client business and which are your own overhead.
Step by step
01Split the two sides
list_expenseswithbillable: truereturns costs that can be rebilled, andbillable: falsereturns overhead. Addingbilled: "unbilled"narrows to what has not reached an invoice.list_expenses { "billable": false, "from": "2026-09-01", "to": "2026-09-30" }02Move a cost to the client side
Reassignment and the billable flag belong together: without a client, a cost cannot be attached to a client invoice even if the flag is true.
update_expense { "expense_id": "d41b8e93-2a70-4c15-9b6f-5e8a1c3d7f08", "client_name": "Harbor & Lane", "billable": true, "vendor": "Cafe Meridian" }03Take a cost back off the client side
Set
billable: falsewhen the business is absorbing the cost after all. The expense stays in the book for your own reporting and stops being eligible for a client invoice.04Read the totals by currency
list_expensesreturnstotals_by_currency, so a month that spans two currencies reports two honest totals instead of one meaningless number.
Worked example
Fictional account, field names as returned by the server
You say
The Cafe Meridian lunch is on us, not on Harbor & Lane.
Your agent calls
update_expense { "expense_id": "d41b8e93-2a70-4c15-9b6f-5e8a1c3d7f08", "billable": false }
Expected response, abridged
{
"summary": "Updated expense: $47.50 on 2026-09-29",
"expense": {
"id": "d41b8e93-2a70-4c15-9b6f-5e8a1c3d7f08",
"description": "Client lunch",
"amount": 47.5,
"is_billable": false,
"is_billed": false
}
}Limits and gotchas
- An expense already attached to an invoice cannot change sides; correct the draft invoice instead.
- Billability is per expense, not per category, so two meals can sit on opposite sides.
- Expenses never appear in revenue totals; they belong to cost tracking, not income.
- There is no client-facing expense report in the product today.
Troubleshooting
- A non-billable cost showed up on an invoice
- Check whether it was attached before the flag changed. Attached lines stay on the document, and only a draft can be corrected.
- list_expenses returns nothing for a month
- Confirm the date range and the
billableorbilledfilter. The defaults are permissive, but a narrow filter with no matches looks exactly like an empty book. - Totals look wrong across currencies
- Read
totals_by_currencyrather than adding the numbers yourself; the server refuses to blend currencies.
Sources
Reviewed 2026-09-20 against Billr's own tool implementations and the client documentation linked above.
Read next
Expenses stay out of revenue entirely: only invoices are money in, which is why the expense book never distorts the revenue summary.
Review revenue