Expenses
Recorded expenses with line items and totals.
/expensesList expenses
Returns a cursor-paginated list of expenses for the authenticated organization. Soft-deleted expenses are excluded. Results are ordered by document id for stable, complete cursor coverage; each object still carries createdAt for client-side sorting. Requires scope: expenses:read.
Response 200
Errors
/expensesCreate an expense
Creates a new expense for the authenticated organization. You must provide a vendorName or at least one item; otherwise the request is rejected. The expense status is always set to "created" and the actor (createdBy) is the API key's issuing member, never a request body field. Supports idempotent retries via the Idempotency-Key header. Requires scope: expenses:write.
Request body
vendorNamedatereferenceNopaymentMethodtotaltaxcurrencyappointmentIdappointmentUuidappointmentDocIdreimburseToIdreimburseToNameorganizationCompanyIdorganizationCompanyNameorganizationCompanyLogoUrlitemsidnamedescriptionamountcategoryIdappointmentIdResponse 201
idobjectvendorNamedatereferenceNopaymentMethodtotaltaxcurrencyappointmentIdappointmentUuidappointmentDocIdreimburseToIdreimburseToNameorganizationCompanyIdorganizationCompanyNameorganizationCompanyLogoUrlitemsidnamedescriptionamountcategoryIdappointmentIdstatuscreatedAtupdatedAtErrors
/expenses/{id}Retrieve an expense
Returns a single expense by id. A record belonging to another organization returns 404 rather than 403, so this can never confirm cross-tenant existence. Requires scope: expenses:read.
Parameters
Path
idrequiredResponse 200
idobjectvendorNamedatereferenceNopaymentMethodtotaltaxcurrencyappointmentIdappointmentUuidappointmentDocIdreimburseToIdreimburseToNameorganizationCompanyIdorganizationCompanyNameorganizationCompanyLogoUrlitemsidnamedescriptionamountcategoryIdappointmentIdstatuscreatedAtupdatedAtErrors
/expenses/{id}Update an expense
Updates an existing expense. Only the fields present in the request body are changed. The post-merge state must still have a vendorName or at least one item, otherwise the request is rejected. Returns 404 if the expense does not exist, belongs to another organization, or has been soft-deleted. Requires scope: expenses:write.
Parameters
Path
idrequiredRequest body
vendorNamedatereferenceNopaymentMethodtotaltaxcurrencyappointmentIdappointmentUuidappointmentDocIdreimburseToIdreimburseToNameorganizationCompanyIdorganizationCompanyNameorganizationCompanyLogoUrlitemsidnamedescriptionamountcategoryIdappointmentIdResponse 200
idobjectvendorNamedatereferenceNopaymentMethodtotaltaxcurrencyappointmentIdappointmentUuidappointmentDocIdreimburseToIdreimburseToNameorganizationCompanyIdorganizationCompanyNameorganizationCompanyLogoUrlitemsidnamedescriptionamountcategoryIdappointmentIdstatuscreatedAtupdatedAtErrors
/expenses/{id}Delete an expense
Soft-deletes an expense. The record is retained internally but no longer appears in list or retrieve responses. Returns 404 if the expense does not exist, belongs to another organization, or was already soft-deleted. Requires scope: expenses:write.
Parameters
Path
idrequiredResponse 200
idobjectdeleted