This post is just a recap of the saved product state feature.

What is Saved Product State?

Saved product state has been a part of the platform since the start of 2017 and its usage is gradually growing.

Saved product state represents all of the stateful data needed to accurately reproduce (i.e. reload or generate artwork) a user’s design for a specific product.

For example, if the user added some text to a text area and moved it by 50 pixels, it would be recorded as part of the saved state.

The user’s design can then be loaded at a later date in an app using the ps URL parameter.

Sounds like the same as Print Jobs and Samples?

Print jobs and samples do perform a similar task however they were designed 5-6 years ago and had hit a brick wall in terms of being able to accurately represent some of the advanced new features that have been added since.

For example, HTML WYSIWYG text support, dynamically sized print areas and variable print DPI cannot be handled with a standard print job or sample.

In the case of variable DPI, even though the DPI has nothing to do with the state of the product (i.e. user choices), artwork generation for saved state follows a newer path through the system and it is that path which provides support for variable DPI.

acp3_2 can be forced to use save state when creating print jobs or samples by using either the _usePs=1 URL parameter or via an app configuration.

The future of Print Jobs and Samples

Print jobs and samples will continue to exist and can now be powered by saved product state behind the scenes.

For example, when a user clicks “Add to Cart” in an app that has save state enabled, a dummy print job will be created that just references the saved product state.

This means that new features can be continued to be used by print jobs and samples without needing major changes to tools like Sample Manager and Print Manager.

In the long term, all new apps will use save state by default.

Recap on the differences

Print Jobs

Print Jobs are generally used in a one-off e-commerce context, where users add something to a shopping cart and pay for it.

Print Jobs can be loaded via the pj URL parameter. If the Print Job was created using saved state, the state information will automatically be loaded instead.


Samples are generally used in a promotional B2B context where a client requests a high quantity of a specific product with a design applied to it, for example 100 “Custom Gateway” mugs.

The sample is created according to the client’s specification using the Visualiser tool which produces a PDF proof that can then be sent to the client for approval.

Samples can be loaded via the su parameter. As with print jobs, if the sample was created using saved state then the state information will be automatically loaded instead.

Visualiser already uses save state when creating a sample.

Using samples simply as a way of allowing a user in a B2C context to reload a previous design is not recommended and should be avoided.

Saved Product State

Saved product state can be used to power print jobs and samples but can also be used standalone, for example allowing the user to save their design for if they would like to purchase it at a later date.

Saved product state can be reloaded using the ps URL parameter.

Using saved product state in this manner is covered in the developer documentation.