Changes and deprecations
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /start/changes.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.
What v1 and v2 mean
Section titled “What v1 and v2 mean”v1 and v2 are part of each operation’s path. They aren’t two versions of the whole API, and both are current. The v2 operations cover sales orders, quotes, their lines, jobs, shipments, invoices and payments. The v1 operations cover customers, products, settings, webhooks, exports and reports. One key calls both. See Base URL and versions.
There’s no version header and nothing to pin. An operation changes in place, at its own path.
What to expect
Section titled “What to expect”- Additions come without notice. YoPrint adds operations, fields in answers, optional fields in requests and error codes as it builds features. Write your code to ignore fields and codes it doesn’t know.
- Replacements are marked first. When a newer operation or field replaces an older one, the reference marks the old one Legacy or deprecated and names the new one. Deprecated operations also say so in every answer (see below).
- Nothing deprecated has a removal date yet. Each deprecated operation and field keeps working for now. When one gets a date, it’s added on this page.
How a deprecated operation tells you
Section titled “How a deprecated operation tells you”Every answer from a deprecated operation carries two headers:
Deprecation: @1794009600X-YoPrint-Successor: POST /v2/api/store/{team_slug}/v2/invoice/filterDeprecationis when the operation was deprecated, in seconds since 1970 (RFC 9745).@1794009600is November 7, 2026.X-YoPrint-Successoris the method and path of the operation to use instead.
There’s no Sunset header yet. To find the calls you still need to move, log any answer that has a Deprecation header, with its successor.
The deprecated operations
Section titled “The deprecated operations”These 18 operations send the headers. Some of them no longer work at all, as their reference pages say. Move each one to its successor.
Invoices
- GET List invoices (v1)
/, use POST Filter invoicesv1/ api/ store/ {team_slug}/ invoice /v2/ api/ store/ {team_slug}/ v2/ invoice/ filter - GET Get an invoice (v1)
/, use GET Get an invoicev1/ api/ store/ {team_slug}/ invoice/ {hash_id} /v2/ api/ store/ {team_slug}/ v2/ invoice/ {unique_key} - PUT Change an invoice number (v1)
/and PATCH Change an invoice number (v1) (same as PUT)v1/ api/ store/ {team_slug}/ invoice/ {hash_id} /, use PUT Update an invoicev1/ api/ store/ {team_slug}/ invoice/ {hash_id} /v2/ api/ store/ {team_slug}/ v2/ invoice/ {unique_key}
Sales orders and quotes
- POST Filter sales orders (retired v1)
/, use POST List sales ordersv1/ api/ store/ {team_slug}/ sales_order/ filter /v2/ api/ store/ {team_slug}/ v2/ sales_order/ filter - POST Filter quotes (retired v1)
/, use POST List quotesv1/ api/ store/ {team_slug}/ quote/ filter /v2/ api/ store/ {team_slug}/ v2/ quote/ filter - GET Get an order's history (retired v1)
/, use GET List the history of a sales order or quotev1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ history /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {order_unique_key}/ history - GET List the messages of an order (v1)
/, use GET List the messages of an orderv1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ message /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ message - POST Send a message to the customer (v1)
/, use POST Send a message to the customerv1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ message /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ message
Jobs and shipments
- GET Get a job (retired)
/, use GET Get one job of an orderv1/ api/ store/ {team_slug}/ job/ {hash_id} /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ job/ {job_id} - PUT Change a job's status (retired)
/, use PUT Change a job's statusv1/ api/ store/ {team_slug}/ job/ {hash_id}/ status /v2/ api/ store/ {team_slug}/ v2/ job/ {hash_id}/ status - PATCH Delete all shipments of an order (retired)
/, use DELETE Delete a shipmentv2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ shipment/ delete_all /for each shipmentv2/ api/ store/ {team_slug}/ v2/ shipment/ {unique_key}
Card payments
- PUT Refund a card payment (v1)
/, use PUT Refund a card payment through the gatewayv1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ payment_gateway_refund/ {id} /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ payment_gateway_refund/ {id} - POST Check a pending card payment (v1, not usable)
/, use GET List the payments of a sales orderv1/ api/ store/ {team_slug}/ sales_order/ poll_pending_payment /v2/ api/ store/ {team_slug}/ v2/ sales_order/ {hash_id}/ payment - POST Prepare a card payment (v1)
/, POST Charge a card through the gateway (v1)v1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ payment/ {payment_gateway}/ pre_execute /, POST Start a Square Terminal checkout (v1)v1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ payment/ {payment_gateway} /and PATCH Cancel a Square Terminal checkout (v1)v1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ square_terminal/ create /: their v2 successors are internal, built for YoPrint’s own payment screens. See Cards and the API.v1/ api/ store/ {team_slug}/ sales_order/ {hash_id}/ square_terminal/ {checkout_id}/ cancel
Deprecated fields
Section titled “Deprecated fields”Some answers still carry an older copy of a newer field, such as an order’s calc_total. The reference marks each one deprecated. See Deprecated fields for each field and the one to read instead.
Changes
Section titled “Changes”November 2026
Section titled “November 2026”- This site. The API reference, guides and concepts are public at developer.yoprint.com, with a Markdown copy of every page and the OpenAPI file.
- Bearer keys. Send your key as
Authorization: Bearer YOUR_API_KEY. The older ways (the key alone inAuthorization, oruser_api_keyin the query string or body) keep working. See Authentication. - Plan check. Requests for a team without API access answer
403api_access_not_in_plan, and its webhooks stop delivering until the team is back on a plan with it. - Deprecation headers. The 18 operations above send
DeprecationandX-YoPrint-Successor. - A key can’t manage itself. Reading, creating or resetting your key through the API answers
403self_credential. Manage it in Profile. - Purchase orders for Zapier. GET Get a purchase order
/and PUT Change a purchase order's statusv1/ api/ store/ {team_slug}/ purchase_order/ {hash_id} /work again at their v1 paths.v1/ api/ store/ {team_slug}/ purchase_order/ {hash_id}/ status - Payments and credit. An
amountwith decimals on a payment, a refund or any customer credit call answers422validation_failedinstead of500. Nothing is recorded. - Customers and contacts. Creating, updating or upserting a customer or a contact ignores
is_externalandexternal_type, so a value read back and sent again can’t make a record read-only. - Customer assignment. Assigning a user who isn’t a member of the team answers
422(error.fields.user_id). Unassigning someone who isn’t assigned changes nothing and answers200with the list. - Customer export. The customer CSV export leaves out deleted contacts.
- Profile. The API Access card shows when your key was last used, and a first request to copy.
