Properties
| Name | Type | Description |
|---|---|---|
| mockup_type | object | Which editor the session opens, psd or 2d. |
| session_kind | object | What the session is for, setup or customize. |
| mockup_uuid | object | UUID of the mockup to customize |
| product_id | object | Product ID from the platform |
| variant_id | object | Variant ID from the platform |
| allowed_origin | object | HTTPS origin of the page that embeds the editor. |
| config | object | Optional session-only Studio config override. Not persisted. |
| action_id | object | Your own routing identifier for the action this session completes. |
| artwork | object | Optional session-locked artwork: a list with one entry per target, up to 8. A single object is also accepted and locks one target. Every target must belong to the explicitly bound mockup, and no targe |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/sudomock-com/json-schema/sudomock-com-create-session-request-schema.json",
"title": "CreateSessionRequest",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/sudomock-com-openapi.json#/components/schemas/CreateSessionRequest",
"properties": {
"mockup_type": {
"anyOf": [
{
"type": "string",
"enum": [
"psd",
"2d"
]
},
{
"type": "null"
}
],
"description": "Which editor the session opens, psd or 2d."
},
"session_kind": {
"anyOf": [
{
"type": "string",
"enum": [
"setup",
"customize"
]
},
{
"type": "null"
}
],
"description": "What the session is for, setup or customize."
},
"mockup_uuid": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "UUID of the mockup to customize"
},
"product_id": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
],
"description": "Product ID from the platform"
},
"variant_id": {
"anyOf": [
{
"type": "string",
"maxLength": 255
},
{
"type": "null"
}
],
"description": "Variant ID from the platform"
},
"allowed_origin": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"description": "HTTPS origin of the page that embeds the editor."
},
"config": {
"anyOf": [
{
"$ref": "#/$defs/StudioConfigPatch"
},
{
"type": "null"
}
],
"description": "Optional session-only Studio config override. Not persisted."
},
"action_id": {
"anyOf": [
{
"type": "string",
"maxLength": 64,
"minLength": 1,
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$"
},
{
"type": "null"
}
],
"description": "Your own routing identifier for the action this session completes."
},
"artwork": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/StudioArtworkInput"
},
"type": "array"
},
{
"$ref": "#/$defs/StudioArtworkInput"
},
{
"type": "null"
}
],
"description": "Optional session-locked artwork: a list with one entry per target, up to 8. A single object is also accepted and locks one target. Every target must belong to the explicitly bound mockup, and no target may repeat. Base64 takes precedence over url. The customer may edit placement and appearance but cannot replace, remove, add, or retarget artwork."
}
},
"additionalProperties": false,
"type": "object",
"$defs": {
"PaletteColour": {
"properties": {
"hex": {
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$",
"description": "Color value as a #rrggbb hex string."
},
"label": {
"anyOf": [
{
"type": "string",
"maxLength": 32
},
{
"type": "null"
}
],
"description": "Your own name for this color."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"hex"
],
"title": "PaletteColour",
"description": "One colour the editor offers, with your name for it."
},
"StudioArtworkInput": {
"properties": {
"target_uuid": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Smart Object id for PSD. For a photo mockup, either a saved print area id or a surface id (a printable product in the photo, or the main wall of a room photo). The same field accepts both."
},
"url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"description": "HTTPS artwork URL. Ignored when base64 is also supplied."
},
"base64": {
"anyOf": [
{
"type": "string",
"maxLength": 89478488,
"minLength": 4
},
{
"type": "null"
}
],
"description": "Canonical raw base64 artwork, up to 64 MB decoded. Takes precedence when url is also supplied."
},
"placement": {
"anyOf": [
{
"$ref": "#/$defs/StudioSeedPlacement"
},
{
"type": "null"
}
],
"description": "Optional opening placement for this design, in percentages of the target's own region. Omit it to open where the editor opens today."
},
"adjustments": {
"anyOf": [
{
"$ref": "#/$defs/StudioSeedAdjustments"
},
{
"type": "null"
}
],
"description": "Optional opening appearance for this design. Send back what a finished session reported to carry a look from one mockup of a product to the next. Omit it to open at the editor's own values. A PSD target reads brightness, contrast, saturation, vibrance, opacity and blur; a photo target reads opacity and blend_mode."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"target_uuid"
],
"title": "StudioArtworkInput"
},
"StudioConfigPatch": {
"properties": {
"primaryColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Primary color of the editor interface.",
"default": "#0f172a"
},
"accentColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Accent color for highlights and active states in the editor.",
"default": "#da7756"
},
"backgroundColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Background color of the editor.",
"default": "#f1f5f9"
},
"panelBackground": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Background color of the editor panels.",
"default": "#ffffff"
},
"textColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Color of the text in the editor.",
"default": "#0f172a"
},
"borderColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Color of the borders and dividers in the editor.",
"default": "#e2e8f0"
},
"successColor": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
{
"type": "null"
}
],
"description": "Color the editor uses to confirm a completed action.",
"default": "#16a34a"
},
"borderRadius": {
"anyOf": [
{
"type": "integer",
"maximum": 20.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"description": "Corner radius of the editor controls, in pixels.",
"default": 10
},
"logoUrl": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"description": "HTTPS address of the logo shown in the editor header."
},
"fontFamily": {
"anyOf": [
{
"type": "string",
"maxLength": 64,
"minLength": 1,
"pattern": "^[A-Za-z0-9][A-Za-z0-9 ,._-]*$"
},
{
"type": "null"
}
],
"description": "Font family the editor uses for its own text."
},
"headerText": {
"anyOf": [
{
"type": "string",
"maxLength": 96
},
{
"type": "null"
}
],
"description": "Title shown in the editor header.",
"default": "Customize Your Design"
},
"uploadText": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Prompt shown in the editor upload area.",
"default": "Drop image or click to upload"
},
"secondaryActionLabel": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Label on the editor secondary action button.",
"default": "Render Preview"
},
"loadingText": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Text shown while the primary action is running.",
"default": "Adding..."
},
"successText": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Text shown once the primary action succeeds.",
"default": "Added!"
},
"psdPrimaryActionLabel": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Label on the primary action button in the PSD editor.",
"default": "Add to Cart"
},
"twoDSetupPrimaryActionLabel": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Label on the primary action button in a photo mockup setup session.",
"default": "Save Mockup"
},
"twoDCustomizePrimaryActionLabel": {
"anyOf": [
{
"type": "string",
"maxLength": 96,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Label on the primary action button in a photo mockup customize session.",
"default": "Add to Cart"
},
"psdShowAdjustments": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the image adjustment controls in the PSD editor.",
"default": true
},
"psdShowColorOverlay": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the color overlay control in the PSD editor.",
"default": true
},
"psdShowTextLayers": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the text layer controls in the PSD editor.",
"default": true
},
"psdShowFitMode": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the fit mode control in the PSD editor.",
"default": true
},
"psdShowPosition": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the position controls in the PSD editor.",
"default": true
},
"psdShowSize": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the size controls in the PSD editor.",
"default": true
},
"psdShowRotation": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the rotation control in the PSD editor.",
"default": true
},
"psdShowFlip": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the flip controls in the PSD editor.",
"default": true
},
"psdShowExportOptions": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the export options in the PSD editor.",
"default": true
},
"psdShowZoomControls": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the zoom controls in the PSD editor.",
"default": true
},
"psdShowUndoRedo": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the undo and redo controls in the PSD editor.",
"default": true
},
"psdAutoRender": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Renders a new preview after each change in the PSD editor.",
"default": true
},
"psdAutoRenderDelay": {
"anyOf": [
{
"type": "integer",
"maximum": 3000.0,
"minimum": 300.0
},
{
"type": "null"
}
],
"description": "Milliseconds the PSD editor waits after a change before it renders.",
"default": 800
},
"autoDesignCallback": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Reports design changes to your page while the shopper edits.",
"default": false
},
"psdLayout": {
"anyOf": [
{
"type": "string",
"enum": [
"full",
"compact"
]
},
{
"type": "null"
}
],
"description": "Layout of the PSD editor, full or compact.",
"default": "full"
},
"twoDShowArtwork": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the artwork upload control in the photo mockup editor.",
"default": true
},
"twoDShowFill": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the fill color control in the photo mockup editor.",
"default": true
},
"twoDShowBlend": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the blend mode control in the photo mockup editor.",
"default": true
},
"twoDShowOpacity": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the opacity control in the photo mockup editor.",
"default": true
},
"twoDShowTransform": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the transform controls in the photo mockup editor.",
"default": true
},
"twoDShowZoom": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the zoom controls in the photo mockup editor.",
"default": true
},
"twoDShowExport": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the export options in the photo mockup editor.",
"default": true
},
"twoDShowBackgroundRemoval": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the background removal control in the photo mockup editor.",
"default": true
},
"colorPalette": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/PaletteColour"
},
"type": "array",
"maxItems": 96,
"minItems": 1
},
{
"type": "null"
}
],
"description": "Named colors the product comes in, and the only ones the editor offers."
},
"showClose": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Shows or hides the close button in the editor header.",
"default": true
},
"theme": {
"anyOf": [
{
"type": "string",
"enum": [
"light",
"dark"
]
},
{
"type": "null"
}
],
"description": "Theme the editor opens in, light or dark.",
"default": "light"
},
"locale": {
"anyOf": [
{
"type": "string",
"enum": [
"en",
"tr"
]
},
{
"type": "null"
}
],
"description": "Language the editor panel is shown in.",
"default": "en"
},
"maxFileSize": {
"anyOf": [
{
"type": "integer",
"maximum": 50.0,
"minimum": 1.0
},
{
"type": "null"
}
],
"description": "Largest upload the editor accepts, in megabytes.",
"default": 15
}
},
"additionalProperties": false,
"type": "object",
"title": "StudioConfigPatch"
},
"StudioSeedAdjustments": {
"properties": {
"brightness": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": -100.0
},
{
"type": "null"
}
],
"description": "Brightness, -100 to 100. Omit for the editor's own."
},
"contrast": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": -100.0
},
{
"type": "null"
}
],
"description": "Contrast, -100 to 100. Omit for the editor's own."
},
"saturation": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": -100.0
},
{
"type": "null"
}
],
"description": "Saturation, -100 to 100. Omit for the editor's own."
},
"vibrance": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": -100.0
},
{
"type": "null"
}
],
"description": "Vibrance, -100 to 100. Omit for the editor's own."
},
"opacity": {
"anyOf": [
{
"type": "integer",
"maximum": 100.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"description": "Opacity, 0 to 100. Omit for the editor's own."
},
"blur": {
"anyOf": [
{
"type": "number",
"maximum": 20.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"description": "Blur, 0 to 20, in half steps. Omit for the editor's own."
},
"blend_mode": {
"anyOf": [
{
"type": "string",
"enum": [
"multiply",
"normal",
"screen",
"lighten",
"soft_light",
"overlay",
"darken"
]
},
{
"type": "null"
}
],
"description": "How the artwork sits on the surface. Photo targets only. Omit for the editor's own."
}
},
"additionalProperties": false,
"type": "object",
"title": "StudioSeedAdjustments",
"description": "How a design looks when the editor opens it.\n\nOne spelling for both target kinds, because this is a request rather than\na report: the merchant asks for an opening appearance and the session\neither honours it or refuses to open. Which keys a target can honour\ndiffers, and a key the target cannot honour refuses the session, the same\nway an unsupported placement does.\n\nNothing carries a default. A placement can afford them because `box` is\nrequired, so that object never exists half-filled; this one has no\nrequired key at all, so a default would be a value the merchant never\nsent, echoed back as though they had.\n\nThe bounds are the ones the editor's own controls span, not the wider set\nthe finished image accepts. Seeding a brightness the control cannot reach\nopens a session whose preview disagrees with its result from the first\nframe, and the shopper, the only person present, has no way to know.\nSuch a seed is refused, as an unsupported placement is."
},
"StudioSeedAutoBox": {
"properties": {
"mode": {
"type": "string",
"const": "auto",
"description": "Marks this box as an allowance the design fits inside."
},
"coverage": {
"type": "integer",
"maximum": 100.0,
"minimum": 10.0,
"description": "Percentage of the target region the design is allowed to fill."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"mode",
"coverage"
],
"title": "StudioSeedAutoBox",
"description": "An allowance. The artwork keeps its own proportions inside it."
},
"StudioSeedManualBox": {
"properties": {
"mode": {
"type": "string",
"const": "manual",
"description": "Marks this box as an explicit width and height."
},
"width_percent": {
"type": "number",
"maximum": 300.0,
"exclusiveMinimum": 0.0,
"description": "Percentage of the target region's WIDTH."
},
"height_percent": {
"type": "number",
"maximum": 300.0,
"exclusiveMinimum": 0.0,
"description": "Percentage of the target region's HEIGHT."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"mode",
"width_percent",
"height_percent"
],
"title": "StudioSeedManualBox",
"description": "The box itself. The only spelling that can carry a ratio of its own."
},
"StudioSeedPlacement": {
"properties": {
"box": {
"oneOf": [
{
"$ref": "#/$defs/StudioSeedAutoBox"
},
{
"$ref": "#/$defs/StudioSeedManualBox"
}
],
"description": "How large the design starts: an allowance, or the box itself."
},
"fit": {
"type": "string",
"enum": [
"fill",
"fit",
"crop"
],
"description": "How the artwork's pixels meet the box.",
"default": "fit"
},
"offset_x_percent": {
"type": "number",
"maximum": 100.0,
"minimum": -100.0,
"description": "Percentage of the region WIDTH, from the region centre, positive right.",
"default": 0
},
"offset_y_percent": {
"type": "number",
"maximum": 100.0,
"minimum": -100.0,
"description": "Percentage of the region HEIGHT, from the region centre, positive down.",
"default": 0
},
"rotation": {
"type": "number",
"maximum": 360.0,
"minimum": -360.0,
"description": "Degrees about the box centre, clockwise positive.",
"default": 0
},
"flip_horizontal": {
"type": "boolean",
"description": "Flip artwork horizontally (left-right mirror)",
"default": false
},
"flip_vertical": {
"type": "boolean",
"description": "Flip artwork vertically (top-bottom mirror)",
"default": false
},
"tile": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Repeat the design as a pattern across the whole region. The box is one tile."
},
"tile_spacing": {
"anyOf": [
{
"type": "number",
"maximum": 100.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"description": "Gap between tiles as a percentage of the tile size, 0 to 100. The horizontal gap is that percent of the tile width, the vertical gap that percent of the tile height. Used only when tile is true."
}
},
"additionalProperties": false,
"type": "object",
"required": [
"box"
],
"title": "StudioSeedPlacement",
"description": "Where a locked design starts, in the units of the region that holds it.\n\nEvery length here is a percentage of the target's own region (the print\narea's bounding box for a photo mockup, the Smart Object's embedded frame\nfor PSD), because that is the one denominator both sides already have without a\nsecond round trip. Offsets run from the region CENTRE, positive right and\ndown, and the unit lives in the field name so a reader who has only ever\nseen an example still cannot mistake it for pixels.\n\n``box`` is one branch or the other, never a mixture: a width with no height\nis not a smaller request, it is an unanswerable one, and the branch makes\nit unsendable rather than merely rejected.\n\nThis is a starting point, not a lock. The customer may move it afterwards."
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/sudomock-com-create-session-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.