Filter invoices
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /reference/invoices/v2-invoice-filter.md. Index of every page and the rules for every call: /llms.txt. Guides and concepts in one file: /llms-full.txt. OpenAPI: /openapi.json.
POST/
Returns one page of your team's invoices that match the filters, newest first unless you sort. Invoices of sales orders and of quotes are both included (filter on quote); invoices of deleted, draft or unsaved orders are not.
Each filter needs key, operator and value, and every filter must match. A filter that breaks the table is a 422 whose message is the bare rule name validation.filter_rule.
key |
operator |
value |
|---|---|---|
payment_status |
eq |
paid (paid amount at least the total, total above 0), unpaid (total above the paid amount, total above 0), or overdue (unpaid, the order has a full payment due date set, and that date is before today in UTC). Invoices with a zero total or orders without a due date never match overdue. |
quote |
eq |
true for invoices of quotes, false for invoices of sales orders. |
order_status_id |
in, nin |
Sales order status hash ids. |
order_customer_id |
in, nin |
Customer hash ids. |
external_type |
in, nin |
shopify, native. |
order_issue_date, order_cust_due_date, order_ship_due_date, deposit_due, full_amount_due |
eq, gte, lte |
A whole number of days from today in UTC: 0 today, 7 a week ahead, -7 a week ago. Compared by date. |
created_at |
gte, lte |
Days from today, as above, but compared with the creation time: gte N includes that day, lte N stops at its first second, and eq matches almost nothing. |
sort is an array, but only its first entry is used. The page size is the team's list page size setting (50 unless changed); send page for later pages. count_only: true returns just pagination with empty data; with: ["items"] adds each invoice's lines.
This list covers invoices made in the current invoice system.
Business rules
- Dates are whole days from today in UTC, never absolute dates;
btisn't accepted. The order date keys compare whole days and include day N.created_atis compared with the creation time:gte Nstarts at 00:00 UTC of day N andlte Nstops at 00:00 UTC of day N. - The
quotefilter only supports theeqoperator. The backend ignores the operator and checks onlyvalue, so sendingneqbehaves identically toeq. Always useeqwithtrue(for quotes) orfalse(for sales orders).
Path parameters
Your team slug, shown as Team ID next to your API key in Profile.
- Example
your-team
- Example
Request body
application/json, optional.
count_onlybooleanReturn only the count in
pagination.- Default
false
- Default
filtersarray of objectsFields of each item (3)
- One of:
"payment_status","quote","order_status_id","order_customer_id","external_type","order_issue_date","order_cust_due_date","order_ship_due_date","deposit_due","full_amount_due","created_at"
- One of:
- One of:
"eq","neq","gte","lte","in","nin"
- One of:
pageinteger- Default
1 - Minimum 1
- Default
sortarray of objectsOnly the first entry is used. Default:
created_atdesc.witharray of stringsAdd each invoice's lines.
- Each item is one of:
"items"
- Each item is one of:
Response
200Successful response.
Fields of each item (42)
auto_invoice_managedbooleanYoPrint keeps this invoice in step with the order (Auto Invoice).
bill_to_statusstringHow Bill To compares with the order's.
- One of:
"okay","empty","diff_from_order","diff_from_customer"
- One of:
billing_addressobject | nullAn address.
Child fields (10)
address1string | nulladdress2string | nullcitystring | nullcountrystring | nullcountry_codestring | nullidstringThe address.
labelstring | nullpostcodestring | nullstatestring | nullstate_codestring | null
billing_address_idstring | nullBill To.
calc_deposit_totalinteger | number | string | nullThe order's deposit amount. Thousandths, an older encoding:
12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.cart_item_subtotaldecimal pairBilled sales order lines and shipping fees (price × quantity);
shipment_subtotalis the shipping part of it.total=cart_item_subtotal−discount_subtotal+tax_subtotal(+credit_card_surcharge). At the stored scale (4 decimal places). A decimal pair: the amount isvalue÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
created_atstring (date-time)credit_card_surchargedecimal pairA card surcharge added by a card payment; zero when there is none. Always sent. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
customerobject | nullThe customer (the full customer record).
deposit_duestring (date-time) | nullFrom the order. ISO 8601 with offset, or null.
deposit_requiredboolean | integer | nullFrom the order.
discount_subtotaldecimal pairDiscounts. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
external_typestring | nullfrom_legacybooleanfull_amount_duestring (date-time) | nullFrom the order. ISO 8601 with offset, or null.
idstringThe invoice.
is_externalbooleanis_paidbooleanPaid amount covers the total (also true for a zero total).
is_validbooleanFalse when the invoice needs fixing: no lines, lines without a tax line, or a customer that differs from the order's.
issue_datestring (date-time) | nullIssue date. ISO 8601 with offset, or null.
lock_versionintegerorderobjectThe sales order or quote in the v2 order shape: its header fields, with
statusandassigned_users, but noitems.order_idstringThe sales order or quote it bills.
order_object_typestring | nullsales_orderorquote.order_quotebooleanThe order is a quote.
order_scoped_idstring | nullThe order number.
paid_amountinteger | number | string | nullAllocated payments. Thousandths, an older encoding:
12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.pdf_urlarray of objectsPDF links.
Fields of each item (3)
labelstringobject_typestringurlstringA download link with its own long-lived access token: don't publish it.
scoped_idstring | nullThe invoice number.
ship_to_statusstring- One of:
"okay","empty","diff_from_order","diff_from_customer"
- One of:
shipment_subtotaldecimal pairShipping fees (already in
cart_item_subtotal). A decimal pair: the amount isvalue÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
shipment_tax_subtotaldecimal pairThe tax on shipping (included in
tax_subtotal). A decimal pair: the amount isvalue÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
shipping_addressobject | nullAn address.
- Same fields as
data[].billing_address.
- Same fields as
shipping_address_idstring | nullShip To.
tax_subtotaldecimal pairTax. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
totaldecimal pairThe invoice total. A decimal pair: the amount is
value÷ 10^dp({ "value": 1250, "dp": 2 }is 12.50). Readdpevery time: it can differ between fields and records.- See Money and quantities.
versionintegerDeprecated: use
shipment_subtotal, the same amount. Thousandths, an older encoding:12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.Deprecated: use
discount_subtotal, the same amount. Thousandths, an older encoding:12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.Deprecated: use
cart_item_subtotal, the same amount. Thousandths, an older encoding:12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.Deprecated: use
tax_subtotal, the same amount. Thousandths, an older encoding:12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.Deprecated: use
total, the same amount. Thousandths, an older encoding:12500is 12.50. Usually a whole number; an amount finer than a thousandth comes back as a number with a fraction (1234.5is 1.2345), or as a string ("1234.5") when you sendX-Yoprint-Decimal-Format: exact-v1. See Money and quantities.
paginationobjectChild fields (6)
Links to the neighbouring pages:
previousandnext, each present only when that page exists. An empty list,[], when there is only one page.
Errors
401The API key is missing or wrong (
unauthenticated).403You are not allowed to do this.
api_access_not_in_plan: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only{"message": "Insufficient Permission"}. Other refusals use the error envelope, withunauthorizedoruser_is_not_authorized.- When
- Your role can't view sales orders.
- Fix
- Ask the team owner for Manage Sales Orders view access.
404Not found.
page_not_found: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's.code: null, with a message that starts "No query results for": there is no record with that id.422The request was refused and changed nothing.
validation_failedlists what to fix inerror.fields; other codes name a business rule, explained inerror.message. A few checks answer with only{"message": "..."}. An operation that calls another service (a payment provider, a carrier, an accounting app) can answerconnect_timeout("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.- When
- A filter breaks the table (
validation.filter_rule) or a sort key isn't listed (validation.filter_sort_rule). - Fix
- Check each filter and sort entry against the table.
Related
- GETGet an invoice
/v2/ api/ store/ {team_slug}/ v2/ invoice/ {unique_key} - GETList invoices (v1)
/v1/ api/ store/ {team_slug}/ invoice - POSTDownload invoices as one PDF
/v1/ api/ store/ {team_slug}/ invoice/ export_pdf
