Change an invoice number (v1)
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /reference/invoices/v1-invoice-update-put.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.
PUT/
Sets only the invoice number (scoped_id); nothing else on the invoice can change here. PUT and PATCH behave the same. Returns the invoice.
Prefer Update an invoice: it checks your sales order permission, can change the rest of the header in the same call, and lets the QuickBooks Online sync pick up the change. This route does none of that.
Side effects
- Saves the number only: no recalculation, no QuickBooks Online sync trigger, no refresh of open web app pages.
Path parameters
Your team slug, shown as Team ID next to your API key in Profile.
- Example
your-team
- Example
The invoice's hash id. Hash ids only: a unique key or a document number gives 404.
- Example
cBRpSf5nw6upt5
- Example
Request body
application/json, required.
The new invoice number, as a string. Not checked for duplicates.
Response
200Successful response.
An invoice. Amounts are decimal pairs at the stored scale (4 decimal places for invoice totals), except
paid_amountandcalc_deposit_total(thousandths). Thecalc_*totals are deprecated copies of the decimal-pair ones.Child fields (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.
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.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.- When
- The invoice isn't your team's.
- Fix
- Check the hash 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
scoped_idis missing or not a string.- Fix
- Send the number as a JSON string.
Related
- PUTUpdate an invoice
/v2/ api/ store/ {team_slug}/ v2/ invoice/ {unique_key}
