curl --request POST \
--url https://api.print.app/v2/pdf-profiles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Stickers",
"basedOn": "_default_1",
"renderDieline": true,
"dielineSpot": "CutContour"
}
'import requests
url = "https://api.print.app/v2/pdf-profiles"
payload = {
"title": "Stickers",
"basedOn": "_default_1",
"renderDieline": True,
"dielineSpot": "CutContour"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Stickers',
basedOn: '_default_1',
renderDieline: true,
dielineSpot: 'CutContour'
})
};
fetch('https://api.print.app/v2/pdf-profiles', 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/pdf-profiles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Stickers',
'basedOn' => '_default_1',
'renderDieline' => true,
'dielineSpot' => 'CutContour'
]),
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/pdf-profiles"
payload := strings.NewReader("{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.print.app/v2/pdf-profiles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/pdf-profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}"
response = http.request(request)
puts response.read_body{
"object": "pdf_profile",
"id": "<string>",
"title": "<string>",
"description": "<string>",
"builtIn": true,
"compatibility": "<string>",
"colorProfile": "<string>",
"embedIccProfile": true,
"renderSpotColors": true,
"renderInvisibleLayers": true,
"renderMarks": true,
"includeScreenshot": true,
"renderDieline": true,
"dielineSpot": "<string>",
"dielineWidth": 123,
"downsampleImages": true,
"downsampleResolution": 123,
"jpegQuality": 123,
"convertImageColorSpace": true,
"embedIccProfileInImages": true,
"honorImageIccProfile": true,
"interpolateImages": true,
"imageRenderingIntent": "<string>",
"embedFonts": true,
"subsetFonts": true,
"flattenFonts": true,
"requirePassword": true,
"hasPassword": true,
"created": "2023-11-07T05:31:56Z",
"modified": "2023-11-07T05:31:56Z"
}{
"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": "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="
}Create a PDF profile
Creates a PDF profile from the defaults, or from basedOn (a built-in profile or one of yours), with the settings you send. Give it to designs with pdfProfileId on PATCH /v2/designs/{id}.
curl --request POST \
--url https://api.print.app/v2/pdf-profiles \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Stickers",
"basedOn": "_default_1",
"renderDieline": true,
"dielineSpot": "CutContour"
}
'import requests
url = "https://api.print.app/v2/pdf-profiles"
payload = {
"title": "Stickers",
"basedOn": "_default_1",
"renderDieline": True,
"dielineSpot": "CutContour"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Stickers',
basedOn: '_default_1',
renderDieline: true,
dielineSpot: 'CutContour'
})
};
fetch('https://api.print.app/v2/pdf-profiles', 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/pdf-profiles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Stickers',
'basedOn' => '_default_1',
'renderDieline' => true,
'dielineSpot' => 'CutContour'
]),
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/pdf-profiles"
payload := strings.NewReader("{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.print.app/v2/pdf-profiles")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.print.app/v2/pdf-profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Stickers\",\n \"basedOn\": \"_default_1\",\n \"renderDieline\": true,\n \"dielineSpot\": \"CutContour\"\n}"
response = http.request(request)
puts response.read_body{
"object": "pdf_profile",
"id": "<string>",
"title": "<string>",
"description": "<string>",
"builtIn": true,
"compatibility": "<string>",
"colorProfile": "<string>",
"embedIccProfile": true,
"renderSpotColors": true,
"renderInvisibleLayers": true,
"renderMarks": true,
"includeScreenshot": true,
"renderDieline": true,
"dielineSpot": "<string>",
"dielineWidth": 123,
"downsampleImages": true,
"downsampleResolution": 123,
"jpegQuality": 123,
"convertImageColorSpace": true,
"embedIccProfileInImages": true,
"honorImageIccProfile": true,
"interpolateImages": true,
"imageRenderingIntent": "<string>",
"embedFonts": true,
"subsetFonts": true,
"flattenFonts": true,
"requirePassword": true,
"hasPassword": true,
"created": "2023-11-07T05:31:56Z",
"modified": "2023-11-07T05:31:56Z"
}{
"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": "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.
Headers
Makes a retry safe: a second request with the same key and the same body gets the first response back (for 24 hours) instead of creating the resource again. Use a new key, such as a UUID, for every new request.
1 - 255Body
A new PDF profile. Settings left out take basedOn's, else the defaults. Give it to designs with pdfProfileId on PATCH /v2/designs/{id}.
The profile's name.
1 - 200What it is for.
500A PDF profile to start from, such as a built-in one.
1 - 120The PDF version or standard. Default 1.7.
1.4, 1.5, 1.6, 1.7, 2.0, PDF/A-3a, PDF/UA-1, PDF/X-5n Convert colours to this output profile (cmyk-coated-fogra39 for European coated stock, cmyk-us-web-coated-swop for US, sRGB for digital and photo printers). null: no conversion.
sRGB, cmyk, cmyk-coated-fogra27, cmyk-coated-fogra39, cmyk-coated-gracol2006, cmyk-eci-iso-coated-v2-300, cmyk-eci-iso-coated-v2-eci, cmyk-eci-iso-uncoated-yellowish, cmyk-eci-pso-coated-300-npscreen-iso12647, cmyk-eci-pso-coated-npscreen-iso12647, cmyk-eci-pso-lwc-improved, cmyk-eci-pso-lwc-standard, cmyk-eci-pso-mfc-paper, cmyk-eci-pso-snp-paper, cmyk-eci-pso-uncoated-iso12647, cmyk-eci-pso-uncoated-npscreen-iso12647, cmyk-eci-sc-paper, cmyk-japan-200-newspaper, cmyk-japan-2001-coated, cmyk-japan-2001-uncoated, cmyk-japan-2003-web-coated, cmyk-japan-web-coated, cmyk-uncoated-fogra29, cmyk-us-web-coated-swop, cmyk-us-web-uncoated, cmyk-web-coated-fogra28, cmyk-web-coated-swop-2006-g3, cmyk-web-coated-swop-2006-g5, null Embed the output profile in the PDF.
Keep spot colours (foils, Pantone) as separate inks.
Include hidden layers (such as a white underbase).
Add crop and bleed marks.
Add a page with a flat preview of the design.
Draw the cut line of die-cut pages (stickers, labels) as a named spot stroke.
The cut line's spot colour name, as the cutter expects it. Default CutContour.
1 - 100The cut line's width in points. Default 0.25.
x <= 10Reduce images above downsampleResolution, for smaller files.
Pixels per inch images are reduced to. Default 300.
72 <= x <= 600JPEG quality of reduced images. Default 91.
10 <= x <= 100Convert images to the output profile too (needs colorProfile).
Use each image's own colour profile when converting it.
Smooth images when they are enlarged.
How out-of-gamut image colours are mapped. Default Auto.
Auto, AbsoluteColorimetric, RelativeColorimetric, Saturation, Perceptual Embed fonts, so the printer needs none installed.
Embed only the characters used.
Turn text into outlines (no fonts in the PDF at all).
The PDF opens only with password.
The password the PDF opens with (write-only: never shown again).
1 - 100Response
Created.
The settings the print PDF of a design is made with.
"pdf_profile"Provided by Print.App: it cannot be changed; make your own with basedOn.
The PDF version or standard. Default 1.7.
Convert colours to this output profile (cmyk-coated-fogra39 for European coated stock, cmyk-us-web-coated-swop for US, sRGB for digital and photo printers). null: no conversion.
Embed the output profile in the PDF.
Keep spot colours (foils, Pantone) as separate inks.
Include hidden layers (such as a white underbase).
Add crop and bleed marks.
Add a page with a flat preview of the design.
Draw the cut line of die-cut pages (stickers, labels) as a named spot stroke.
The cut line's spot colour name, as the cutter expects it. Default CutContour.
The cut line's width in points. Default 0.25.
Reduce images above downsampleResolution, for smaller files.
Pixels per inch images are reduced to. Default 300.
JPEG quality of reduced images. Default 91.
Convert images to the output profile too (needs colorProfile).
Use each image's own colour profile when converting it.
Smooth images when they are enlarged.
How out-of-gamut image colours are mapped. Default Auto.
Embed fonts, so the printer needs none installed.
Embed only the characters used.
Turn text into outlines (no fonts in the PDF at all).
The PDF opens only with password.
A password is set (it is never shown).