curl --request PATCH \
--url https://api.print.app/v2/imposition-rules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"sections": [
{
"group": 50,
"pages": "<string>",
"order": [
50
],
"sheet": {
"width": 123,
"height": 123
},
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": true,
"fold": true
}
}
]
}
'import requests
url = "https://api.print.app/v2/imposition-rules/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"sections": [
{
"group": 50,
"pages": "<string>",
"order": [50],
"sheet": {
"width": 123,
"height": 123
},
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": True,
"fold": True
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
sections: [
{
group: 50,
pages: '<string>',
order: [50],
sheet: {width: 123, height: 123},
offset: {x: 0, y: 0},
marks: {crop: true, fold: true}
}
]
})
};
fetch('https://api.print.app/v2/imposition-rules/{id}', 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/imposition-rules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'sections' => [
[
'group' => 50,
'pages' => '<string>',
'order' => [
50
],
'sheet' => [
'width' => 123,
'height' => 123
],
'offset' => [
'x' => 0,
'y' => 0
],
'marks' => [
'crop' => true,
'fold' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.print.app/v2/imposition-rules/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.print.app/v2/imposition-rules/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/imposition-rules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "imposition_rule",
"id": "_imposition_1",
"title": "Book cover: back, spine and front as one spread",
"description": "Pages 1, 2 and 3 are the front cover, the spine and the back cover. The PDF joins them into one spread with the back cover on the left. Later pages print as they are.",
"builtIn": true,
"unit": "mm",
"sections": [
{
"pages": "1-3",
"group": 3,
"order": [
3,
2,
1
],
"direction": "horizontal",
"sheet": null,
"anchor": "center",
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": null,
"fold": null
}
}
],
"created": null,
"modified": null
}{
"error": true,
"code": "invalid_request",
"message": "width is required.",
"param": "width",
"requestId": "FZn-uhymjoEEJow="
}{
"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="
}{
"error": true,
"code": "not_found",
"message": "Not found.",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "folder_not_empty",
"message": "The folder still holds designs. Remove them from it (or delete them) first.",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "unsupported_media_type",
"message": "Send the request body as JSON, with \"Content-Type: application/json\".",
"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="
}Update an imposition rule
Changes the fields you send; sections replaces them all. Every design that uses it makes its next PDFs with it. Built-in rules cannot be changed (409 builtin_imposition_rule).
curl --request PATCH \
--url https://api.print.app/v2/imposition-rules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"sections": [
{
"group": 50,
"pages": "<string>",
"order": [
50
],
"sheet": {
"width": 123,
"height": 123
},
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": true,
"fold": true
}
}
]
}
'import requests
url = "https://api.print.app/v2/imposition-rules/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"sections": [
{
"group": 50,
"pages": "<string>",
"order": [50],
"sheet": {
"width": 123,
"height": 123
},
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": True,
"fold": True
}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
sections: [
{
group: 50,
pages: '<string>',
order: [50],
sheet: {width: 123, height: 123},
offset: {x: 0, y: 0},
marks: {crop: true, fold: true}
}
]
})
};
fetch('https://api.print.app/v2/imposition-rules/{id}', 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/imposition-rules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'sections' => [
[
'group' => 50,
'pages' => '<string>',
'order' => [
50
],
'sheet' => [
'width' => 123,
'height' => 123
],
'offset' => [
'x' => 0,
'y' => 0
],
'marks' => [
'crop' => true,
'fold' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.print.app/v2/imposition-rules/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.print.app/v2/imposition-rules/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/imposition-rules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"sections\": [\n {\n \"group\": 50,\n \"pages\": \"<string>\",\n \"order\": [\n 50\n ],\n \"sheet\": {\n \"width\": 123,\n \"height\": 123\n },\n \"offset\": {\n \"x\": 0,\n \"y\": 0\n },\n \"marks\": {\n \"crop\": true,\n \"fold\": true\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "imposition_rule",
"id": "_imposition_1",
"title": "Book cover: back, spine and front as one spread",
"description": "Pages 1, 2 and 3 are the front cover, the spine and the back cover. The PDF joins them into one spread with the back cover on the left. Later pages print as they are.",
"builtIn": true,
"unit": "mm",
"sections": [
{
"pages": "1-3",
"group": 3,
"order": [
3,
2,
1
],
"direction": "horizontal",
"sheet": null,
"anchor": "center",
"offset": {
"x": 0,
"y": 0
},
"marks": {
"crop": null,
"fold": null
}
}
],
"created": null,
"modified": null
}{
"error": true,
"code": "invalid_request",
"message": "width is required.",
"param": "width",
"requestId": "FZn-uhymjoEEJow="
}{
"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="
}{
"error": true,
"code": "not_found",
"message": "Not found.",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "folder_not_empty",
"message": "The folder still holds designs. Remove them from it (or delete them) first.",
"requestId": "FZn-uhymjoEEJow="
}{
"error": true,
"code": "unsupported_media_type",
"message": "Send the request body as JSON, with \"Content-Type: application/json\".",
"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.
Path Parameters
The rule id.
Body
The fields to change. sections replaces them all.
The rule's name.
1 - 200What it is for ("" clears it).
500The unit of every sheet size and offset. The numbers stay as they are.
mm, cm, in, pt Applied in order. Pages no section takes print as they are.
1 - 20 elementsShow child attributes
Show child attributes
Response
OK.
How the print PDF of a design puts its pages on sheets: joined into spreads (a book cover, calendar pairs) or placed on a fixed sheet. Designs use one with impositionRuleId; a customer's project follows its design's.
"imposition_rule"The rule id: imposition_…, or a built-in _imposition_….
What it is for.
One of Print.App's rules: it can be used and copied (basedOn), not changed.
The unit of every sheet size and offset.
mm, cm, in, pt Applied in order. Pages no section takes print as they are.
Show child attributes
Show child attributes