{
"type": "object",
"additionalProperties": false,
"properties": {
"storyworldId": {
"type": "string",
"pattern": "^[a-fA-F0-9]{24}$",
"description": "ID of an accessible saved Storyworld returned by discovery. Keep this destination fixed for the operation."
},
"operationId": {
"type": "string",
"pattern": "^[a-zA-Z0-9-]{16,64}$",
"description": "Persist a client-generated UUID before this mutation. Repeat identical inputs and this same ID after interruption; a new ID is a new request."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"characterId": {
"type": "string",
"pattern": "^[a-fA-F0-9]{24}$",
"description": "ID of the exact saved Character to reuse; do not create a new identity for an outfit or accessory."
},
"production": {
"type": "object",
"additionalProperties": false,
"properties": {
"productionId": {
"type": "string",
"pattern": "^[a-fA-F0-9]{24}$",
"description": "ID of the saved Production whose asset context must remain pinned."
},
"expectedVersion": {
"type": "integer",
"minimum": 1,
"description": "Copy the current version from the latest workflow read. Refresh after a conflict; never increment or guess it."
},
"bindingId": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"productionId",
"expectedVersion",
"bindingId"
],
"description": "Optional originating Production context to freeze. Does not implicitly attach the result to a shot."
},
"ingredients": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"artifactId": {
"type": "string",
"pattern": "^[a-fA-F0-9]{24}$",
"description": "ID of the reusable prop, clothing or accessory, distinct from its Media image IDs."
},
"placement": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"state": {
"type": "string",
"minLength": 1,
"maxLength": 1000
}
},
"required": [
"artifactId",
"placement"
]
}
},
"direction": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"storyworldId",
"operationId",
"title",
"characterId",
"ingredients"
]
}