List Sales Invoices
GET/api/sales-invoices
Paginated sales invoices with filters and sorts. Orders invoiced as a whole (per-order policy) appear as one invoice of kind order_mirror whose figures are the order's. Each row carries warnings — [{code, message}] review notes on a draft explaining why it was not issued automatically (locked_period: the shipment date falls in a locked accounting period; edi_price_mismatch: a price differs from the EDI purchase order); empty otherwise. Money values are 2-decimal strings; dates Y-m-d; timestamps ISO-8601 UTC.
orders:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Requires the orders:read scope and the sales_invoices.index permission.
Sorting or filtering by total or balance_due is refused with a 422 when more than 20,000 invoices match the other filters (narrow the filters first). Get Sales Invoice Summary reports this as amount_sort_available.
Due dates: due_date is the effective due date: the stored due date, else the invoice date plus the customer's payment terms, else the invoice date. due_date_is_derived is true when no due date is stored and it was worked out from terms. Drafts are never overdue. Due-status and due-date filters and sorts use the same effective date.
Channel-settled orders: an order invoice (order_mirror) whose order the sales channel marks paid, refunded or partially refunded has balance_due 0 and payment_status paid, whether or not payment records exist.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not Found
Response Headers
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.