Raw schema
{
"type": "object",
"properties": {
"pages": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"imageBase64": {
"description": "Base64 screenshot bytes for this page: at most 6 megapixels (13\" iPad native, 2064x2752, is 5.68 MP), and at most 4 MB of decoded bytes SUMMED over every page in the call (the whole JSON body is capped at 6 MB). For a multi-page set send JPEG, not PNG — quality 80 is typically a quarter the size and indistinguishable once scaled into a device frame. Omit for a blank page (title card / outro / continuation of a device from the previous page).",
"type": "string"
},
"device": {
"description": "Position/size/rotation of the device frame on this page. Only meaningful when imageBase64 is present.",
"type": "object",
"properties": {
"dx": {
"default": 0,
"description": "Horizontal offset from the device band centre, as a fraction of the canvas width. Positive = right. Limited to +/-1.",
"type": "number",
"minimum": -1,
"maximum": 1
},
"dy": {
"default": 0,
"description": "Vertical offset from the device band centre, as a fraction of the canvas height. Positive = down. Limited to +/-1.",
"type": "number",
"minimum": -1,
"maximum": 1
},
"scale": {
"default": 1,
"description": "Device size multiplier; 1 = the default size that fits the band. Limited to 0.05-1.5.",
"type": "number",
"minimum": 0.05,
"maximum": 1.5
},
"rotationDeg": {
"default": 0,
"description": "Device rotation in degrees, +/-90.",
"type": "number",
"minimum": -90,
"maximum": 90
}
}
}
}
},
{
"type": "null"
}
]
},
"description": "One entry per exported page/PNG, in order. Use null for a blank page. At most 10 pages at any single size; size:\"all\" renders every page 4 times over and fits 2. Over that, the call is refused before any rendering."
},
"texts": {
"default": [],
"description": "Zero or more text layers, at most 40. Order is z-order (later entries draw on top); each is confined to one page.",
"maxItems": 40,
"type": "array",
"items": {
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "0-based index into `pages` this text is anchored to."
},
"text": {
"type": "string",
"maxLength": 512,
"description": "The text content, at most 512 characters. \"\\n\" forces a line break; otherwise it wraps to fit `width`."
},
"dx": {
"default": 0,
"description": "Horizontal offset from the page centre, as a fraction of canvas width. Limited to +/-1.",
"type": "number",
"minimum": -1,
"maximum": 1
},
"dy": {
"default": 0,
"description": "Vertical offset from the default first-baseline position, as a fraction of canvas height. Limited to +/-1.",
"type": "number",
"minimum": -1,
"maximum": 1
},
"width": {
"default": 0.84,
"description": "Wrap width as a fraction of canvas width.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1
},
"fontSizeScale": {
"default": 1,
"description": "Multiplier on the auto-fit size; ignored while autoFit is true.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 4
},
"autoFit": {
"default": true,
"description": "Shrink-to-fit within its fitGroup so the text never exceeds 3 lines or the wrap width.",
"type": "boolean"
},
"fitGroup": {
"description": "Texts sharing a fitGroup id are auto-fit together at one common size (e.g. the same headline repeated across every page). Omit for an independently-sized text.",
"type": "string",
"maxLength": 64
},
"rotationDeg": {
"default": 0,
"description": "Rotation in degrees about the centre of the first line's baseline.",
"type": "number",
"minimum": -180,
"maximum": 180
},
"color": {
"default": "#f7f7f5",
"description": "CSS hex color.",
"type": "string",
"maxLength": 512
},
"fontFamily": {
"default": "Urbanist",
"type": "string",
"enum": [
"Urbanist",
"Inter",
"Poppins",
"Montserrat",
"Manrope",
"Rubik",
"Nunito",
"Fredoka",
"Space Grotesk",
"Oswald",
"Bebas Neue",
"Anton",
"Archivo Black",
"Playfair Display",
"DM Serif Display",
"Merriweather",
"Lora",
"Georgia",
"JetBrains Mono",
"Courier",
"Caveat",
"Pacifico"
]
}
},
"required": [
"page",
"text"
]
}
},
"backgroundFrom": {
"default": "#12121a",
"description": "Gradient start color (top-left), hex.",
"type": "string",
"maxLength": 512
},
"backgroundTo": {
"default": "#2b2140",
"description": "Gradient end color (bottom-right), hex.",
"type": "string",
"maxLength": 512
},
"joinedScene": {
"default": false,
"description": "When true and there is more than one page, one gradient stretches across the whole set instead of repeating per page.",
"type": "boolean"
},
"size": {
"default": "6.9",
"description": "Which official App Store Connect size to export: 6.9\"/6.7\"/6.5\" iPhone or 13\" iPad, or \"all\" for every size (returned as a ZIP). \"all\" renders 4 canvases per page, so it is limited to 2 pages per call; for a longer set, make one call per size — a single-size call carries all 10.",
"type": "string",
"enum": [
"6.9",
"6.7",
"6.5",
"13ipad",
"all"
]
}
},
"required": [
"pages"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}