Invoice lifecycle
As an invoice moves through the accounts payable lifecycle, Ottimate assigns a status to track its progress through each stage. The status field is returned on every invoice object and is also accepted as a filter on GET /v1/invoices.
Invoice status values
Ottimate derives status from the invoice’s underlying state — you never set it directly.
Statuses are evaluated in priority order, not as independent flags. An invoice is matched against the conditions in this order: inactive, processing, needs-attention, exported, ready-for-export, pending-approval — and falls back to processing if none match. An invoice that is both flagged and exported, for example, resolves to needs-attention because that condition is evaluated first.
Inactive sub-statuses
When status is inactive, the sub_status field explains why. It is null for every other status.
archived is a sub_status, not a status. An archived invoice is returned as status: "inactive" with sub_status: "archived". Filtering for status=inactive returns archived, deleted, merged, and duplicate invoices together — inspect sub_status to distinguish them.
Filtering by status
Pass a comma-separated list to return invoices matching any listed status:
When passing more than one status:
- The date range must be within 30 days
- The
searchparameter cannot be used at the same time - If you pass no date filter at all, the last 30 days are used (
date_fromdefaults to 30 days ago anddate_toto now); if you do pass dates, your values are used as given and the 30-day limit still applies
Legacy filter values. approved, incomplete, and archived are accepted by the status query parameter but are never returned in an invoice’s status field. They filter on the raw underlying invoice state, which cuts across the six statuses above, and they are only accepted as a single value — they cannot be combined with other statuses.
Prefer the six documented statuses for new integrations.
An unrecognised status value is silently ignored. GET /v1/invoices?status=not-a-real-status returns 200 with count: 0 rather than a 400. A typo in a status filter looks identical to “no matching invoices” — validate the value on your side before sending it.
Updating the export status of one or more invoices
In Ottimate-hosted integrations, invoices exported to an ERP are tagged with the exported status. If you are fetching invoices for ERP export, you can set the export status of one or more invoices with the following:
Update Export Status and Flag Invoices
The marked_reason field in POST /v1/invoices/mark-unexported allows you to attach a note to the “Invoice History” tab. Apply notes to individual invoices or in bulk.

