{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/everpop-app/json-schema/everpop-app-upload-slot-envelope-schema.json",
  "title": "UploadSlotEnvelope",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/everpop-app-openapi.json#/components/schemas/UploadSlotEnvelope",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "ok": {
      "const": true
    },
    "data": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "putUrl": {
          "type": "string",
          "format": "uri"
        },
        "key": {
          "type": "string"
        },
        "requiredHeaders": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "Content-Type": {
              "type": "string",
              "enum": [
                "video/mp4",
                "video/quicktime",
                "video/webm",
                "video/x-matroska",
                "video/x-m4v"
              ]
            },
            "If-None-Match": {
              "const": "*"
            }
          },
          "required": [
            "Content-Type",
            "If-None-Match"
          ]
        },
        "expectedBytes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 5363466240
        },
        "expiresInSeconds": {
          "const": 900
        },
        "next": {
          "type": "string"
        },
        "browserUploadUrl": {
          "type": "string",
          "format": "uri",
          "description": "The sign-in-gated Everpop upload page. If you can't send file bytes yourself, give this to the user instead, then list videos to continue. GET /api/v1/videos carries the same link without opening a slot, which counts against the user's open uploads until it expires."
        }
      },
      "required": [
        "putUrl",
        "key",
        "requiredHeaders",
        "expectedBytes",
        "expiresInSeconds",
        "next",
        "browserUploadUrl"
      ]
    }
  },
  "required": [
    "ok",
    "data"
  ]
}