Printeers

V1 vs V2

If you're moving from V1 to V2, this page is a quick orientation.

V2 is a fresh design rather than a like-for-like upgrade, so the smoothest path is usually to write a new integration against V2 alongside your existing V1 code, then switch over once you're happy. The sections below walk through the conceptual differences and give you an endpoint mapping so you can find the V2 equivalent of what you use in V1.

Authentication

In V1 you sent two headers, X-IPP-PARTNERCODE and X-IPP-APIKEY. In V2 you send a single header:

X-Printeers-Secret-Key: <your_secret>

Your V1 partner code and API key won't work against V2. You'll generate a V2 secret key in the dashboard before your first call. See the Getting Started guide for the steps.

Base URL

Environment V1 V2
Production https://api.printeers.com/v1 https://api.printeers.com/v2
Test https://api.test-printeers.com/v1 https://api.test-printeers.com/v2

Field naming

V1 fields are snake_case (partner_reference, image_reference, shipping_kind). V2 fields are lowerCamelCase (customIdentifier, imageReference, shippingKind). When you port a request or response, you'll be renaming most field keys.

Response shape

V1 puts resource data at the top level of the response body. V2 wraps single-resource responses under a named field, and list responses under a field named for the resource:

// V1
{ "reference": "TESTCODE-123", "status": "..." }

// V2 (single)
{ "order": { "reference": "Order_...", "status": { ... } } }

// V2 (list)
{ "orders": [ ... ], "nextCursor": "..." }

See the Pagination guide for cursor-based list responses.

References

In V1 you identified resources with composite codes: store codes (TESTCODE), order references (TESTCODE-123), SKUs (PART0037). In V2 each resource has a typed, opaque reference of the shape <Resource>_<26 opaque characters>:

V1 V2
TESTCODE Store_x04rwj6knrhks8m19s8j6nc4z8
TESTCODE-123 Order_5x4rwj6knrhks8m19s8j6nc4z8
PART0037 Product_6rgpv1t48gswz36g7apj12xygc
numeric image id Image_pdcptbw3k48sv03wy338bb8jzm

Your old codes still appear on V2 resources as legacyCode / legacySku / legacyOrderCode fields so you can match them to V2 references during the move. These legacy fields will be removed in V3, so plan to switch your storage to V2 references over time. The /utilities/lookup-*-by-legacy-* endpoints help you translate codes you already have on file.

See the Items, Products and SKUs guide for how product identifiers map across versions.

Endpoint mapping

V1 V2
GET /stock GET /products, GET /productgroups, GET /items
GET /stock-attributes (no direct equivalent; attributes live on resources)
POST /images POST /images
POST /orders POST /orders
GET /orders/{reference} GET /orders/{orderReference}
GET /orders/by-partner-reference/{ref} GET /utilities/lookup-order-reference-by-custom-identifier then GET /orders/{orderReference}
POST /orders/{reference}/cancel-all-lines (not yet exposed in V2)
POST /render (deprecated in V1) POST /renders plus the render polling flow

V2 also adds areas that didn't exist in V1: claims, shipments, organization read endpoints, addresses, scenes/perspectives/compositions for renders, and warehouse items. You can adopt these as you need them.

Image upload

V1 accepts a base64-encoded JPEG/PNG inside a JSON body. V2 expects the raw image bytes as the request body with Content-Type: application/octet-stream. If you're porting a V1 upload routine, you can drop the base64 step.

Notifications

The orderUpdated callback you configured for V1 keeps firing for orders created via V2, so your existing notification handler continues to work. A broader webhook system covering more events is on our roadmap.

Errors

V1 and V2 both return a { "code": "...", "message": "..." } body for 4xx responses. The set of error codes differs per endpoint; see each endpoint's reference page for the codes you may receive.

Rate limiting

V2 publishes its rate-limit policies and returns a 429 Too Many Requests response with Retry-After, X-RateLimit, and X-RateLimit-Policy headers, so you can back off without guessing. V1 limits were implicit. See the Rate Limiting guide.

Versioning

V2 follows semantic versioning: additive changes ship as minor versions and won't break your client; breaking changes wait for the next major version. See the API Versioning guide for the deprecation policy and what counts as a non-breaking change.