Types
Supporting interfaces, type aliases and enums referenced by the JS API reference pages - the request/response shapes that show up as parameter and return types there. Generated from printess-editor.d.ts alongside the method pages, so this always matches what’s actually referenced.
AiTextEditOptionAllow
Type: “allowAiTextRewrite” | “allowAiTextFixSpelling” | “allowAiTextAddMoreText” | “allowAiTextShortenText” | “allowAiTextChangeWritingStyle” | “allowAiTextGenerateQuiz”
appliedLayoutInfo
isThemeDesign Flag
Type: null | { // template name tn: string, // document name dn: string, // document id did: string, // snippet id id?: string, // split variant spvarid?: string | null /** isThemeDesign Flag */ des: boolean }
AwsUploadProvider
The method which generates the final key to store within S3.
Extends: UploadProvider
| Field |
Type |
Description |
keyGenerator |
(fileName: string, fileHash: string) => string |
The method which generates the final key to store within S3. |
ContentEditableItem
| Field |
Type |
Description |
id |
string |
|
name |
string |
|
isMandatory |
boolean |
|
value |
string |
|
maxCharacters |
number |
|
DocumentContentEditables
ErrorName
Type: “templateNotFound” | “addToBasketFailed”
externalDocChangeCallback
Type: (newDocId: string) => void
Type: (name: string, value: string, tag: string, label: string, ffLabel: string, disabled?: boolean, imageId?: string, meta1?: string, meta2?: string, meta3?: string, meta4?: string) => void
externalGetOverlayCallback
Type: (properties: Array<{ kind: iExternalPropertyKind, isDefault: boolean, isMandatory: boolean }>, width: number, height: number) => HTMLDivElement
externalPriceChangeCallback
Callback executed whenever price relevant information has changed.
Once calculated the new price you can call refreshPriceDisplay()to update
the price and product informations for the user.
Example for iframe integration: (can be called on uiHelper as well)
```
iframe.contentWindow.postMessage({
cmd: “refreshPriceDisplay”, display: {
price: string, // any string like “32.34€”
oldPrice?: string // will be crossed out
legalNotice?: string, // will be displayed under the price
productName?: string // to change product name dynamically
})}
}, “*”);
```
Type: (infos: iExternalProductPriceInfo) => void
externalSelectionChangeCallback
Type: (properties: Array<iExternalProperty>, scope: “document” | “frames” | “text”) => void
externalSpreadChangeCallback
Type: (groupSnippets: ReadonlyArray<iExternalSnippetCluster> | Array<iExternalSnippetCluster>, layoutSnippets: ReadonlyArray<iExternalSnippetCluster> | Array<iExternalSnippetCluster>, tabs: ReadonlyArray<iExternalTab> | Array<iExternalTab>, hasRootFormFieldsWithOutTab: boolean, showSelectLayoutDialog: boolean, optOutHash: string, spreadId: string) => void
externalTabChangeCallback
Type: (tabId: “#NONE” | “#LAYOUTS” | “#PHOTOS” | “#THEME” | “#PAGES” | “#ADD-TEXT” | “#ADD-IMAGE” | “#FORMFIELDS” | “#FORMFIELDS1” | “#FORMFIELDS2” | string) => void
externalZoomChangeCallback
Type: () => void
ExtFF_WriteSecondWhat
Type: “value” | “label” | “info” | “tag” | “meta1” | “meta2” | “meta3” | “meta4”
ExtFFType
Type: “string” | “table” | “number” | “label” | “font” | “color” | “panel-script”
FFInfoStyle
Type: string
ForceSnippetPlacement
Type: “repeat-all” | “repeat-all-current” | “repeat-inside” | “repeat-inside-current”
FormFieldEntry
| Field |
Type |
Description |
key |
string |
|
label |
string |
|
description |
string |
|
| Field |
Type |
Description |
name |
string |
|
value |
string |
|
visibility |
string |
|
isPriceRelevant |
boolean |
|
entries |
FormFieldEntry[] |
|
formFieldListEntry
| Field |
Type |
Description |
key |
string |
|
label? |
string |
multi-language?? |
description? |
string |
|
imageId? |
string |
|
tag? |
string |
|
meta1? |
string |
|
meta2? |
string |
|
meta3? |
string |
|
meta4? |
string |
|
disabled? |
boolean |
|
| Field |
Type |
Description |
hasSvgCircle |
boolean |
|
hasImage |
boolean |
|
hasCaption |
boolean |
|
hasColor |
boolean |
|
hasIcon |
boolean |
|
icon |
iconName | “none” |
|
displayGauge |
boolean |
|
gaugeValue |
number |
|
isSelected |
boolean |
|
captionClass |
string |
|
captionInCircle |
string |
|
color |
string |
|
iBuyerStep
| Field |
Type |
Description |
index |
number |
|
boxId? |
string |
|
docId |
string |
|
title |
string |
|
iClaudeDesignSettings
| Field |
Type |
Description |
product |
string |
|
brandColors |
string[] |
|
companyName |
string |
|
graphicStyle? |
string |
|
styleMode? |
“upload” | “pick” | “description” |
|
logoUrl |
string |
|
uploadedLogoFileName |
string |
|
logoDarkUrl? |
string |
|
uploadedLogoDarkFileName? |
string |
|
prompt |
string |
|
productType? |
string |
|
ciImageUrl? |
string |
|
uploadedCiImageFileName? |
string |
|
lastResult? |
TemplateImportTask |
|
lastInvalidResult? |
string |
|
iconName
Type: “image” | “images” | “image-solid” | “image-regular” | “image-square” | “image-slash” | “portrait” | “bezier” | “text” | “text-solid” | “pathText” | “magnet” | “pointer” | “close-square” | “close” | “close-small” | “docRef” | “collapseLeft” | “expandLeft” | “expand-arrows” | “edit” | “edit-inverse” | “pen” | “pen-solid” | “pencil-ruler” | “plus” | “plus-bold” | “plus-circle” | “plus-square” | “minus” | “minus-bold” | “minus-light” | “circle-1” | “circle-1-red” | “shapes” | “shapes-solid” | “square” | “settings” | “vector-shape” | “address-card” | “paperclip” | “facing-pages” | “page” | “page-solid” | “cog” | “perspective” | “style” | “story” | “text-flow” | “exchange” | “text-align-justify-justify” | “text-align-justify-left” | “text-align-justify-right” | “text-align-justify-center” | “text-align-left” | “text-align-right” | “text-align-center” | “check” | “check-solid” | “check-square” | “user-circle” | “user-solid” | “user-crown-solid” | “arrow-left” | “arrow-right” | “arrow-up” | “arrow-down” | “arrows” | “arrows-circle” | “arrows-h” | “arrows-v” | “carret-down-solid” | “carret-right-solid” | “carret-left-solid” | “text-size” | “text-tracking” | “text-width” | “line-height” | “line-width” | “palette” | “brush” | “undo” | “undo-solid” | “redo” | “redo-solid” | “copy” | “copy-solid” | “paste” | “cut” | “object-ungroup” | “trash” | “trash-solid” | “remove-format” | “clipboard” | “search-plus” | “search-minus” | “search-plus-light” | “search-minus-light” | “search-light” | “save” | “save-light” | “slash” | “empty” | “cloud-upload-alt” | “folder-open-solid” | “folder-open” | “open-new-tab” | “tint” | “warp-arc” | “warp-flag” | “warp-bulge” | “warp-arc-upper” | “warp-pit-upper” | “warp-arc-lower” | “warp-pit-lower” | “warp-fish” | “warp-squeeze” | “warp-mug” | “mesh” | “crop” | “crop+rotate” | “place-image” | “fill-image” | “fit-image” | “vertical-align-bottom-baseline” | “vertical-align-center-baseline” | “vertical-align-center” | “vertical-align-top” | “vertical-align-bottom” | “warning” | “effects” | “robot” | “microchip” | “record” | “play” | “running” | “rotator” | “lock-closed” | “lock-open” | “lock-closed-solid” | “frame-lock-closed” | “frame-lock-opened” | “user-lock-closed” | “user-lock-opened” | “link” | “stroke-cap-round” | “stroke-cap-projecting” | “stroke-cap-butt” | “stroke-align-center” | “stroke-align-inside” | “stroke-align-outside” | “stroke-join-miter” | “stroke-join-round” | “stroke-join-bevel” | “wrap-both-sides” | “no-wrap” | “printess-wand” | “print-solid” | “shopping-cart” | “shopping-cart-fast” | “shopping-cart-solid” | “shopping-cart-add” | “folder-plus” | “eye-solid” | “eye-solid-pink” | “eye-solid-slash” | “eye-solid-slash-pink” | “font” | “send-back” | “send-backward” | “bring-front” | “bring-forward” | “distort” | “list-ul” | “drag” | “ellipsis-v” | “ellipsis-h” | “sun-light” | “adjust” | “scroll-old” | “align-top” | “align-middle” | “align-bottom” | “align-left” | “align-center” | “align-right” | “space-vertical-around” | “space-vertical-between” | “space-horizontal-around” | “space-horizontal-between” | “layer-group” | “ruler” | “layout-snippet” | “layout-snippet-invers” | “group-snippet” | “group-snippet-invers” | “primary-doc” | “primary-doc-invers” | “preview-doc” | “preview-doc-invers” | “production-doc” | “production-doc-invers” | “facebook-round” | “clock-solid” | “page-plus-solid” | “user-friends-solid” | “opacity” | “file-invoice” | “help” | “triangle-solid” | “pin-solid” | “pin” | “angle-right” | “angle-down” | “sync” | “mirror-x” | “mirror-y” | “folder-tree-solid” | “filter-reset” | “compact-disc” | “chevron-double-down-duotone” | “chevron-left” | “chevron-right” | “angle-left” | “angle-right” | “database” | “coins” | “sync-alt” | “clock-light” | “calendar-alt” | “calendar-light” | “coin-light” | “coin” | “page-inverse” | “page-light” | “bars-light” | “credit-card” | “info-circle” | “carret-left-solid” | “check-circle-solid” | “ban” | “circle-dot” | “pause-solid” | “pause-light” | “angle-up-light” | “angle-down-light” | “chevron-up-light” | “chevron-down-light” | “sign-in-light” | “share-light” | “share-solid” | “reply-light” | “reply-solid” | “undo-arrow” | “redo-arrow” | “rotate” | “primary” | “back” | “angle-double-right” | “angle-double-left” | “arrow-to-right” | “arrow-to-left” | “distribute-image” | “minus-square” | “arrow-square-right” | “bullseye-pointer-solid” | “hand-pointer-light” | “project-diagram-solid” | “eye-dropper” | “eye-dropper-light” | “cloud-upload-light” | “cloud-upload-check” | “arrows-resize-h” | “arrows-resize-v” | “arrows-resize” | “arrows-minimize” | “arrows-maximize” | “shopping-basket” | “shopping-basket-light” | “home-solid” | “home-light” | “smile” | “code-curly” | “text-bottom” | “text-center” | “text-top” | “pen-swirl” | “handwriting” | “focus-face” | “focus-group” | “mug” | “shirt” | “flower” | “burger-menu” | “path-non-zero” | “path-even-odd” | “circle-dollar” | “grid-lines” | “table-thin” | “camera-slash” | “scissors” | “scissors-horizontal” | “scissors-vertical” | “record-up” | “record-down” | “arrow-left-circle” | “arrow-right-circle” | “grid-4” | “image-to-text” | “text-to-image” | “scroll-to-image” | “handwriting-to-text” | “text-to-handwriting” | “arrow-right-long” | “camera-solid” | “desktop-mobile-duotone” | “cloud-check-duotone” | “glass” | “pot-food” | “coke” | “cube-regular” | “cube-invers” | “deco-fading” | “deco-color-cut” | “deco-oblique-lines” | “deco-horizontal-lines” | “text-block-shadow” | “text-line-shadow” | “text-3d-shadow” | “text-no-shadow” | “add-gap-around” | “remove-gap-around” | “book-thin” | “book-solid” | “star-light” | “star-solid” | “tags-light” | “typewriter” | “repeat-light” | “remove-background” | “remove-background-simple” | “page-centered” | “expert” | “sticky-note” | “contrast” | “saturation” | “hammer+brush” | “qr-code” | “sort-solid” | “sort-solid-up” | “sort-solid-down” | “sparkling-star” | “download-solid” | “superscript” | “subscript” | “photo-grid” | “swap” | “page-margin” | “border” | “heart” | “paw” | “smart” | “similar-images” | “upscale-image”
iConversionMode
Type: “fc-swap” | “bg-rm” | “upscale” | “bg-face” | “image-edit” | “sgm-any”
iErrorCharacterMissing
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“characterMissing” |
|
icon |
“text” |
|
iErrorCode
Type: iErrorType[“errorCode”]
iErrorCustomStepValidation
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“customStepValidation” |
|
result |
string |
|
icon |
“circle-1” |
|
iErrorEmpty
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“emptyError” |
|
result |
string |
|
label? |
string |
|
ffId? |
string |
|
icon |
“circle-1” |
|
iErrorEmptyBookPage
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“emptyBookPage” |
|
icon |
“facing-pages” |
|
iErrorImageCouldNotUpload
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“imageCouldNotUpload” |
|
icon |
“image” |
|
iErrorImageMissing
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“imageMissing” |
|
ffId? |
string |
|
tabId? |
string |
|
icon |
“image” |
|
iErrorImageResolutionLow
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“imageResolutionLow” |
|
dpi |
string |
|
icon |
“image” |
|
ffId? |
string |
|
iErrorImageStillUploading
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“imageStillUploading” |
|
icon |
“image” |
|
iErrorInvalidDayValue
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“invalidDayValue” |
|
maxValue |
string |
|
icon |
“calendar-light” |
|
iErrorInvalidNumber
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“invalidNumber” |
|
icon |
“database” |
|
iErrorInvalidPageCount
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“invalidPageCount” |
|
icon |
“book-thin” |
|
iErrorMandatoryTableCell
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“mandatoryTableCell” |
|
icon |
“database” |
|
missingColumns |
string |
|
ffId? |
string |
|
tabId? |
string |
|
iErrorMaxChars
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“maxCharsExceeded” |
|
icon |
“text” |
|
maxChars |
number |
|
ffId? |
string |
|
iErrorMaxTableEntries
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“maxTableEntries” |
|
icon |
“database” |
|
rowsTooMany |
number |
|
ffId |
string |
|
tabId? |
string |
|
iErrorMinTableEntries
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“minTableEntries” |
|
icon |
“database” |
|
rowsMissing |
number |
|
ffId |
string |
|
tabId? |
string |
|
iErrorMissingEventText
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“missingEventText” |
|
icon |
“text” |
|
iErrorNeedMorePages
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“needMorePages” |
|
icon |
“book-thin” |
|
minSpreads |
number |
|
iErrorNeedMorePhotos
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“needMorePhotos” |
|
icon |
“image” |
|
min |
number |
|
add |
number |
|
iErrorNoLayoutSnippetSelected
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“noLayoutSnippetSelected” |
|
icon |
“layout-snippet” |
|
iErrorNotChecked
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“notChecked” |
|
icon |
“close-square” |
|
ffId? |
string |
|
tabId? |
string |
|
iErrorNotSelected
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“notSelected” |
|
icon |
“close-square” |
|
ffId? |
string |
|
tabId? |
string |
|
iErrorOffensiveLanguage
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“offensiveLanguageDetected” |
|
icon |
“text” |
|
ffId? |
string |
|
iErrorPreflight
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“preflight” |
|
icon |
“edit” |
|
iErrorRegExpNotMatching
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“regExpNotMatching” |
|
icon |
“text” |
|
regExp |
string |
|
ffId? |
string |
|
iErrorRowIndexLessThanZero
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“rowIndexLessThanZero” |
|
icon |
“database” |
|
iErrorTextMissing
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“textMissing” |
|
icon |
“text” |
|
ffId? |
string |
|
tabId? |
string |
|
iErrorTextOverflow
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“textOverflow” |
|
icon |
“text” |
|
iErrorTooManyPages
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“tooManyPages” |
|
icon |
“book-thin” |
|
maxSpreads |
number |
|
iErrorTooManyPhotos
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“tooManyPhotos” |
|
icon |
“image” |
|
max |
number |
|
remove |
number |
|
iErrorType
Type: iErrorImageResolutionLow | iErrorImageMissing | iErrorImageStillUploading | iErrorImageCouldNotUpload | iErrorEmpty | iErrorPreflight | iErrorUserCanceled | iErrorCustomStepValidation | iErrorEmptyBookPage | iErrorInvalidPageCount | iErrorNeedMorePages | iErrorTooManyPages | iErrorCharacterMissing | iErrorMaxChars | iErrorRegExpNotMatching | iErrorOffensiveLanguage | iErrorTextMissing | iErrorTextOverflow | iErrorNotSelected | iErrorNotChecked | iErrorNoLayoutSnippetSelected | iErrorMinTableEntries | iErrorMaxTableEntries | iErrorMandatoryTableCell | iErrorMissingEventText | iErrorInvalidNumber | iErrorInvalidDayValue | iErrorRowIndexLessThanZero | iErrorNeedMorePhotos | iErrorTooManyPhotos
iErrorUserCanceled
Extends: iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
“user-canceled” |
|
result |
string |
|
iExternalBookSettings
optional: could be any Length value, like an equation or a fixed value with unit, e.g. =spine.pages * 0.3mm or 2cm, or a number in pixel.
A negative or unreadable value is ignored with a console warning (so are the other lengths below). The call leaves nothing on the undo stack and keeps the redo stack.
| Field |
Type |
Description |
spine? |
number | string |
optional: could be any Length value, like an equation or a fixed value with unit, e.g. =spine.pages * 0.3mm or 2cm, or a number in pixel. A negative or unreadable value is ignored with a console warning (so are the other lengths below). The call leaves nothing on the undo stack and keeps the redo stack. |
hinge? |
number | string |
optional: hinge could be a Length value, like 1cm or 2inch or a number in pixel |
edgeX? |
number | string |
optional: edge-left-right could be a Length value, like 1cm or 2inch or a number in pixel |
edgeY? |
number | string |
optional: edge-top-bottom could be a Length value, like 1cm or 2inch or a number in pixel |
bleedX? |
number | string |
optional: bleed-left-right could be a Length value, like 1cm or 2inch or a number in pixel |
bleedY? |
number | string |
optional: bleed-top-bottom could be a Length value, like 1cm or 2inch or a number in pixel |
minPages? |
number |
optional: Minimum Book Pages set min pages value and auto adds additional pages |
maxPages? |
number |
optional: Maximum Book Pages set max pages and outo removes overidge pages |
initialFreestylePhotobookPages? |
number |
optional: Initial Freestyle Photobook Pages set initial amount of pages the freestyle photobook is created with |
layflat? |
boolean |
optinal: enable / disable layflat mode |
lockCoverInside? |
boolean |
optional: if true, first page and last page become invisible |
addSpreads? |
1 | 2 |
optional: determines the min-spreads to add and also if the spread-count needs to be divisible by 2 to be printed |
bookImposition? |
string |
optional: set the book inside pages document imposition by name |
coverImposition? |
string |
optional: set all cover documents imposition by name |
previewCoverType? |
“hard” | “soft” |
|
useDebossedCover? |
boolean |
optional: enable the debossed (premade) cover - the cover gets a fixed number of images and no theme cover layout is applied |
debossedCoverImageCount? |
number |
optional: number of images (0-4) placed on the debossed cover |
iExternalBoundingBox
A bounding box in XYXY fromat
| Field |
Type |
Description |
x1 |
number |
|
y1 |
number |
|
x2 |
number |
|
y2 |
number |
|
| Field |
Type |
Description |
docId |
string |
|
spreadId |
string |
|
spreadIndex |
number |
|
boxId |
string |
|
feature |
string |
Feature |
paragraphs? |
Array<number> |
|
property |
string |
anyProperty | “FormField” |
parentBoxId |
string | null |
|
paragraphIndex |
number |
|
layerName |
string | null |
|
only-image-upload hides all other upload buttons
| Field |
Type |
Description |
location |
“button-bar” | “image-upload” | “only-image-upload” |
only-image-upload hides all other upload buttons |
label |
string |
|
hint? |
string |
|
icon? |
iconName |
|
iconSize? |
“small” | “large” |
only takes effect if no label is ste. “large” is default |
color |
“primary” | “secondary” |
|
outline |
“solid” | “outline” |
|
where? |
“desktop” | “mobile” |
Where is the button is shown, default is everywhere |
clickCallback |
() => any |
Callback executed on button click |
iExternalCollageLayout
| Field |
Type |
Description |
snippetId |
string |
|
snippetUrl |
string |
|
snippetThumb |
string |
|
snippetDocId |
string |
|
snippetTitle |
string |
|
snippetKeywords |
string[] |
|
page |
“left” | “right” | “entire” |
|
slots |
iExternalCollageSlot[] |
|
match |
number |
|
preferred |
number |
|
simple |
number |
|
splitVariantId |
string |
|
iExternalCollageSlot
| Field |
Type |
Description |
aspect |
number |
|
sw |
number |
size factor width |
sh |
number |
size factor height |
st |
number |
size factor top |
sl |
number |
size factor left |
ang |
number |
rotation-angle |
split |
boolean |
|
iExternalColor
| Field |
Type |
Description |
mode |
“rgb” | “cmyk” |
|
label |
string |
|
allowCMYK |
boolean |
|
r |
number |
0-255 |
g |
number |
|
b |
number |
|
c |
number |
0-100 |
m |
number |
|
y |
number |
|
k |
number |
|
| Field |
Type |
Description |
caption |
string |
|
sub? |
Array<contextMenuItem> |
|
callback? |
() => void |
|
bold? |
boolean |
|
disabled? |
boolean |
|
color? |
string |
|
icon? |
iconName |
|
font? |
string |
|
textOnly? |
boolean |
|
hidden? |
boolean |
|
iExternalDesignAgentOptions
what to design, in prose. The form a surface collects is composed into this.
| Field |
Type |
Description |
prompt |
string |
what to design, in prose. The form a surface collects is composed into this. |
imageUrls? |
Array<string> |
reference images sent as vision input - a corporate-design sample, a layout to work from |
apply? |
“add” | “replace” |
What a design for a whole document does to the template that is already loaded. "add" (default) keeps the existing documents; "replace" swaps the template for the generated one and is meant for a buyer designing their own product, not for a designer with unsaved work in front of them. |
newTemplateName? |
string |
apply: "replace" only - the name the generated template takes. |
settings? |
iClaudeDesignSettings |
persisted to template properties, so the next run starts from the last one’s inputs |
onOutput? |
(text: string) => void |
the answer so far, with command lines removed - throttled to a few updates a second |
onStatus? |
(status: string) => void |
one line about what just happened: a command’s outcome, “Done in 4.2s”, an error |
iExternalDocAndSpreadInfo
The ID of the document
| Field |
Type |
Description |
docId |
string |
The ID of the document |
docTitle |
string |
The Title of the document |
spreads |
Array<iExternalSpreadInfo> |
Information about all spreads of this document |
spreadCount |
number |
The amount of spreads (not pages!) in this document |
pageCount |
number |
The amount of pages in this document |
facingPages |
boolean |
Information if the document has facing pages. If true first and last spread has 1 page all other spreads have 2 pages. |
isBook |
boolean |
Information if the document is set to “book” mode and can therefore add/remove pages etc. |
lockCoverInside |
boolean |
Especially for layflat books where the first and last pages are not visible |
showBookShadow |
boolean |
If a shadow between facing pages should be shown |
userCanAddSpreads |
boolean |
Indicates if the user is allowed to add spreads |
minSpreads |
number |
minimum number of spreads |
maxSpreads |
number |
maximum number of spreads |
minPages |
number |
minimum number of pages |
maxPages |
number |
maximum number of pages |
iExternalDocumentFlags
What modifyDocument takes. Only the keys given change.
| Field |
Type |
Description |
sizeFromFormField? |
boolean |
“Get Size from Form Field”. The page size follows the DOCUMENT_SIZE form field, so the buyer’s choice resizes the document. Turning it on creates that form field; turning it off clears the applied size. A document carrying this flag has no fixed page size, so its frames need geometry that survives a resize - relative units, edge anchors or dock-to-bleed - or they hold still while the page moves. templateOutline reports the flag as sizeFromFormField. Not available on a cover, whose size comes from its spine and border geometry. |
isEditable? |
boolean |
“Editable”* - the buyer can open and edit this document. |
isProduction? |
boolean |
“Production”* - the document is part of the print output. |
isJobSheet? |
boolean |
“Job Sheet”* - a production sheet. Turning it on turns isProduction on with it. |
isThumbnail? |
boolean |
“Template Thumbnail”* - the document the template’s thumbnail is rendered from. |
isBasketThumbnail? |
boolean |
“Basket Thumbnail”* - the document the basket thumbnail is rendered from. |
isMergeTarget? |
boolean |
“Is Merge Target”* - other documents merge into this one. |
doNotMerge? |
boolean |
“Do Not Merge”* - keep this document out of a merge. |
isLayoutSnippet? |
boolean |
*“Layout-Snippet”**. Mutually exclusive with isGroupSnippet, which is turned off with it. |
isGroupSnippet? |
boolean |
*“Sticker / Filter-Snippet”**. Mutually exclusive with isLayoutSnippet, which is turned off with it. |
isSlimUiPreview? |
boolean |
“Slim Ui Preview”* - the preview document the slim buyer UI shows. |
iExternalDocumentOutline
One document in templateOutline.
| Field |
Type |
Description |
id |
string |
|
name |
string |
|
open? |
boolean |
|
pageWidth |
number |
In this document’s own unit, not pixels. |
pageHeight |
number |
|
unit |
string |
|
facingPages? |
boolean |
|
isBookInsidePages? |
boolean |
|
sizeFromFormField? |
boolean |
“Get Size from Form Field” is on: the page size follows the DOCUMENT_SIZE form field, so it is not fixed. Absent when off. Set it with setDocumentFlags. Worth reading before laying anything out here - on a document that carries this flag, a frame written in absolute units holds still while the page size moves under it. |
isCover? |
boolean |
A cover document - its size is computed from the book’s inside pages, spine and borders. |
snippet? |
{ type: “layout” | “group”; tags?: Array<string>; keywords?: Array<string>; } |
Present only on a document that is a snippet - one entry of a layout or sticker library. Here rather than behind a per-document exportDocument because it is what lets a run find its place in a library it did not build: a library of 25 layouts is 25 documents, and “which of them exist already, and what is each one for” has to be answerable in one cheap call. The keywords are what carry that for a photobook theme, where single-page-design and double-page-design say what a layout covers. |
condition? |
string |
|
spreads |
Array<iExternalSpreadOutline> |
|
iExternalDocumentResult
The answer of the document and spread verbs: the change contract plus the generated ids, which a
caller has no other way of learning and needs in order to populate what it just created.
| Field |
Type |
Description |
ok |
boolean |
|
message |
string |
|
docId? |
string |
The document created or changed. |
spreadIds? |
Array<string> |
The spreads created - addFrame takes one of these. |
iExternalDocumentSize
A page size for duplicateDocument: two numbers plus the unit they are written in.
unit interprets the numbers only - it does not change the document’s own unit, exactly as
ImportLength’s {value, unit} does not. Absent means the source document’s unit, which
templateOutline().documents[].unit reports. Only absolute units: a page has no parent axis, so
%, %%, <% and equations are refused.
| Field |
Type |
Description |
width |
number |
|
height |
number |
|
unit? |
“px” | “cm” | “mm” | “inch” | “pt” |
|
iExternalError
| Field |
Type |
Description |
boxIds |
Array<string> |
|
pinnedDocId? |
string |
|
errorCode |
iErrorCode |
|
errorValue1 |
string | number |
|
errorValue2? |
string | number |
|
errorValue3? |
string | number |
|
errorValue4? |
string |
|
errorIcon? |
iconName |
|
isIgnored? |
boolean |
|
iExternalErrorDisplay
| Field |
Type |
Description |
errorCode |
iErrorCode |
|
icon |
iconName |
|
label? |
string |
|
boxIds |
Array<string> |
|
pinnedDocId? |
string |
|
isIgnored? |
boolean |
|
iExternalExportResult
The answer of every reader (exportSpread, exportFrame, …): the same never-throws contract as a
change, with the exported task attached when it succeeded.
A TemplateImportTask at any level is self-contained and importable as it stands - resources are
collected while walking the requested subtree - so a spread read out here can be handed straight
back to replaceSpread.
| Field |
Type |
Description |
ok |
boolean |
|
message |
string |
One sentence, suitable both for showing a user and for handing back to an automated caller. |
task? |
TemplateImportTask |
Present when ok. Absent when the address did not resolve - message names what would have. |
iExternalFieldListEntry
Info on for Slim UI Only
| Field |
Type |
Description |
key |
string |
|
label |
string |
multi-language?? |
description |
string |
|
imageUrl |
string |
|
tag |
string |
|
enabled |
boolean |
|
icon? |
iconName |
|
meta1? |
string |
|
meta2? |
string |
|
meta3? |
string |
|
meta4? |
string |
|
match |
boolean |
|
hiddenLayers? |
string[] |
Info on for Slim UI Only |
iExternalFont
Unique name of the font, pass it to setTextStyleProperty(id, "font", name) or loadFont()
| Field |
Type |
Description |
name |
string |
Unique name of the font, pass it to setTextStyleProperty(id, "font", name) or loadFont() |
thumbUrl |
string |
Url of an svg image showing the font’s name set in the font itself |
displayName |
string |
|
familyName |
string |
|
weight |
number |
|
isItalic |
boolean |
|
groupName |
string |
Font group the font is in: “Buyer Fonts”, another group of the template, or a font list of its font set |
iExternalFontGroup
The fonts of one font group a buyer may pick from, see getFontGroups().
| Field |
Type |
Description |
name |
string |
Name of the font group: “Buyer Fonts”, another group of the template, or a font list of its font set |
fonts |
Array<iExternalFont> |
Fonts of the group in the order of the template |
| Field |
Type |
Description |
imageId |
string |
|
image |
iExternalImage |
|
isSelected |
boolean |
|
key |
string |
|
label |
string |
|
description? |
string |
|
meta1? |
string |
|
meta2? |
string |
|
meta3? |
string |
|
meta4? |
string |
|
| Field |
Type |
Description |
dataType |
ExtFFType |
|
id |
string |
|
origin |
“scope” | “doc” |
|
numberType |
string | null |
|
textBefore |
string |
|
textAfter |
string |
|
priceRelevant |
boolean |
|
priceDisplay |
number |
priceDisplay |
pricePrefix |
string |
pricePrefix |
pricePostfix |
string |
pricePostfix |
hasPerLetterPricing |
boolean |
hasPerLetterPricing; |
imageDetails |
{ // image details width: number, height: number, groups: Array<string>, showCrop?: boolean, checkDpi?: boolean, dpi?: number, dpiWidth?: string, dpiHeight?: string } |
|
visibility |
“admin” | “buyer” | “condition” |
|
condition |
string |
|
listConditionDescriptionFF |
string |
|
listConditionMeta1FF |
string |
|
listConditionMeta2FF |
string |
|
listConditionMeta3FF |
string |
|
listConditionTableColumn |
string |
|
writeSecondFF |
string |
writes current (writeSecondFFWhat) value to other FF |
writeSecondFFWhat |
ExtFF_WriteSecondWhat |
|
writeSecondFF2 |
string |
writes current (writeSecondFFWhat) value to other FF |
writeSecondFFWhat2 |
ExtFF_WriteSecondWhat |
|
writeSecondFF3 |
string |
writes current (writeSecondFFWhat) value to other FF |
writeSecondFFWhat3 |
ExtFF_WriteSecondWhat |
|
writeSecondFF4 |
string |
writes current (writeSecondFFWhat) value to other FF |
writeSecondFFWhat4 |
ExtFF_WriteSecondWhat |
|
iExternalFrame
| Field |
Type |
Description |
top |
string |
|
left |
string |
|
iExternalGenImageFollowUpAction
Type: “remove-background” | “assign-to-frame”
iExternalGenImageModel
Every model takes allowCache: with true an identical earlier request of the same account (same model and options,
in any basket) returns its image again, without generating or charging a new one. The account portal sets how long
cached images are kept (AI Limits, 365 days by default, at most 10 years).
A request without allowCache for a request that is cached (a regenerate) adds its new image to the cache as another
variant, and the image the same basket / shop user got last counts as regenerated; a cached request returns the variant
regenerated least. Without a basket or shop user id a regenerate is not cached.
Type: | ImgModel_Sdxl | ImgModel_FluxSchnell | ImgModel_FluxDev | ImgModel_FluxPro | ImgModel_FluxUltra | ImgModel_FluxProKontextEdit | ImgModel_Flux2Klein4BEdit | ImgModel_NanoBanana | ImgModel_NanoBananaEdit | ImgModel_NanoBananaPro | ImgModel_NanoBananaProEdit | ImgModel_NanoBanana2 | ImgModel_NanoBanana2Edit | ImgModel_GptImage1 | ImgModel_GptImage1Edit | ImgModel_GptImage1_5 | ImgModel_GptImage1_5Edit | ImgModel_GptImage2 | ImgModel_GptImage2Edit | ImgModel_GptImage2_5Flare | ImgModel_GptImage2_5FlareEdit | ImgModel_GptImage2_5Sunburst | ImgModel_GptImage2_5SunburstEdit | ImgModel_Ideogram4 | ImgModel_Ideogram4Edit
iExternalGenTextModel
Which LLM to prompt.
| Field |
Type |
Description |
model |
iExternalGenTextModelName |
Which LLM to prompt. |
prompt |
string |
The prompt. ${...} expressions are evaluated against the current form fields first, so `Write a birthday card for ${form.name}` works. |
maxTokens? |
number |
Upper bound for the generated text, in tokens. Defaults to the chosen model’s maximum. |
effort? |
TextEffort_Anthropic |
How much the model thinks before it answers: more is slower and costs more tokens. Leave it out to use the model’s default (medium on opus-5.5, high on the others). A level the model does not support is replaced by the closest one it does (xhigh on sonnet-4.6 becomes high), and it is ignored for haiku-4.5 and the OpenAI models. |
imageUrls? |
string[] |
Publicly reachable image urls handed to the model alongside the prompt. |
iExternalGenTextModelName
Type: TextModel_Anthropic | TextModel_OpenAi
iExternalGoogleSheet
Reads a Google Spreadsheet, returned by api.createGoogleSheet().
A sheet is read in two steps: loadData() fetches one sheet into memory, then getData()
returns its rows - filtered and sorted by whatever setFilterValue() and setSortOrder()
were given. The first row of a sheet is its header row: columns holds those names, and
a column index in this interface always refers to that order.
```js
const sheet = api.createGoogleSheet(“”, “”);
await sheet.loadData();
sheet.setFilterValue(sheet.columns.indexOf(“Country”), “Germany”);
for (const row of sheet.getData()) { … }
```
| Field |
Type |
Description |
id |
string |
Id of the spreadsheet this instance reads from. |
columns? |
string[] |
Column names of the loaded sheet, taken from its first row. Undefined before loadData() ran, empty when that row is blank. Only the columns A-Z are read, so a sheet wider than 26 columns has fewer names here than its rows have cells. |
data? |
any[][] |
All rows of the loaded sheet, unfiltered and unsorted, header row included. Undefined before loadData() ran, empty when the sheet holds no data. Google drops trailing empty cells, so a row can be shorter than columns. |
filterOnAllColumns |
boolean |
How several filter values are combined. false (default): every filter must match in its own column. true: a row is kept when any of the filter values appears in any of its columns. |
loadData |
(sheetIndexOrTitle?: number | string): Promise<void> |
Loads one sheet (one tab) of the spreadsheet into memory and fills columns and data. Prefer the tab title over the index: a spreadsheet often keeps an empty default tab in first position, and reading it is not an error - Google answers with no rows, so columns and data come back empty as if the tab had no header row. Throws when no tab matches, naming the tabs this spreadsheet has. @param sheetIndexOrTitle Title of the tab, or its zero-based index. Defaults to the first tab. |
getData |
(): any[][] |
Returns the loaded rows with the current filters and sort order applied. Empty before loadData() ran. |
setFilterValue |
(columnIndex: number, value: string): void |
Sets the filter for one column. Rows are kept when the cell contains value, case-insensitive. Pass an empty string to switch the filter for that column off. @param columnIndex Zero-based index of the column, matching the order in columns. |
setSortOrder |
(columnIndex: number, order: “none” | “ascending” | “descending”): void |
Sorts the rows returned by getData() by one column, comparing the cells as text. @param columnIndex Zero-based index of the column, matching the order in columns. |
getSheets |
(): Promise<iExternalGoogleSheetList> |
Lists all sheets of the spreadsheet. Only needed to find a sheet by name before loadData(). |
getSheetColumnNames |
(sheet: iExternalGoogleSheetInfo): Promise<string[]> |
Reads the header row (columns A-Z) of one sheet without loading its data. Empty when that row is blank. |
getSheetData |
(sheet: iExternalGoogleSheetInfo, paging?: { startRow: number, count: number }): Promise<iExternalGoogleSheetValues> |
Reads the rows of one sheet without keeping them in memory. values is empty when the sheet or the requested window holds no data. @param paging Optional row window, limited to the columns A-Z. startRow is one-based and included. |
iExternalGoogleSheetInfo
One sheet inside a spreadsheet.
| Field |
Type |
Description |
properties |
{ sheetId: number; title: string; /** Zero-based position of the sheet inside the spreadsheet, the index loadData() expects. */ index: number; sheetType: “GRID” | “OBJECT” | “DATA_SOURCE”; gridProperties?: { rowCount: number; columnCount: number; rowGroupControlAfter: boolean; columnGroupControlAfter: boolean; } } |
Zero-based position of the sheet inside the spreadsheet, the index loadData() expects. |
iExternalGoogleSheetList
All sheets of a spreadsheet, as returned by iExternalGoogleSheet.getSheets().
iExternalGoogleSheetValues
Raw cell values of a sheet, as returned by iExternalGoogleSheet.getSheetData().
| Field |
Type |
Description |
range |
string |
|
majorDimension |
“ROWS” | “COLUMNS” |
|
values |
Array<any[]> |
The rows, empty when the range holds no data. Google drops trailing empty cells, so rows can differ in length. |
iExternalHyphenationLanguage
Type: “off” | “en-us” | “de” | “fr” | “es” | “se”
iExternalImage
The Printess image-id, use for assigning the image to frames
| Field |
Type |
Description |
id |
string |
The Printess image-id, use for assigning the image to frames |
originalImageUrl |
string |
The original-URL, be careful might be PDF or TIFF! |
pngImageUrl |
string |
Returns always a PNG-URL, best for passing to AI models |
thumbUrl |
string |
A scaled down version of the images for ui display |
thumbCssUrl |
string |
A scaled down version for direct use in css, contains url(‘’) brackets |
width |
number |
|
height |
number |
|
fileHash |
string |
|
inUse |
boolean |
|
useCount |
number |
|
group |
string |
|
average |
number |
|
name |
string |
|
analysis? |
iExternalImageAnalysis |
|
groupAnalysis? |
iExternalImageGroupAnalysis |
|
lastModified |
number |
|
uploaded |
number |
|
iExternalImageAi
The AI settings of an image frame, with readable names and defaults filled in.
Prompts are as stored, ${…} placeholders are not evaluated.
iExternalImageAiStore
text-2-image Model
iExternalImageAnalysis
| Field |
Type |
Description |
imageId |
string |
|
width |
number |
|
height |
number |
|
datetime |
number |
|
focusScoreFft |
number |
|
numFaces |
number |
|
faceBboxes |
iExternalBoundingBox[] |
|
faceAestheticScores? |
number[] |
|
allFacesBbox? |
iExternalBoundingBox |
|
faceAreasPct |
number[] |
|
faceFocusScore |
number |
|
imageFocusScore |
number |
|
focalPointPct |
{ x: number, y: number } |
|
preferredOrientation |
string |
|
preferredAspect |
number |
|
isScreenshot |
boolean |
|
isDocument |
boolean |
|
isBlurry |
boolean |
|
documentProbability |
number |
|
colorPalette |
string[] |
|
iExternalImageAnalysisOptions
| Field |
Type |
Description |
dummyAttribute? |
boolean |
|
iExternalImageAnalysisStep
Type: “analyze” | “error” | “done”
iExternalImageAssignAction
Type: undefined | “fc-swap” | “bg-rm” | “bg-face” | “face-sticker” | “bg-sticker” | “contour-only” | “image-edit” | “sgm-any” | “sgm-any-sticker”
iExternalImageEditModel
GPT ImageEdit (gpt-image-1) and GPT Image 1.5 are retired, see iExternalText2ImageModel.
Type: “GPT ImageEdit” | “GPT Image 1.5” | “GPT Image 2” | “GPT Image 2.5 Flare” | “GPT Image 2.5 Sunburst” | “Nano Banana” | “Nano Banana Pro” | “Nano Banana 2” | “Flux Pro Kontext” | “Flux 2 Klein 4B” | “Ideogram 4”
iExternalImageEditQuality
Type: “low” | “medium” | “high” | “xhigh” | “max”
iExternalImageEditResolution
Type: “auto” | “0.5K” | “1K” | “2K” | “4K”
iExternalImageFrameDimensions
| Field |
Type |
Description |
width |
number |
|
height |
number |
|
widthCaption |
string |
|
heightCaption |
string |
|
iExternalImageFrameInfos
| Field |
Type |
Description |
frame |
iExternalImageFrameDimensions |
|
image |
{ width: number, height: number, originalImageUrl: string, displayImageUrl: string, displayImageWidth: number, displayImageHeight: number } |
|
crop |
{ xPosition: number; // 0-1 yPosition: number; // 0-1 widthScale: number; // 0-1 heightScale: number; // 0-1 } |
|
conversion? |
iImageConversionSettings |
|
conversionBaseImage? |
string |
|
conversionAppliedImage? |
string |
|
rotation? |
iExternalImageRotation |
|
rotationSourceImage? |
iImage |
|
minDPI |
number |
|
imagePlacement |
“fill” | “fit” | “crop” | “ai” |
|
iExternalImageGroupAnalysis
| Field |
Type |
Description |
timeCluster |
number |
|
featureCluster |
number |
|
featureClusterPriority |
number |
|
duplicateCluster |
number |
|
duplicateSimilarity |
number |
|
similarityClusters |
number[] |
|
Indicates if you can modify scaling on that image
| Field |
Type |
Description |
scale |
number |
|
scaleHints |
iExternalImageScaleHints |
|
imageGroups |
string[] |
|
sepia |
number |
|
brightness |
number |
|
contrast |
number |
|
vivid |
number |
|
hueRotate |
number |
|
invert |
number |
|
placement |
“fit” | “fill” |
|
thumbUrl |
string |
|
thumbCssUrl |
string |
|
canUpload |
boolean |
|
hasFFCropEditor |
boolean |
|
isAiGenererated |
boolean |
|
isVector |
boolean |
|
prompt |
string |
|
canScale |
boolean |
Indicates if you can modify scaling on that image |
canSetPlacement |
boolean |
|
canSetDefaultImage |
boolean |
|
allows |
Array<“sepia” | “brightness” | “contrast” | “vivid” | “hueRotate” | “invert”> |
|
filterTags |
ReadonlyArray<string> | Array<string> |
|
isHandwriting |
boolean |
|
average |
number |
|
slimAI? |
iExternalImageAiStore |
Only available for Slim UI |
imageFrameInfos? |
iExternalImageFrameInfos |
Used only by Slim UI to store values |
assignedImage? |
iImage | null |
Used only by Slim UI to store values |
allowOnlyVectorImageUpload? |
boolean |
Used only by Slim UI to store values |
allowSvgUpload? |
boolean |
Used only by Slim UI to store values |
allowPdfUpload? |
boolean |
Used only by Slim UI to store values |
iExternalImageRotation
| Field |
Type |
Description |
sourceImage |
string |
ist das rotierte Bild als Data-Url, brauchen wir eigentlich nicht im SLIM-UI |
initialRotation |
“0” | “90” | “180” | “270” |
|
degree |
number |
-45 - 45 |
frameAspect |
number |
|
scaleFactor |
number |
|
cropX |
number |
|
cropY |
number |
|
cropWidth |
number |
|
cropHeight |
number |
|
iExternalImageScaleHints
| Field |
Type |
Description |
min |
number |
|
max |
number |
|
dpiAtScale1 |
number |
|
iExternalImageSegmentModelModel
Type: “Segment Anything” | “Segment Anything 3”
| Field |
Type |
Description |
list? |
Array<iExternalFieldListEntry> |
|
thumbWidth |
number |
|
thumbHeight |
number |
|
imageCss |
string |
|
descriptionFilter? |
string |
|
colorsWithoutLabel? |
boolean |
|
iExternalMarginSettings
optional: show or hide margin guide lines
| Field |
Type |
Description |
show? |
boolean |
optional: show or hide margin guide lines |
inside? |
string |
optional: left (or inside) margin — Length string like "1cm" or "5mm" |
outside? |
string |
optional: right (or outside) margin — Length string like "1cm" or "5mm" |
top? |
string |
optional: top margin — Length string like "1cm" or "5mm" |
bottom? |
string |
optional: bottom margin — Length string like "1cm" or "5mm" |
columns? |
number |
optional: number of text columns (0–4) |
columnGap? |
string |
optional: gap between columns — Length string like "5mm" or "1cm" |
horizontalGuides? |
string[] |
optional: horizontal guide positions (y-axis lines) as length strings like "1cm" or "5mm" |
verticalGuides? |
string[] |
optional: vertical guide positions (x-axis lines) as length strings like "1cm" or "5mm" |
Type: null | “text-style-color” | “text-style-size” | “text-style-line-height” | “text-style-tracking” | “text-style-baseline-script” | “text-style-font” | “text-style-hAlign” | “text-style-vAlign” | “text-style-vAlign-hAlign” | “text-style-paragraph-style” | “handwriting-image” | “image-scale” | “image-placement” | “image-sepia” | “image-brightness” | “image-contrast” | “image-vivid” | “image-invert” | “image-hueRotate” | “image-rotation” | “image-crop” | “image-filter” | “letter-generator” | “remove-background” | “image-tools” | “crop+rotate” | “similar-images”
iExternalModifyDocumentPatch
Page size as numbers in this document’s own unit - the plain-number form of
ImportDocument.pageWidth, and only that form: this patch goes to the resize, not to the
importer, so {value, unit} is not accepted here. Read the unit from
templateOutline().documents[].unit rather than assuming. Pass both or neither.
A resize rebuilds the document’s spreads and rescales its margins, bleed and pasteboard with them,
so it is a real relayout and not a property change.
| Field |
Type |
Description |
name? |
string |
|
isEditable? |
boolean |
|
pageWidth? |
number |
Page size as numbers in this document’s own unit - the plain-number form of ImportDocument.pageWidth, and only that form: this patch goes to the resize, not to the importer, so {value, unit} is not accepted here. Read the unit from templateOutline().documents[].unit rather than assuming. Pass both or neither. A resize rebuilds the document’s spreads and rescales its margins, bleed and pasteboard with them, so it is a real relayout and not a property change. |
pageHeight? |
number |
|
facingPages? |
boolean |
|
iExternalModifyResult
The answer of every targeted template change (modifyFrame, setFrameImage, …). Never a throw:
a change that could not be applied comes back with ok: false and a message that says why, so an
automated caller can read the failure and correct itself.
| Field |
Type |
Description |
ok |
boolean |
|
message |
string |
One sentence, suitable both for showing a user and for handing back to an automated caller. |
frameId? |
string |
The id of the frame the change was aimed at, echoed so a caller can chain onto it. |
iExternalNumberUi
| Field |
Type |
Description |
max |
number |
|
min |
number |
|
step |
number |
|
digits |
number |
|
postfix |
string |
|
restrictRange? |
boolean |
|
restrictStep? |
boolean |
|
iExternalPhotobookDocInfo
| Field |
Type |
Description |
facing |
boolean |
|
minSpreads |
number |
|
maxSpreads |
number |
|
addSpreadCount |
number |
|
hasCoverDocument |
boolean |
|
aspect |
number |
|
iExternalPhotobookOptions
| Field |
Type |
Description |
distributionMethod |
“cc” | “fs” | “simple” |
|
spreadCount |
number |
|
imageCount |
number |
|
firstSpreadImageCount |
number |
|
lastSpreadImageCount |
number |
|
minImagesPerSpread |
number |
|
maxImagesPerSpread |
number |
|
maxCollectedPerSpread |
number |
|
filterImages |
boolean |
|
initialCreation |
boolean |
|
coverImageCount |
number |
|
useExclusiveCoverImages |
boolean |
|
iExternalPhotobookStep
Type: “mode” | “start” | “upload” | “adjust” | “analyze” | “customize” | “distribute” | “error” | “done”
iExternalPriceDisplay
Structure expected when calling set price information
| Field |
Type |
Description |
price |
string |
|
oldPrice? |
string |
|
legalNotice? |
string |
|
productName? |
string |
can be dependend on form fields |
infoUrl? |
string |
will be displayed via info icon in an iframe. |
priceCategoryLabels? |
Record<string, string> |
. Dynamically update pice categorie labels. |
iExternalProductPriceInfo
passed whenever a price could have possible changed
contains all price-relevant informations from printess in one place
| Field |
Type |
Description |
priceRelevantFormFields |
{ [key: string]: { value: string, tag: string } } |
key / value list of all price relevant form fields |
pricePerLetterFormFields |
{ [key: string]: { price: number, amount: number } } |
key / value list of all price-per-letter form fields with price and character count |
snippetPriceCategories |
Array<iUsedPriceCategory> |
Sum of all used priceCategoryGroups and there used amounts All used layout-snippets and stickers with a price category will be summed up here Form Fields with per-letter price catogorie will show here as well |
pageCount |
number |
Page count of book inside pages document if available, otherwise current document page count. |
printedRecordsCount |
number |
If a local table-form-field is used as data-source it returns the total numbers of records in the output PDF. If a column “circulation” is present, it outputs the row “circulation” times. Result is propably higher than the amount of records in the table-form-field In Single Photo Mode, printedRecordsCount is the total amount of prints produced. |
pureRecordsCount |
number |
If a local tabel-form-field is used as data-source it returns the numbers of rows in the table Form Field. This values does not include “circulation” set for individual rows. |
hasCirculationColumn |
boolean |
Indicates if the tabel-form-field has circulation column. |
priceCategories |
Array<string> |
@deprecated A list of all used document-price-categories. Only returns documents which have actually been edited by the buyer Important: Its deprecated, You can not enable this feature anymore! |
testModeEnabled |
boolean |
@internal |
iExternalProperty
availaible for slim-ui only
| Field |
Type |
Description |
id |
string |
|
value |
string | number |
|
kind |
iExternalPropertyKind |
|
label |
string |
|
info |
string |
|
ffName? |
string |
|
infoStyle |
FFInfoStyle |
|
controlGroup |
number |
|
controlGroupGap? |
number |
|
amountOfListedColors? |
number |
|
classNames? |
string |
|
isMobileHead? |
boolean |
|
controlGroupSize? |
number |
|
validation? |
iExternalValidation |
|
textStyle? |
iExternalTextStyle |
|
imageMeta? |
iExternalImageMeta |
|
listMeta? |
iExternalListMeta |
|
tableMeta? |
iExternalTableMeta |
|
tabId? |
string |
|
validationResult? |
{ remainingChars: string, error: string, remainingCharsNumber: number } |
|
bgColorIndex? |
number |
|
formFieldMeta? |
iExternalFormFieldMeta |
availaible for slim-ui only |
boxMetas? |
Array<iExternalBoxMeta> |
availaible for slim-ui only |
origin? |
“template” | “layout” |
availaible for slim-ui only |
position? |
number |
availaible for slim-ui only |
title? |
string |
availaible for slim-ui only |
fontGroups? |
string[] |
Allowed font groups for a font property / font-list form field (slim-ui only) |
colorGroups? |
string[] |
Allowed color groups for a color property / color-list form field (slim-ui only) |
onHiddenLayer? |
boolean |
Used only by Slim UI to store values |
linkedPropertyId? |
string |
|
panelScriptName? |
string |
Name of the panel-script function, only set when kind === “panel-script” |
iExternalPropertyKind
Type: “edit-text-button” | “edit-group-button” | “color” | “single-line-text” | “text-area” | “label” | “checkbox” | “background-button” | “splitter-layouts-button” | “grid-gap-button” | “convert-to-image” | “convert-to-text” | “record-left-button” | “record-right-button” | “horizontal-scissor” | “vertical-scissor” | “multi-line-text” | “selection-text-style” | “selection-letter-ai” | “selection-text-ai” | “selection-text-handwriting” | “number” | “pixelLength” | “percentLength” | “image” | “font” | “select-list” | “select-list+info” | “tab-list” | “image-list” | “image-list+caption” | “color-list” | “table” | “image-id” | “patternTileWidth” | “text-frame-style” | “custom-text-combo” | “panel-script”
iExternalRect
| Field |
Type |
Description |
left |
number |
|
top |
number |
|
width |
number |
|
height |
number |
|
iExternalRemoveBackgroundProvider
Type: “Printess” | “CutoutPro”
iExternalScriptInfo
One row of the script inventory: enough to choose what to read, carrying no body.
| Field |
Type |
Description |
name |
string |
|
type |
string |
|
signature |
string |
Everything before the opening brace - the parameter list a caller has to match. |
lines |
number |
|
params? |
Array<string> |
Parameter names off the signature. Developer test values only; no trigger reads them. |
readOnly? |
true |
Comes from the host page’s config.scripts, so it cannot be changed through this api. |
shadowedByHostScript? |
true |
A host script of the same name exists and wins every lookup, so this template script never runs - and is dropped the next time the template is serialized. |
iExternalScriptResult
One sentence, suitable both for showing a user and for handing back to an automated caller.
| Field |
Type |
Description |
ok |
boolean |
|
message |
string |
One sentence, suitable both for showing a user and for handing back to an automated caller. |
scriptName? |
string |
The name of the script the call was aimed at, echoed so a caller can chain onto it. |
iExternalScriptSource
Extends: iExternalScriptResult
| Field |
Type |
Description |
type? |
string |
|
js? |
string |
|
params? |
Array<{ key: string, value: string }> |
|
readOnly? |
true |
|
iExternalSegmentAnythingTaskStore
| Field |
Type |
Description |
md? |
iExternalImageSegmentModelModel |
model |
pt? |
string |
prompt |
cls |
string |
classes |
out |
string |
output |
cp |
boolean |
crop |
dp |
boolean |
doublePass |
es |
number |
erosionStrength |
ss |
number |
smoothingStrength |
iExternalSegmentFaceProvider
Type: “Printess” | “CutoutPro”
iExternalSegmentFaceTaskStore
iExternalSnippet
| Field |
Type |
Description |
title |
string |
|
snippetUrl |
string |
|
thumbUrl |
string |
|
facingPagesUrl? |
string |
|
bgColor |
string |
|
priceLabel |
string |
|
imageCount |
number |
|
sortNumber |
number |
|
keywords? |
string[] |
|
colorSchemes? |
Array<{ name: string, default: boolean }> |
|
colorSchemeThumbUrls? |
Record<string, string> |
|
iExternalSnippetCluster
| Field |
Type |
Description |
tabId |
string |
|
name |
string |
|
columns |
number |
|
stickerMenuId |
string |
|
stickerMenuTags |
string[] | ReadonlyArray<string> |
|
snippets |
Array<iExternalSnippet> |
|
iExternalSpreadInfo
ID of the spreads document
| Field |
Type |
Description |
docId |
string |
ID of the spreads document |
spreadId |
string |
ID of the spread |
index |
number |
Zero based spread index (not page nr) |
name |
string |
Name of spread if set by the designer |
names |
Array<string> |
For multiple pages on a spread: name per page or empty string Array always has pagesamount of entries. User can enter spread-name array members devided by pipe symbol: name="left|right" will be exposed as names=["left", "right"] |
width |
number |
Spread width in pixel |
height |
number |
Spread height in pixel |
pages |
number |
|
thumbnails |
Array<{ url: string, bgColor: string, pageId: string }> |
Array of page thumbnails. Url might be empty if not available |
iExternalSpreadOutline
One spread in templateOutline.
| Field |
Type |
Description |
id |
string |
The live id. This is what addFrame and replaceSpread take. |
address |
string |
"<document> / <page>", e.g. "Letterhead / 2-3" - the readable handle the readers accept. |
pages |
string |
The page number the designer sees: "1", or "2-3" for a double spread. |
label? |
string |
Most spreads have none, and a label is not unique across documents - address by id or address. |
open? |
boolean |
|
widthPx |
number |
Spread size in document pixels: the space the frame apis and onAutoSizeChange use. |
heightPx |
number |
|
frames |
number |
A count. Call exportSpread to see the frames themselves. |
iExternalStyleResult
One sentence, suitable both for showing a user and for handing back to an automated caller.
| Field |
Type |
Description |
ok |
boolean |
|
message |
string |
One sentence, suitable both for showing a user and for handing back to an automated caller. |
className? |
string |
The style class the call was aimed at, echoed so a caller can chain onto it. |
iExternalTab
| Field |
Type |
Description |
id |
string |
|
caption |
string |
|
head? |
string |
|
icon |
iconName |
|
iExternalTableAddOption
| Field |
Type |
Description |
label |
string |
|
type |
string |
|
libFF |
string |
|
multi |
boolean |
|
bg |
string |
|
iExternalTableColumn
Maximum allowed characters
| Field |
Type |
Description |
name |
string |
|
label? |
string |
|
readonly? |
boolean |
|
data? |
“string” | “boolean” | “number” | “image” | “color” | “multi” |
|
list? |
Array<string | number> |
|
listMode? |
“select” | “auto-complete” | “multi-from-form-field” |
|
width? |
string |
|
row? |
string |
|
hide? |
boolean |
|
max? |
number |
Maximum allowed characters |
inline? |
boolean |
|
type? |
string |
|
mandatory? |
boolean |
|
| Field |
Type |
Description |
columns |
Array<iExternalTableColumn> |
|
month? |
number |
|
year? |
number |
|
tableType |
“generic” | “calendar-events” |
|
minTableEntries |
number |
|
maxTableEntries |
number |
|
tableAddOptions |
Array<iExternalTableAddOption> |
|
iExternalTemplateOutline
The template’s structure with no frame detail - the cheapest way to find out what exists and what
everything is called, and the first thing to call when a host page did not build the template
itself. Always answers: there is always a loaded document.
| Field |
Type |
Description |
documents |
Array<iExternalDocumentOutline> |
|
currentDocument |
string |
|
currentSpreadId? |
string |
|
templateType |
“standalone” | “manualMerge” | “design” | “designPlus” | “base” | “resourceLibrary” | “stickerLibrary” | “layoutLibrary” |
What this template IS, rather than what is in it: "standalone" for a product that prints, "layoutLibrary" for a library whose documents are offered to other templates as layouts, "stickerLibrary" for stickers, and the design / base / merge types beside them. It decides whether a document’s snippet settings ever reach anybody: in any other type a document can carry every tag and keyword there is and will never be published as a snippet. |
iExternalText2ImageBackground
Type: “transparent” | “opaque” | “auto”
iExternalText2ImageModel
GPT Image 1, GPT ImageEdit (its older name) and GPT Image 1.5 are retired. A frame may still
hold one, and from 2026-10-22 it runs on GPT Image 2.5 Flare. Do not set them.
Type: “SDXL” | “Flux Ultra” | “Flux Pro” | “Flux Dev” | “Flux Schnell” | “GPT Image 1” | “GPT ImageEdit” | “GPT Image 1.5” | “GPT Image 2” | “GPT Image 2.5 Flare” | “GPT Image 2.5 Sunburst” | “Nano Banana” | “Nano Banana Pro” | “Nano Banana 2” | “Ideogram 4”
iExternalTextStyle
| Field |
Type |
Description |
size |
string |
|
lineHeight |
number |
|
color |
string |
|
font |
string |
|
tracking |
number |
|
hAlign |
“bullet” | “left” | “center” | “right” | “justifyLeft” | “justifyCenter” | “justifyRight” | “justifyJustify” |
|
vAlign |
“top” | “center” | “bottom” |
|
allows |
Array<“insertFormFields” | “forceValidation” | “expressions” | “removeIfDefault” | “strokeWidth” | “clearOnFocus” | “offensive” | “content” | “mandatory” | “color” | “stroke” | “font” | “size” | “superscript” | “lineHeight” | “tracking” | “baselineShift” | “horizontalAlignment” | “verticalAlignment” | “padding” | “styles” | “bullet” | “indent” | “paragraphSpacing” | “baselineGrid” | “handWriting” | “letterGenerator”> |
|
baselineScript |
“none” | “super” | “sub” |
|
pStyle |
string |
|
spaceAfterPx |
number |
|
spaceBeforePx |
number |
|
iExternalUpscaleProvider
Type: “Printess” | “CutoutPro”
iExternalValidation
Optional placeholder text shown while the field value is empty (textbox and text-area form fields only).
| Field |
Type |
Description |
maxChars |
number |
|
regExp |
string |
|
regExpMessage |
string |
|
defaultValue |
string |
for mandatory check |
textTransform |
“mixed” | “upper” | “lower” |
|
isMandatory |
boolean |
|
clearOnFocus |
boolean |
|
placeholder? |
string |
Optional placeholder text shown while the field value is empty (textbox and text-area form fields only). |
noOffensiveLanguage |
boolean |
|
visibility |
“always” | “conditional-on” | “conditional-off” |
|
htmlInputType |
“text” | “password” | “email” | “number” | “tel” | “url” | “search” | “date” | “datetime-local” | “month” | “week” | “time” |
|
maxNumber |
number |
|
| Field |
Type |
Description |
name |
string |
|
value |
string | object |
|
| Field |
Type |
Description |
name |
string |
|
addNew? |
“text” | “label” |
|
addPosition? |
“top” | “bottom” |
TODO: Support position |
regExp? |
string |
|
regExpMessage? |
string |
|
info? |
string |
|
maxChars? |
number |
|
priceDisplay? |
number |
|
pricePrefix? |
string |
|
pricePostfix? |
string |
|
hasPerLetterPricing? |
boolean |
|
isMandatory? |
boolean |
|
clearOnFocus? |
boolean |
|
priceRelevant? |
boolean |
|
list? |
Array<formFieldListEntry> |
|
visibility? |
“admin” | “buyer” | “condition” |
|
condition? |
string |
|
caption? |
string |
|
classNames? |
string |
|
iFrameCountAndMarkers
Provides information about number of frames edited by the buyer per document
| Field |
Type |
Description |
documentName |
string |
Name of document |
frames |
number |
Count of buyer manipulated frames |
spreads |
Array<iFrameCountAndMarkersSpread> |
Detailed information about all spreads |
iFrameCountAndMarkersSpread
Provides information about number of frames edited by the buyer per spread
| Field |
Type |
Description |
spreadName |
string |
Name of spread |
frames |
number |
Count of buyer manipulated frames on spread |
markers |
Record<string, number> |
List of markes used by buyer manipulted frames on spread |
IGenericDialogOptions
Fired when user press then ok button. Return “keep-open” to not close the dialog
| Field |
Type |
Description |
callback |
() => Promise<void | “keep-open”> | void | “keep-open” |
Fired when user press then ok button. Return “keep-open” to not close the dialog |
cancelCallback? |
() => Promise<void | “keep-open”> | void | “keep-open” |
Fired when user press then cancel button. Return “keep-open” to not close the dialog |
headline |
string |
|
okLabel? |
string |
|
cancelLabel? |
string |
|
message? |
string |
|
info? |
string |
|
relativePosition? |
boolean |
|
minHeight? |
string |
|
iImage
| Field |
Type |
Description |
fileName |
string |
|
original |
iScaledImage |
|
source? |
iScaledImage |
in case it’s not png or jpg, this one contains the info about the source file (pdf, svg, tif etc) |
scaledVersions? |
iScaledImage[] |
|
originalOrder? |
number |
|
originalGroup? |
string |
|
version? |
number |
|
average? |
number |
number ranging from 0-255 (0 full black, 255 full white), the average of the image pixel values |
iImageConversionSettings
| Field |
Type |
Description |
mode |
iConversionMode |
|
prompt? |
string |
|
quality? |
string |
|
resolution? |
string |
|
background? |
string |
|
iLoadTemplateOptions
All parameters of loadTemplateAndFormFields() as one object: the positional parameters by their name, plus the settings of iLoadTemplateSettings.
Extends: iLoadTemplateSettings
| Field |
Type |
Description |
templateName |
string |
The name of a template (case sensitive) or the save token of a saved design. |
mergeTemplates? |
iMergeTemplate[] | null |
|
formFields? |
iFormFieldNameValue[] | null |
|
snippetPriceCategoryLabels? |
string[] | null |
|
formFieldProperties? |
iFormFieldProperty[] | null |
|
clearExchangeCaches? |
boolean |
Clear the exchange cache and the last loaded scope, so no data is exchanged. Defaults to false. |
templateVersion? |
“draft” | “published” |
The template version to load. Defaults to “draft” for backward compatibility; always pass “published” in a live shop. |
iLoadTemplateSettings
The settings attachPrintess() applies on top of its template, for loadTemplateAndFormFields().
They are applied after the template loaded, in this order, before the form field properties and values of the same call.
None of them leaves an undo step.
| Field |
Type |
Description |
bookSettings? |
iExternalBookSettings |
Book settings for the loaded book, applied as adjustBook() applies them. Ignored with a warning when the template is not a book. |
singlePrintsSettings? |
{ minImages: number, maxImages: number } |
The number of images a single prints template takes. Both must be set, with maxImages above minImages. |
photobookThemeMenuId? |
string |
Overrides the template’s photobook theme menu. Pass the menu id, not the name; you can copy it from the Account Portal. |
bookInsidePages? |
number |
The page count of the book’s inside pages document, 4 or more. Pages are added at the end or removed from the end. |
formFieldsUrl? |
string |
URL of a json file with form field values: { "environment": { "<form field name>": "<value>", ... } }. A string value is set as it is, an object value as its json. Applied after formFieldProperties and before formFields. |
ImageAIFilter
not gpt-only any more, but keeps its name so saved filters still read
Extends: ImageEditSettings
ImageAIFilterCategory
| Field |
Type |
Description |
id |
string |
|
label |
string |
|
filters |
ImageAIFilter[] |
|
ImageAiFilterModel
Every model that can edit a picture. Spelled out rather than derived, because this file may not
import: genImageCapabilitiesForModel(model, "edit") in the editor is the source of truth, and a
test pins this union to it. GPT Image 1 and GPT ImageEdit are one model - the latter is the
name it was stored under before it had a version number, kept because saved filters hold it.
Both, and GPT Image 1.5, are retired: no picker offers them, and from 2026-10-22 a saved filter
that holds one runs on GPT Image 2.5 Flare.
Type: “GPT ImageEdit” | “GPT Image 1” | “GPT Image 1.5” | “GPT Image 2” | “GPT Image 2.5 Flare” | “GPT Image 2.5 Sunburst” | “Nano Banana” | “Nano Banana Pro” | “Nano Banana 2” | “Flux Pro Kontext” | “Flux 2 Klein 4B” | “Ideogram 4”
ImageAiFilterType
Type: “IMAGE-EDIT”
ImageEditSettings
The per-model settings an edit can be given. Each is dropped when the chosen model has no such
setting, so passing one a model does not support is harmless rather than an error.
Quality is not here: it is already the third parameter of createImageEdit, and offering it in
two places would need a rule about which one wins.
| Field |
Type |
Description |
resolution? |
“0.5K” | “1K” | “2K” | “4K” |
nothing means the target frame’s own size decides the class |
background? |
“transparent” | “opaque” | “auto” |
|
promptExpansion? |
“None” | “Medium” | “Large” |
|
acceleration? |
“none” | “low” | “regular” | “high” |
|
enhancePrompt? |
boolean |
|
iMakeData
| Field |
Type |
Description |
businessName |
string |
|
businessType |
string |
|
valueProposition |
string |
|
language |
string |
|
logoUrl |
string |
|
email |
string |
|
website |
string |
|
tel |
string |
|
addressLine1 |
string |
|
addressLine2 |
string |
|
addressLine3 |
string |
|
iMergeTemplate
Name of the template or Snippet ID to load an merge into the currently loaded template.
| Field |
Type |
Description |
templateName |
string |
Name of the template or Snippet ID to load an merge into the currently loaded template. |
templateVersion? |
“draft” | “published” |
The version to load. Defaults to “published”. |
documentName? |
string |
Name of the document you want to merge. If none is specified the primary document of the template will be taken. |
spreadIndex? |
number |
At what spread index the incoming template will be merged |
mergeMode? |
MergeMode |
Force Printess to merge in a particular layout-snippet mode. Frames which are merged as “layout-snippets” or “repeat-snippets” will be removed once the user places a new layout-snippet of the same type. |
mergeResources? |
MergeResource[] |
Define which resources you want to merge from the template additionally. |
useAsTemplateName? |
boolean |
Use the template name of this merge template to overwrite the master template name. When producing this template, you’ll see this merge template name instead of the master template name. |
pos? |
iExternalRect |
|
ignoreExchangeIds? |
boolean |
Tells printess to not apply exchange-id data |
ImgModel_Flux2Klein4BEdit
| Field |
Type |
Description |
model |
“Flux2Klein4BEdit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
allowCache? |
boolean |
|
ImgModel_FluxDev
| Field |
Type |
Description |
model |
“FluxDev” |
|
prompt |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_FluxPro
| Field |
Type |
Description |
model |
“FluxPro” |
|
prompt |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_FluxProKontextEdit
| Field |
Type |
Description |
model |
“FluxProKontextEdit” |
|
prompt |
string |
|
inputImageUrl |
string |
|
enhancePrompt? |
boolean |
|
allowCache? |
boolean |
|
ImgModel_FluxSchnell
| Field |
Type |
Description |
model |
“FluxSchnell” |
|
prompt |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_FluxUltra
| Field |
Type |
Description |
model |
“FluxUltra” |
|
prompt |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage1
| Field |
Type |
Description |
model |
“GptImage1” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” |
|
background? |
“transparent” | “opaque” | “auto” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage1_5
| Field |
Type |
Description |
model |
“GptImage1_5” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” |
|
background? |
“transparent” | “opaque” | “auto” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage1_5Edit
| Field |
Type |
Description |
model |
“GptImage1_5Edit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
quality? |
“low” | “medium” | “high” |
|
background? |
“transparent” | “opaque” | “auto” |
|
allowCache? |
boolean |
|
ImgModel_GptImage1Edit
| Field |
Type |
Description |
model |
“GptImage1Edit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
quality? |
“low” | “medium” | “high” |
|
background? |
“transparent” | “opaque” | “auto” |
|
allowCache? |
boolean |
|
ImgModel_GptImage2
| Field |
Type |
Description |
model |
“GptImage2” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage2_5Flare
| Field |
Type |
Description |
model |
“GptImage2_5Flare” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” | “xhigh” | “max” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage2_5FlareEdit
| Field |
Type |
Description |
model |
“GptImage2_5FlareEdit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
quality? |
“low” | “medium” | “high” | “xhigh” | “max” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
allowCache? |
boolean |
|
ImgModel_GptImage2_5Sunburst
| Field |
Type |
Description |
model |
“GptImage2_5Sunburst” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” | “xhigh” | “max” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_GptImage2_5SunburstEdit
| Field |
Type |
Description |
model |
“GptImage2_5SunburstEdit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
quality? |
“low” | “medium” | “high” | “xhigh” | “max” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
allowCache? |
boolean |
|
ImgModel_GptImage2Edit
| Field |
Type |
Description |
model |
“GptImage2Edit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
quality? |
“low” | “medium” | “high” |
|
resolution? |
“1K” | “2K” | “4K” |
|
background? |
“transparent” | “opaque” | “auto” |
|
allowCache? |
boolean |
|
ImgModel_Ideogram4
| Field |
Type |
Description |
model |
“Ideogram4” |
|
prompt |
string |
|
quality? |
“low” | “medium” | “high” |
used for the “rendering_speed” setting |
promptExpansion? |
“None” | “Medium” | “Large” |
|
acceleration? |
“none” | “low” | “regular” | “high” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_Ideogram4Edit
| Field |
Type |
Description |
model |
“Ideogram4Edit” |
|
prompt |
string |
|
inputImageUrl |
string |
|
quality? |
“low” | “medium” | “high” |
used for the “rendering_speed” setting |
promptExpansion? |
“None” | “Medium” | “Large” |
|
acceleration? |
“none” | “low” | “regular” | “high” |
|
allowCache? |
boolean |
|
ImgModel_NanoBanana
| Field |
Type |
Description |
model |
“NanoBanana” |
|
prompt |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_NanoBanana2
| Field |
Type |
Description |
model |
“NanoBanana2” |
|
prompt |
string |
|
resolution? |
“0.5K” | “1K” | “2K” | “4K” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_NanoBanana2Edit
| Field |
Type |
Description |
model |
“NanoBanana2Edit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
resolution? |
“0.5K” | “1K” | “2K” | “4K” |
|
allowCache? |
boolean |
|
ImgModel_NanoBananaEdit
| Field |
Type |
Description |
model |
“NanoBananaEdit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
allowCache? |
boolean |
|
ImgModel_NanoBananaPro
| Field |
Type |
Description |
model |
“NanoBananaPro” |
|
prompt |
string |
|
resolution? |
“1K” | “2K” | “4K” |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
ImgModel_NanoBananaProEdit
| Field |
Type |
Description |
model |
“NanoBananaProEdit” |
|
prompt |
string |
|
inputImageUrls |
string[] |
|
resolution? |
“1K” | “2K” | “4K” |
|
allowCache? |
boolean |
|
ImgModel_Sdxl
| Field |
Type |
Description |
model |
“SDXL” |
|
prompt |
string |
|
negativePrompt? |
string |
|
stylePreset? |
string |
|
allowCache? |
boolean |
|
| Field |
Type |
Description |
icon? |
iconName | “none” |
|
thumbCssUrl? |
string |
|
circleStyle? |
string |
|
ffCircleCaption? |
string |
|
caption |
string |
|
hasCollapsedMetaProperties |
boolean |
|
newState |
iMobileUiState |
|
hide? |
boolean |
|
iMobileUiState
| Field |
Type |
Description |
state |
“ext-value” | “form-fields” | “selection” | “imageCrop” | “table-edit” | “off-canvas” | “text-frame-style” |
|
externalProperty? |
iExternalProperty |
|
metaProperty? |
iExternalMetaPropertyKind |
|
tableRowIndex? |
number |
|
iPhotobookEstimation
| Field |
Type |
Description |
spreads |
number |
|
clusterCounts |
Array<number[]> |
|
imagesPerSpread |
Array<number> |
|
iPhotobookTheme
| Field |
Type |
Description |
name |
string |
|
thumb |
string |
|
themeTags |
string[] |
|
searchTags |
string[] |
|
backgroundTags |
string[] |
|
stickerTags? |
string[] |
|
stickerMenuId? |
string |
|
textStickerTags? |
string[] |
|
textStickerMenuId? |
string |
|
photoStickerTags? |
string[] |
|
photoStickerMenuId? |
string |
|
keywords |
string[] |
for keyword menu based filtering |
pageCount |
number |
|
pageSetup |
Array<{ snippet: iPhotobookThemePageInfo | null, type: PhotobookThemePageType }> |
|
backgroundSnippet |
iPhotobookThemePageInfo | null |
|
filtering |
PhotobookThemeFiltering |
|
wizard |
PhotobookThemeWizard |
|
hasThemeLayoutsCover? |
boolean |
|
hasThemeLayoutsSingle? |
boolean |
|
hasThemeLayoutsDouble? |
boolean |
|
hasThemeLayoutsBackground? |
boolean |
|
assignSinglePhoto? |
PhotobookThemeSinglePhoto |
|
iPhotobookThemeListEntryDto
keys: “photobookThemes” and “printess-photobookThemes” (If we like to support global themes)
Hier kann DTO und Object das gleiche sein wie beim Menu …
| Field |
Type |
Description |
n |
string |
name |
t |
string |
thumbnail |
kws |
string[] |
keywords |
tt |
string[] |
theme-tags |
iPhotobookThemePageInfo
| Field |
Type |
Description |
id |
string |
|
snippetUrl |
string |
|
global |
boolean |
|
docId |
string |
|
thumb |
string |
|
keywords |
string[] |
|
type |
PhotobookThemePageType |
|
editables? |
{ texts: number; images: number; shapeColors: number; } |
|
IProduct
| Field |
Type |
Description |
id |
string |
|
displayName? |
string |
|
thumbnailUrl? |
string |
|
shopUrl? |
string |
|
iRect
| Field |
Type |
Description |
left |
number |
|
top |
number |
|
width |
number |
|
height |
number |
|
ISavedShopData
| Field |
Type |
Description |
shopData |
IShopData |
|
saveToken |
string |
|
displayName |
string |
|
thumbnailUrl |
string |
|
savedOn? |
Date |
|
expiresOn? |
Date |
|
iScaledImage
| Field |
Type |
Description |
id |
string |
|
url |
string |
|
width |
number |
|
height |
number |
|
userState? |
string | number | Record<string, unknown> |
|
isImmutable? |
boolean |
|
fileHash? |
string |
|
version? |
number |
|
IShopData
| Field |
Type |
Description |
shopId |
string |
|
shopUserId |
string |
|
product |
IProduct |
|
data? |
unknown |
|
iShowPagesPreviewMode
Type: “never” | “mobile” | “desktop” | “both”
| Field |
Type |
Description |
keywords |
Array<string> |
|
name |
string |
|
id |
string |
|
iStoryContent
| Field |
Type |
Description |
pts |
Array<any> |
Array |
iTableGroupNav
How a buyer-side table form field lets buyers jump to a group: the groups side by side as
clickable buttons, one dropdown listing them, or no navigation at all. Defaults to “none”.
Type: “pills” | “dropdown” | “none”
iUsedPriceCategory
Information about all used price categories plus the number of usages.
‘priceCategory’ starts with 1(!)
| Field |
Type |
Description |
priceCategory |
number |
|
amount |
number |
|
JobStatus
| Field |
Type |
Description |
jobId |
string |
|
isFinalStatus |
boolean |
|
isSuccess |
boolean |
|
enqueuedOn |
string |
|
processingOn |
string | null |
|
finishedOn |
string | null |
|
failedOn |
string | null |
|
errorDetails |
string | null |
|
result |
{ s: { t: number, p: number, c: number, d: number }, r: Record<string, string>, p: { d: string, u: string, i: number }[] } |
|
MergeMode
Type: “merge” | “layout-snippet-no-repeat” | “layout-snippet-repeat-all” | “layout-snippet-repeat-inside” | “layout-snippet-no-repeat-persist-stickers” | “layout-snippet-repeat-all-persist-stickers” | “layout-snippet-repeat-inside-persist-stickers”
MergeResource
Type: “images” | “fonts” | “colors” | “snippet-lists” | “form-fields” | “new-form-fields” | “form-field-list-data” | “form-field-list-and-value” | “styles” | “layer-matrix”
MessageTopic
Type: “SplitterFrameToText” | “ShowAlert” | “OpenImageUpload” | “MobileImagesUpload” | “MobileImagesRejected” | “BuyerUploadedImages”
PanelUiHintPos
Type: “zoom-in” | “image-upload”
PhotobookDistribution
Type: “MagicMode” | “OneImagePerPage” | “FixedThemeWithAdditionalPages”
PhotobookThemeFiltering
Type: “show-all-themes” | “hide-theme-selection” | “use-theme-keywords”
PhotobookThemePageType
Type: “cover” | “single” | “double”
PhotobookThemeSinglePhoto
Type: “always” | “never” | “not-on-landscape”
PhotobookThemeWizard
Type: “show-ai-and-freestyle” | “show-only-ai” | “show-only-freestyle”
printessCallbacks
All callbacks Printess can fire into the host UI. Every callback is optional;
pass the ones your UI needs as part of ```printessAttachParameters```.
A buyer UI minimally handles selection/spread changes plus the basket flow.
| Field |
Type |
Description |
loadingFadeCallback? |
() => void |
If you application displays a loading animation, this call tells you to start your fade-out animation. Loading will be done soon. |
loadingDoneCallback? |
() => void |
Printess has completely loaded the requested template and is now ready to operate. |
templateOpenedCallback? |
(templateName: string, hasPublishedVersion: boolean) => void |
Fires when an template has been opened from the open menu. |
templatePublishedCallback? |
(templateName: string) => void |
Fires when an template has been saved and published. |
formFieldChangedCallback? |
externalFormFieldChangeCallback |
For every Form Field which is set to Impact-Price Printess fires a callback when the value has changed |
selectionChangeCallback? |
externalSelectionChangeCallback |
Here is the place to draw your properties ui. It gets passed all the current properties and the current scope for the scope “document” means no selected frame and “frames” are selected frames |
spreadChangeCallback? |
externalSpreadChangeCallback |
Fires whenever the user selects a new page/spread and passes snippet-lists and spread-info. Now it’s time to redraw Layout-Snippets and Group-Snippets/Stickers |
docChangeCallback? |
externalDocChangeCallback |
Fires whenever the user selects a new document |
getOverlayCallback? |
externalGetOverlayCallback |
To indicate selectable frames Printess fires this callback where you can provide a custom div |
receiveMessageCallback? |
receiveMessageCallback |
Arbitary method used to send messages from printess to the web-ui. Current usages: topic="SplitterFrameToText" data={} Indicates that the user has converted a splitter image to a text frame topic="ShowAlert", data.text="The text to display" Asks for an alert box to be shown to the user. topic="BuyerUploadedImages", data.images = iExternalImage[] Asks for an alert box to be shown to the user. topic="MobileImagesRejected", data.count = number Tells how many of the images announced by the phone upload failed and will not arrive. |
refreshPaginationCallback? |
refreshPaginationCallback |
Is called when the page navigation has changed (and needs redraw) but selection has stayed the same. |
refreshUndoRedoCallback? |
refreshUndoRedoCallback |
Is called when the undo state has changed (and needs redraw of buttons) |
updatePageThumbnailCallback? |
updatePageThumbnailCallback |
Is called when the page thumbnail has been updated to allow buyer-ui to refresh a particular thumbnail only |
addToBasketCallback? |
(saveToken: string, thumbnailUrl: string) => void |
Provide a callback function which is called when the buyer presses the [Add to Basket] button Design is automtically saved and function gets a [token] to load or print this design. |
backButtonCallback? |
(saveToken: string, thumbnailUrl: string) => void |
Provide a callback function which is called when the buyer presses the [Back] button Design is automatically saved and function gets a [token] to load or print this design |
saveTemplateCallback? |
(saveToken: string, type: “save” | “close”, thumbnailUrl: string) => void |
Provide a callback function which is called when the buyer presses the [Save] button Design is automatically saved and function gets a [token] to load or print this design |
getShopDataCallback? |
(() => Promise<IShopData>) |
Provide a callback function which is called when the buyer presses the [Save] button A save dialog will open and depending on login state the user can login, register or if logged in save the project with a custom displayName |
isShopUserLoggedInCallback? |
(() => Promise<boolean>) |
Provide a callback function which is called when the buyer presses the [Save] button Information about the login state of the user is required |
getShopProjectDisplayNameCallback? |
(() => Promise<string>) |
Provide a callback function which is called when the buyer presses the [Save] button Information about the display name of the product is required |
getShopSavedDataCallback? |
((shopData: IShopDataProjectName) => void) |
Provide a callback function which is called when the buyer presses the [Save] button Information about the shopData of the user is provided |
shopDataLoadedCallback? |
((data: ISavedShopData) => void) |
Provide a callback function which is called when the buyer presses the [Load] button and is loading a saved project This callback can be used to reinitialize the integration (switching variants / update pricing etc) |
getShopLoginCallback? |
((type: “register” | “login”, saveToken: string, thumbnailUrl: string, displayName: string) => void) |
Provide a callback function which is called when the buyer presses the [Save] button If the user is not logged in yet the shopLoginCall is required to return if the user click login/register button Besides saveToken, thumbnailUrl and custom project name (displayName) are returned for saving the template |
loadTemplateButtonCallback? |
() => void |
Provide a callback function which is called when the buyer presses the [Load] button No automatic save is executed before. |
imageListChangeCallback? |
() => void |
Provide a callback function which is called whenever the buyer-image-list changed or an image is assigned to a frame Use it, to redraw your buyer-image list if you have one. |
priceChangeCallback? |
externalPriceChangeCallback |
Will be raised if any price relevant information of the design has been changed |
zoomChangeCallback? |
externalZoomChangeCallback |
Will be raised if any price relevant information of the design has been changed |
errorCallback? |
(errorName: ErrorName, data?: Record<string, string>) => void |
Provide a callback function which is called when an error happens. |
onAiUsageCallback? |
(ai: string, credits: number) => void |
Triggered when a call using AI credits is made. Possible ai parameter values are: “upscale”, “upscale (CutoutPro)”, “nsfw”, “remove background”, “remove background (CutoutPro)”, “countour”, “face swap”, “text generation”, “Segment Anything”, “Segment Anything 3”, “segment face”, “segment face (CutoutPro)”, “GPT Image 1”, “GPT ImageEdit”, “OpenAi Image Edit - low”, “OpenAi Image Edit - medium”, “OpenAi Image Edit - high”, “GPT Image 1.5 - low”, “GPT Image 1.5 - medium”, “GPT Image 1.5 - high”, (both retired: from 2026-10-22 the server runs GPT Image 1 and 1.5 on GPT Image 2.5 Flare) “GPT Image 2 - low”, “GPT Image 2 - medium”, “GPT Image 2 - high”, “GPT Image 2.5 Flare - low”, “GPT Image 2.5 Flare - medium”, “GPT Image 2.5 Flare - high”, “GPT Image 2.5 Flare - xhigh”, “GPT Image 2.5 Flare - max”, “GPT Image 2.5 Sunburst - low”, “GPT Image 2.5 Sunburst - medium”, “GPT Image 2.5 Sunburst - high”, “GPT Image 2.5 Sunburst - xhigh”, “GPT Image 2.5 Sunburst - max”, “Nano Banana”, “Nano Banana Pro”, “Nano Banana Pro - 2K”, “Nano Banana Pro - 4K”, “Nano Banana 2 - 0.5K”, “Nano Banana 2”, “Nano Banana 2 - 2K”, “Nano Banana 2 - 4K”, “Flux Ultra”, “Flux Pro”, “Flux Dev”, “Flux Schnell”, “Flux 2 Klein 4B”, “Flux Pro Kontext” “Claude Design”, “Script Creation” “SDXL”, “Ideogram 4 - low”, “Ideogram 4 - medium”, “Ideogram 4 - high”, “opus-5.5”, “opus-5.0”, “opus-4.8”, “opus-4.7”, “sonnet-5.5”, “sonnet-5.0”, “sonnet-4.6”, “haiku-4.5”, “gpt-5.6-terra”, “gpt-5.6-luna”, “gpt-5.4-mini”, “gpt-5.4-nano”, “gpt-4o”, |
uiTabChangeCallback? |
externalTabChangeCallback |
Triggered when the user changes a Tab tabId can have this values: “#NONE” | “#LAYOUTS” | “#PHOTOS” | “#THEME” | “#PAGES” | “#ADD-TEXT” | “#ADD-IMAGE” | “#FORMFIELDS” | “#FORMFIELDS1” | “#FORMFIELDS2” | string; |
ProgressCallback
Type: (uploaded: number, total: number) => void
receiveMessageCallback
Type: undefined | ((topic: MessageTopic, data: Record<string, any>) => void)
Type: undefined | (() => void)
refreshUndoRedoCallback
Type: undefined | (() => void)
SdxlStyle
Type: “No Style” | “photographic” | “3d-model” | “analog-film” | “cinematic” | “Tilt-Shift” | “Long Exposure” | “anime” | “comic-book” | “Craft Clay” | “digital-art” | “enhance” | “Advertising” | “Alien” | “Horror” | “Neon Noir” | “Silhouette” | “fantasy-art” | “line-art” | “low-poly” | “origami” | “pixel-art” | “Abstract” | “Cubist” | “Graffiti” | “Impressionist” | “Pointillism” | “Pop Art” | “Psychedelic” | “Renaissance” | “Steampunk” | “Surrealist” | “Watercolor” | “Retro Game” | “Architectural” | “Disco” | “Dreamscape” | “Dystopian” | “Fairy Tale” | “Gothic” | “Grunge” | “Minimalist” | “Monochrome” | “Space” | “Stained Glass” | “Tribal” | “Zentangle” | “Flat Papercut” | “Papercut Shadow Box” | “Stacked Papercut” | “Kirigami” | “Paper Mache” | “Paper Quilling” | “Papercut Collage” | “Thick Layered Papercut”
StoppingToken
| Field |
Type |
Description |
isCancellationRequested |
boolean |
|
TemplateEditables
TextEffort_Anthropic
Type: “low” | “medium” | “high” | “xhigh” | “max”
TextModel_Anthropic
Type: “opus-5.5” | “opus-5.0” | “opus-4.8” | “opus-4.7” | “sonnet-5.5” | “sonnet-5.0” | “sonnet-4.6” | “haiku-4.5”
TextModel_OpenAi
Type: “gpt-5.6-terra” | “gpt-5.6-luna” | “gpt-5.4-mini” | “gpt-5.4-nano” | “gpt-4o”
textStyleModeEnum
Type: “default” | “all-paragraphs” | “all-paragraphs-if-no-selection”
updatePageThumbnailCallback
Type: undefined | ((spreadId: string, pageId: string, url: string) => void)
UploadProvider
The main method to upload data.
| Field |
Type |
Description |
upload |
(formData: FormData, progressCallback?: ProgressCallback) => Promise<UploadResult> |
The main method to upload data. |
uploadImage |
(formData: FormData, progressCallback?: ProgressCallback) => Promise<UploadResult> |
Specialized method for uploading images. You can simply forward it to upload in case you don’t need special handling of those. |
uploadFont |
(formData: FormData, progressCallback?: ProgressCallback) => Promise<UploadResult> |
Specialized method for uploading fonts. You can simply forward it to upload in case you don’t need special handling of those. |
beforeAddingFormData? |
(formData: FormData, blob: Blob, fileName: string) => void |
This method is called before Printess adds the form data containing the data needed for the upload. Use it in case you must prepend some fields to the form data before. |
UploadResult
| Field |
Type |
Description |
originalFormName? |
string |
|
id |
string |
|
url |
string |
|
userState? |
string | number | Record<string, unknown> |
|