{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://workflows.dubspeak.com/schemas/narrated-presentation-request.schema.json",
  "title": "Narrated presentation REQUEST v1 (email body, custom)",
  "description": "The whole email body must be exactly one JSON object valid against this schema, at most 16384 bytes, with subject exactly [WorkflowShelf Inquiry v1] and no attachments. It contains no contact or recipient fields: any reply goes only to the envelope sender. Production parameters are flexible inquiry fields, not guarantees.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "capability",
    "consent",
    "production"
  ],
  "properties": {
    "schemaVersion": {
      "const": "1.0"
    },
    "capability": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "version"
      ],
      "properties": {
        "id": {
          "const": "narrated-presentation"
        },
        "version": {
          "type": "string",
          "maxLength": 20,
          "pattern": "^\\d+\\.\\d+\\.\\d+$"
        }
      }
    },
    "consent": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "authorizedToSubmit",
        "noPrivateMaterialsAttached"
      ],
      "properties": {
        "authorizedToSubmit": {
          "const": true
        },
        "noPrivateMaterialsAttached": {
          "const": true
        }
      }
    },
    "production": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "deckPageCount",
        "languages",
        "targetDurationSeconds",
        "outputFormats"
      ],
      "description": "Flexible inquiry fields. Accepting a value is not a support guarantee.",
      "properties": {
        "deckPageCount": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1,
          "maximum": 500
        },
        "languages": {
          "type": "array",
          "minItems": 1,
          "maxItems": 10,
          "items": {
            "type": "string",
            "maxLength": 35,
            "pattern": "^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
          }
        },
        "targetDurationSeconds": {
          "type": [
            "number",
            "null"
          ],
          "exclusiveMinimum": 0,
          "maximum": 36000
        },
        "outputFormats": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "enum": [
              "PPTX",
              "MP4"
            ]
          }
        }
      }
    },
    "notes": {
      "type": "string",
      "maxLength": 2000
    },
    "example": {
      "type": "boolean"
    }
  }
}
