curl --request GET \
--url https://api.print.app/v2/settings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.print.app/v2/settings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.print.app/v2/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.print.app/v2/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.print.app/v2/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.print.app/v2/settings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "settings",
"editor": "new",
"autoSaveProjects": false,
"autoSaveDuration": 8,
"autoExpireProjects": false,
"projectLifetime": 1,
"skipPreview": false,
"expandThumbNav": true,
"showTabTitle": true,
"enableSaveLater": false,
"defaultLayout": "",
"layout": "",
"displayMode": "modal",
"showGraphicsTitle": false,
"graphicsSearchCustomers": false,
"graphicsSearchScope": "store",
"enableColorProofing": false,
"bleedLineColor": "#F3343C",
"marginLineColor": "#84cc16",
"trimLineColor": "#8b5cf6",
"foldLineColor": "#fde047",
"borderColor": "#2563eb",
"decimalPointTextSize": true,
"autoPlaceNewText": true,
"autoTextSize": true,
"newTextSize": 40,
"defaultTextType": "Textbox",
"defaultNewTextString": "Type into your new\ntext",
"defaultNewHeadingString": "Add a heading",
"hoverShow": true,
"enableSnapping": true,
"snapRange": 5,
"gridLinesInterval": 20,
"bleedLineMessage": "Bleed line",
"marginLineMessage": "Margin line",
"trimLineMessage": "Trim line",
"retainProductImages": false,
"forceCustomization": false,
"disableCustomization": false,
"customPreviewSelector": "",
"cartButtonSelector": "",
"customVariantSelector": "",
"inlineSelector": "",
"miniSelector": "",
"moveButtonsBefore": "",
"buttonsClass": "",
"observeFormRerenders": false,
"collectionButtons": false,
"sideBarColor": "#FFFFFF",
"editorTheme": "system"
}{
"error": true,
"code": "unauthorized",
"message": "Missing or invalid secret key. Send it as \"Authorization: Bearer sk_…\".",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "account_suspended",
"message": "This account is suspended. Settle the outstanding invoice in the Print.App dashboard.",
"requestId": "FZn-uhymjoEEJow="
}{
"message": "Too Many Requests"
}{
"error": true,
"code": "internal_error",
"message": "Something went wrong on our side. Retry the request; if it keeps failing, contact support with the requestId.",
"requestId": "FZn-uhymjoEEJow="
}Get the settings
Returns the account’s editor and product page settings, and the editor in use. A design’s own settings, over these, are on the design (settings).
curl --request GET \
--url https://api.print.app/v2/settings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.print.app/v2/settings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.print.app/v2/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.print.app/v2/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.print.app/v2/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.print.app/v2/settings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "settings",
"editor": "new",
"autoSaveProjects": false,
"autoSaveDuration": 8,
"autoExpireProjects": false,
"projectLifetime": 1,
"skipPreview": false,
"expandThumbNav": true,
"showTabTitle": true,
"enableSaveLater": false,
"defaultLayout": "",
"layout": "",
"displayMode": "modal",
"showGraphicsTitle": false,
"graphicsSearchCustomers": false,
"graphicsSearchScope": "store",
"enableColorProofing": false,
"bleedLineColor": "#F3343C",
"marginLineColor": "#84cc16",
"trimLineColor": "#8b5cf6",
"foldLineColor": "#fde047",
"borderColor": "#2563eb",
"decimalPointTextSize": true,
"autoPlaceNewText": true,
"autoTextSize": true,
"newTextSize": 40,
"defaultTextType": "Textbox",
"defaultNewTextString": "Type into your new\ntext",
"defaultNewHeadingString": "Add a heading",
"hoverShow": true,
"enableSnapping": true,
"snapRange": 5,
"gridLinesInterval": 20,
"bleedLineMessage": "Bleed line",
"marginLineMessage": "Margin line",
"trimLineMessage": "Trim line",
"retainProductImages": false,
"forceCustomization": false,
"disableCustomization": false,
"customPreviewSelector": "",
"cartButtonSelector": "",
"customVariantSelector": "",
"inlineSelector": "",
"miniSelector": "",
"moveButtonsBefore": "",
"buttonsClass": "",
"observeFormRerenders": false,
"collectionButtons": false,
"sideBarColor": "#FFFFFF",
"editorTheme": "system"
}{
"error": true,
"code": "unauthorized",
"message": "Missing or invalid secret key. Send it as \"Authorization: Bearer sk_…\".",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "account_suspended",
"message": "This account is suspended. Settle the outstanding invoice in the Print.App dashboard.",
"requestId": "FZn-uhymjoEEJow="
}{
"message": "Too Many Requests"
}{
"error": true,
"code": "internal_error",
"message": "Something went wrong on our side. Retry the request; if it keeps failing, contact support with the requestId.",
"requestId": "FZn-uhymjoEEJow="
}Authorizations
A secret key from Print.App admin → Domains → Secret keys, sent as Authorization: Bearer sk_…. Server-side only.
Response
OK.
The account's editor and product page settings that the API manages. Settings that run code in the store (custom JS and CSS), send data elsewhere (webhooks) or are files are left out; manage them in the dashboard.
"settings"The editor the account uses. Read-only: switch editors in the dashboard.
new, classic Projects save in the background before the customer submits.
Days after which an auto-saved project that was never submitted is deleted.
2 <= x <= 366Every project is deleted after projectLifetime days.
Days a project is kept, when autoExpireProjects is on.
1 <= x <= 120The Submit button skips the preview step.
Page thumbnails instead of arrows to move between pages.
Labels on the editor's tabs.
Customers can save a design and finish it later. On here, it is on for every design.
Classic editor only: the sidebar on the left ("") or the right (default-right).
, default-right, null New editor only: the layout customers get. "" default, default-right sidebar on the right, product product designer, steps one step at a time, approve view and approve. Designs can override it in the editor.
, default-right, product, steps, approve, null How the editor opens on the product page: modal full window, dialog a dialog, inline inside the page at inlineSelector, mini beside the product images at miniSelector.
modal, dialog, inline, mini, null Show the titles of graphics that have one.
A search box in the Graphics panel for customers, on every design.
What the graphics search covers: store the print.app store, mine your own graphics, both.
store, mine, both, null A colour proof (ICC soft proof) when customers preview their designs, on every design.
Colour of the bleed line on the canvas.
Colour of the safe margin line on the canvas.
Colour of the trim line on the canvas.
Colour of fold lines on the canvas.
Colour of the border around a selected item.
Font sizes with decimals (10.5 pt).
New text goes straight onto the canvas, without clicking the canvas first.
Size new text to fit the screen.
Size of new text, when it is not sized to fit.
10 <= x <= 100What new text is: Textbox wrapping text box, IText a text area.
IText, Textbox, null Content of a new body text item.
500Content of a new heading.
200Highlight the item under the mouse.
Snap items while dragging them.
How close, in pixels, an item snaps.
3 <= x <= 20Gap between grid lines.
5 <= x <= 100Label on the bleed line.
100Label on the safe margin line.
100Label on the trim line.
100Keep the product photos: the customer's design does not replace them after saving.
Customers must customize before they can add the product to the cart.
Hide the Customize button on every product page, so no one can customize. Only for a store that sells without the editor for a while.
CSS selector for the product images the design previews replace, when the theme's differ from what Print.App looks for.
500CSS selector for the add-to-cart button, when the theme's differs from what Print.App looks for.
500CSS selector for the field holding the chosen variant's id, when the theme's differs.
500CSS selector for where the editor sits with displayMode inline.
500CSS selector for where the editor sits with displayMode mini.
500CSS selector: the Customize button goes just before this element.
500CSS classes for the Customize button, to match the theme's buttons (default button).
200Remount the editor when the product form changes, for themes that redraw it.
Shopify: a Customize button on every customizable product in collection and search grids.
Colour of the editor's side bar.
The editor's theme: light, dark or system.
light, dark, system, null