zvid-io · Schema
RenderJobRequest
Provide either `payload` (a full project) or `template` (a stored template id) — not both.
CompanyVideoAutomationMedia
Properties
| Name | Type | Description |
|---|---|---|
| payload | object | |
| template | string | Stored template id (`tpl_…`). Mutually exclusive with `payload`. |
| variables | object | Request-time values override project defaults for BOTH inline payloads and stored templates. |
| overrides | object | |
| webhookUrl | string | One-off unsigned POST for this job on completion or failure. Use a registered webhook for HMAC signatures. The hosted API requires a public HTTPS address; private destinations are rejected. |
| jobId | string | Optional caller-supplied UUID. This is not a documented idempotency guarantee: do not blindly resubmit after a timeout; first check this job ID. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/zvid-io/json-schema/zvid-io-render-job-request-schema.json",
"title": "RenderJobRequest",
"description": "Provide either `payload` (a full project) or `template` (a stored template id) — not both.",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/zvid-io-openapi.yaml#/components/schemas/RenderJobRequest",
"type": "object",
"additionalProperties": false,
"properties": {
"payload": {
"$ref": "#/$defs/RenderPayload"
},
"template": {
"type": "string",
"description": "Stored template id (`tpl_…`). Mutually exclusive with `payload`.",
"pattern": "^tpl_[A-Za-z0-9]{20}$"
},
"variables": {
"type": "object",
"additionalProperties": true,
"description": "Request-time values override project defaults for BOTH inline payloads and stored templates."
},
"overrides": {
"$ref": "#/$defs/RenderOverrides"
},
"webhookUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "One-off unsigned POST for this job on completion or failure. Use a registered webhook for HMAC signatures. The hosted API requires a public HTTPS address; private destinations are rejected."
},
"jobId": {
"type": "string",
"format": "uuid",
"description": "Optional caller-supplied UUID. This is not a documented idempotency guarantee: do not blindly resubmit after a timeout; first check this job ID."
}
},
"oneOf": [
{
"required": [
"payload"
],
"not": {
"required": [
"template"
]
}
},
{
"required": [
"template"
],
"not": {
"required": [
"payload"
]
}
}
],
"$defs": {
"AudioItem": {
"type": "object",
"title": "Audio item",
"description": "A soundtrack / voice-over entry for `audios` (video projects only).",
"properties": {
"src": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 2048,
"pattern": "^https?://",
"description": "Audio file URL (mp3/wav/...). Must be a PUBLIC http(s) URL: no credentials, no spaces/backslashes, port 80/443 only, no localhost/.local, no private IPs."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"matchDuration": {
"anyOf": [
{
"type": "boolean",
"description": "Follow the containing scene/project length without extending automatic duration. Overrides exit."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"enter": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Timeline second the audio starts playing.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"exit": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Timeline second the audio stops. Must be >= enter.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"volume": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 2
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"speed": {
"anyOf": [
{
"type": "number",
"minimum": 0.1,
"maximum": 10
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"audioBegin": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Trim: source second where playback starts.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"audioEnd": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Trim: source second where playback ends. Must be >= audioBegin.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"audioDuration": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Play only this many seconds of the source.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"track": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"description": "Mix track index; audio tracks mix together."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"condition": {
"description": "A literal flag or placeholder. false, 0, an empty string, null or an absent resolved value prune this item. Expressions are not supported."
}
},
"additionalProperties": false
},
"ChromaKey": {
"type": "object",
"description": "Green-screen keying.",
"properties": {
"color": {
"anyOf": [
{
"type": "string",
"pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
"description": "Key color to remove (required)."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"similarity": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"blend": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
}
},
"required": [
"color"
],
"additionalProperties": false
},
"CropParams": {
"type": "object",
"description": "Source crop rectangle in source-media pixels.",
"properties": {
"x": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"y": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"width": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"height": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
}
},
"required": [
"x",
"y",
"width",
"height"
],
"additionalProperties": false
},
"CustomCode": {
"type": "object",
"description": "Sandboxed styling/animation code run inside the render browser (Design Studio). No network/filesystem/storage/navigation APIs — see validation notes.",
"properties": {
"css": {
"anyOf": [
{
"type": "string",
"maxLength": 200000
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"js": {
"anyOf": [
{
"type": "string",
"maxLength": 200000
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"animationDuration": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0,
"maximum": 15,
"description": "Seconds the customCode animation runs (max 15)."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
}
},
"additionalProperties": false
},
"Designer": {
"type": "object",
"description": "Opaque Design Studio round-trip metadata (max 200k chars serialized). Never rendered; keeps 'edit design' working."
},
"Filter": {
"type": "object",
"description": "CSS-like color filters.",
"properties": {
"brightness": {
"anyOf": [
{
"type": "number",
"minimum": -100,
"maximum": 100
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"contrast": {
"anyOf": [
{
"type": "number",
"minimum": -100,
"maximum": 100
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"saturate": {
"anyOf": [
{
"type": "number",
"minimum": -100,
"maximum": 100
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"hue-rotate": {
"anyOf": [
{
"type": "string",
"pattern": "^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:deg)?$",
"description": "Degrees, preferably with a \"deg\" suffix (e.g. \"90deg\"). Legacy numeric strings such as \"90\" remain accepted."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"blur": {
"anyOf": [
{
"description": "Unitless 0..100 amount. Numeric strings remain accepted for backward compatibility; CSS lengths such as 4px are not supported.",
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 100
},
{
"type": "string",
"pattern": "^(?:0*(?:100(?:\\.0+)?|\\d{1,2}(?:\\.\\d+)?|\\.\\d+))$"
}
]
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"invert": {
"anyOf": [
{
"description": "Boolean or partial inversion amount from 0 to 1.",
"anyOf": [
{
"type": "boolean"
},
{
"type": "number",
"minimum": 0,
"maximum": 1
}
]
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"colorTint": {
"anyOf": [
{
"type": "string",
"pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$",
"description": "Tint color (#rgb or #rrggbb)."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
}
},
"additionalProperties": false
},
"GifVisual": {
"type": "object",
"title": "GIF element",
"description": "An animated GIF placed on the canvas (video projects only).",
"properties": {
"type": {
"type": "string",
"pattern": "^[Gg][Ii][Ff]$",
"description": "\"GIF\" (case-insensitive)."
},
"x": {
"anyOf": [
{
"type": "number",
"description": "Anchor-point X in canvas px (may be negative). ONLY used when position is \"custom\" — every other preset OVERWRITES x/y.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"y": {
"anyOf": [
{
"type": "number",
"description": "Anchor-point Y in canvas px (may be negative). ONLY used when position is \"custom\" — every other preset OVERWRITES x/y.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"width": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"description": "Element width in px (plan-limited).",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"height": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"description": "Element height in px (plan-limited).",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"position": {
"anyOf": [
{
"enum": [
"top-left",
"top-center",
"top-right",
"center-left",
"center-center",
"center-right",
"bottom-right",
"bottom-center",
"bottom-left",
"custom"
],
"description": "Placement preset. Sets BOTH the canvas point AND the default anchor (e.g. \"bottom-center\" puts the element's bottom edge flush with the frame bottom — no margin). x/y are IGNORED unless \"custom\". Two elements with the same preset render exactly stacked."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"anchor": {
"anyOf": [
{
"enum": [
"top-left",
"top-center",
"top-right",
"center-left",
"center-center",
"center-right",
"bottom-right",
"bottom-center",
"bottom-left",
"custom"
],
"description": "Which point of the ELEMENT sits at the position point. Defaults to the position preset itself (\"custom\" defaults to top-left)."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"resize": {
"anyOf": [
{
"enum": [
"contain",
"cover"
],
"description": "How media fits its frame: contain (letterbox) or cover (center-crop). With explicit width/height the media fits INTO that box (CSS object-fit); without a box it is sized against the full canvas."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"enterBegin": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Seconds when the element starts appearing (enter animation start).",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"enterEnd": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Seconds when the enter animation finishes. Must be >= enterBegin.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"exitBegin": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Seconds when the exit animation starts.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"exitEnd": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"description": "Seconds when the element is fully gone. Must be >= exitBegin.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"opacity": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Element opacity, 0..1."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"angle": {
"anyOf": [
{
"type": "number",
"minimum": -360,
"maximum": 360,
"description": "Rotation in degrees."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"flipV": {
"anyOf": [
{
"type": "boolean",
"description": "Flip vertically."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"flipH": {
"anyOf": [
{
"type": "boolean",
"description": "Flip horizontally."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"track": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000,
"description": "Z-order track; higher tracks render on top."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"enterAnimation": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"fade",
"fadeblack",
"fadewhite",
"distance",
"wipeleft",
"wiperight",
"wipeup",
"wipedown",
"slideleft",
"slideright",
"slideup",
"slidedown",
"smoothleft",
"smoothright",
"smoothup",
"smoothdown",
"circlecrop",
"rectcrop",
"circleclose",
"circleopen",
"horzclose",
"horzopen",
"vertclose",
"vertopen",
"diagbl",
"diagbr",
"diagtl",
"diagtr",
"hlslice",
"hrslice",
"vuslice",
"vdslice",
"dissolve",
"pixelize",
"radial",
"hblur",
"wipetl",
"wipetr",
"wipebl",
"wipebr",
"fadegrays",
"zoomin",
"hlwind",
"hrwind",
"squeezeh",
"squeezev",
"fadefast",
"fadeslow",
"vuwind",
"vdwind",
"coverleft",
"coverright",
"coverup",
"coverdown",
"revealleft",
"revealright",
"revealup",
"revealdown"
]
},
{
"type": "null"
}
],
"description": "Enter animation effect (xfade family) or null."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"exitAnimation": {
"anyOf": [
{
"anyOf": [
{
"enum": [
"fade",
"fadeblack",
"fadewhite",
"distance",
"wipeleft",
"wiperight",
"wipeup",
"wipedown",
"slideleft",
"slideright",
"slideup",
"slidedown",
"smoothleft",
"smoothright",
"smoothup",
"smoothdown",
"circlecrop",
"rectcrop",
"circleclose",
"circleopen",
"horzclose",
"horzopen",
"vertclose",
"vertopen",
"diagbl",
"diagbr",
"diagtl",
"diagtr",
"hlslice",
"hrslice",
"vuslice",
"vdslice",
"dissolve",
"pixelize",
"radial",
"hblur",
"wipetl",
"wipetr",
"wipebl",
"wipebr",
"fadegrays",
"zoomin",
"hlwind",
"hrwind",
"squeezeh",
"squeezev",
"fadefast",
"fadeslow",
"vuwind",
"vdwind",
"coverleft",
"coverright",
"coverup",
"coverdown",
"revealleft",
"revealright",
"revealup",
"revealdown"
]
},
{
"type": "null"
}
],
"description": "Exit animation effect (xfade family) or null."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"src": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 2048,
"pattern": "^https?://",
"description": "Source media URL. Must be a PUBLIC http(s) URL: no credentials, no spaces/backslashes, port 80/443 only, no localhost/.local, no private IPs."
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"cropParams": {
"anyOf": [
{
"$ref": "#/$defs/CropParams"
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"filter": {
"anyOf": [
{
"$ref": "#/$defs/Filter"
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"chromaKey": {
"anyOf": [
{
"$ref": "#/$defs/ChromaKey"
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"zoom": {
"anyOf": [
{
"$ref": "#/$defs/Zoom"
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"radius": {
"anyOf": [
{
"$ref": "#/$defs/Radius"
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"condition": {
"description": "A literal flag or placeholder. false, 0, an empty string, null or an absent resolved value prune this item. Expressions are not supported."
}
},
"required": [
"type",
"src"
],
"additionalProperties": false
},
"ImageVisual": {
"type": "object",
"title": "IMAGE element",
"description": "A raster image placed on the canvas.",
"properties": {
"type": {
"type": "string",
"pattern": "^[Ii][Mm][Aa][Gg][Ee]$",
"description": "\"IMAGE\" (case-insensitive)."
},
"x": {
"anyOf": [
{
"type": "number",
"description": "Anchor-point X in canvas px (may be negative). ONLY used when position is \"custom\" — every other preset OVERWRITES x/y.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"y": {
"anyOf": [
{
"type": "number",
"description": "Anchor-point Y in canvas px (may be negative). ONLY used when position is \"custom\" — every other preset OVERWRITES x/y.",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"width": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"description": "Element width in px (plan-limited).",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"height": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"description": "Element height in px (plan-limited).",
"x-zvid-plan-dependent": true
},
{
"type": "string",
"pattern": "\\{\\{\\s*[A-Za-z][A-Za-z0-9_]*(?:\\.(?:[A-Za-z][A-Za-z0-9_]*|[0-9]+))*\\s*\\}\\}"
}
]
},
"position": {
"anyOf": [
{
"enum": [
"top-left",
"top-center",
"top-right",
"center-left",
"center-center",
"center-right",
"bottom-right",
"bottom-center",
"bot
# --- truncated at 32 KB (153 KB total) ---
# Full source: https://artifacts.apis.io/zvid-io/json-schema/zvid-io-render-job-request-schema.json
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/zvid-io-render-job-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.