Skip to main content

Expenses

The Expenses API provides CRUD access to expenses, tags, the attach/detach action and clone.
New to the API? Start with Getting started (base URL, response envelope, errors, pagination) and Authentication (API keys).
Identifier note: expenses are addressed by their numeric expense_id.
Project & client are both optional and independent. When a project is linked, the client is forced to that project’s client; a conflicting client is rejected (422).
Scope: file attachments (upload/download), recurring schedules, per-user sticky notes & pinning, bulk change-category and invoice-integration are out of API scope. Existing attachments are returned read-only.

The expense object


List / search expenses

Query params: category_id, client_id, project_id, billable (billable/not_billable), billing_status, amount_min, amount_max, date_start, date_end, search, tags[], sort (expense_date,expense_amount,expense_created), order, limit, page.

Get an expense


Create an expense

Returns the new expense (201).

Update an expense

Same fields as create. The billable flag is not changed once the expense has been invoiced. Project/client consistency is enforced.

Delete an expense


Set tags

Full-set replace (empty clears).

Attach / detach (project & client)

Links the expense to a project and/or client. Either or both may be supplied; an empty value detaches. When a project is supplied the client is forced to the project’s client, and a conflicting client is rejected (422).

Clone

Copies the source expense into a new one (billing_status reset to not_invoiced; recurring schedules and tags are not copied). expense_date is required; the other fields optionally override the source. Returns the new expense (201).

Errors

See Getting started. Expense-specific: