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

Field Type Description
id string
name string
simpleTexts ContentEditableItem[]
multilineTexts ContentEditableItem[]
images ContentEditableItem[]
stories Record<string, string[]>

ErrorName

Type: “templateNotFound” | “addToBasketFailed”

externalDocChangeCallback

Type: (newDocId: string) => void

externalFormFieldChangeCallback

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

FormFieldItem

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

iButtonCircle

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

iExternalBoxMeta

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

iExternalButton

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

iExternalContextMenuItem

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

iExternalFormFieldImageListItem

Field Type Description
imageId string
image iExternalImage
isSelected boolean
key string
label string
description? string
meta1? string
meta2? string
meta3? string
meta4? string

iExternalFormFieldMeta

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().

Field Type Description
sheets Array<iExternalGoogleSheetInfo>

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.

Field Type Description
text2ImagePrompt string
text2ImageNegativePrompt string
text2ImagePrefix string
text2ImagePostfix string
text2ImageStyle SdxlStyle
text2ImageSelectStyle boolean
text2ImageModel iExternalText2ImageModel
text2ImageTransparency iExternalText2ImageBackground
text2ImageResolution iExternalImageEditResolution
text2ImageQuality iExternalImageEditQuality GPT and Ideogram models only
text2ImagePromptExpansion “None” | “Medium” | “Large” Ideogram 4 only
text2ImageAcceleration “none” | “low” | “regular” | “high” Ideogram 4 only
segmentAnythingTask? { model: iExternalImageSegmentModelModel; prompt: string; classes: string; output: string; crop: boolean; doublePass: boolean; erosionStrength: number; smoothingStrength: number; } Only set if the designer configured a segment anything task
segmentFaceTask { provider: iExternalSegmentFaceProvider; crop?: boolean }
removeBackgroundTask { provider: iExternalRemoveBackgroundProvider; crop?: boolean }
upscaleTask { provider: iExternalUpscaleProvider }
assignAction iExternalImageAssignAction What happens to an image the buyer assigns to the frame
imageEditPrompt? string Undefined if the designer did not set one
imageEditQuality iExternalImageEditQuality
imageEditResolution iExternalImageEditResolution
imageEditBackground iExternalText2ImageBackground
imageEditPromptExpansion “None” | “Medium” | “Large” Ideogram 4 only
imageEditAcceleration “none” | “low” | “regular” | “high” Ideogram 4 only
imageEditEnhancePrompt boolean Flux Pro Kontext only
imageEditModel iExternalImageEditModel
imageEditRemoveBg boolean
imageEditAdditionalImageUrls string[]

iExternalImageAiStore

text-2-image Model

Field Type Description
tMod? iExternalText2ImageModel text-2-image Model
tPmt? string text-2-image prompt
tnPmt? string text-2-image negatve prompt
tPre? string text-2-image prefix
tPos? string text-2-image postfix
tSty? SdxlStyle text-2-image style
tSel? boolean select style
tBcg? iExternalText2ImageBackground text-2-image background
tRes? iExternalImageEditResolution text-2-image resolution class (“auto” when absent)
tQ? iExternalImageEditQuality text-2-image quality, GPT and Ideogram models only
tPx? “None” | “Medium” | “Large” text-2-image prompt expansion, Ideogram 4 only
tAc? “none” | “low” | “regular” | “high” text-2-image acceleration, Ideogram 4 only
sat? iExternalSegmentAnythingTaskStore segment anything task
sft? iExternalSegmentFaceTaskStore segment face task
iAA? iExternalImageAssignAction Image Assign Action
iEP? string image-edit prompt
iEQ? iExternalImageEditQuality image-edit quality
iEM? iExternalImageEditModel image-edit model
iER? iExternalImageEditResolution image-edit resolution class (“auto” when absent)
iEBg? iExternalText2ImageBackground image-edit background (“auto” when absent)
iEPx? “None” | “Medium” | “Large” image-edit prompt expansion, Ideogram 4 only
iEAc? “none” | “low” | “regular” | “high” image-edit acceleration, Ideogram 4 only
iEEp? boolean image-edit enhance prompt, Flux Pro Kontext only
iERBg? boolean image-edit remove background
iEAIU? string[] image-edit additional imageurl

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[]

iExternalImageMeta

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”

iExternalListMeta

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"

iExternalMetaPropertyKind

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

Field Type Description
pv iExternalSegmentFaceProvider provider
cp boolean crop

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

iExternalTableMeta

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

iFormFieldNameValue

Field Type Description
name string
value string | object

iFormFieldProperty

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

Field Type Description
id string
label string
type ImageAiFilterType
model ImageAiFilterModel
isUserPrompt boolean
promptPrefix? string
prompt string
gptQuality? iExternalImageEditQuality not gpt-only any more, but keeps its name so saved filters still read
thumbnailUrl string

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

iMobileUIButton

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”

iSnippetMenuCategory

Field Type Description
topics Array<iSnippetMenuTopic>
name string

iSnippetMenuTopic

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)

refreshPaginationCallback

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

Field Type Description
primaryDocument DocumentContentEditables
formFields FormFieldItem[]

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>