{
    "components": {
        "schemas": {
            "ChunkifyError": {
                "properties": {
                    "detail": {
                        "description": "Additional error details or output",
                        "type": "string"
                    },
                    "message": {
                        "description": "Main error message",
                        "type": "string"
                    },
                    "type": {
                        "description": "Type of error",
                        "type": "string",
                        "enum": [
                            "setup",
                            "ffmpeg",
                            "source",
                            "upload",
                            "download",
                            "ingest",
                            "job",
                            "unexpected",
                            "permission",
                            "timeout",
                            "cancelled"
                        ]
                    }
                },
                "type": "object",
                "required": ["type", "message", "detail"]
            },
            "FormatBitratesRequired": {
                "x-oapi-gen-ignore": true,
                "description": "Bitrate settings for the format. At least one of video_bitrate or audio_bitrate must be provided.",
                "type": "object",
                "properties": {
                    "audio_bitrate": {
                        "description": "AudioBitrate specifies the audio bitrate in bits per second.\nMust be between 32Kbps and 512Kbps.",
                        "maximum": 512000,
                        "minimum": 32000,
                        "type": "integer"
                    },
                    "video_bitrate": {
                        "description": "VideoBitrate specifies the video bitrate in bits per second.\nMust be between 100Kbps and 50Mbps.",
                        "maximum": 50000000,
                        "minimum": 100000,
                        "type": "integer"
                    }
                },
                "anyOf": [
                    { "required": ["video_bitrate"] },
                    { "required": ["audio_bitrate"] }
                ]
            },
            "FormatBitrates": {
                "x-oapi-gen-ignore": true,
                "description": "Bitrate settings for the format.",
                "properties": {
                    "audio_bitrate": {
                        "description": "AudioBitrate specifies the audio bitrate in bits per second.\nMust be between 32Kbps and 512Kbps.",
                        "maximum": 512000,
                        "minimum": 32000,
                        "type": "integer"
                    },
                    "video_bitrate": {
                        "description": "VideoBitrate specifies the video bitrate in bits per second.\nMust be between 100Kbps and 50Mbps.",
                        "maximum": 50000000,
                        "minimum": 100000,
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "VideoCommon": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters common to all video formats.",
                "properties": {
                    "bufsize": {
                        "description": "Bufsize specifies the video buffer size in bits.\nMust be between 100Kbps and 50Mbps.",
                        "maximum": 50000000,
                        "minimum": 100000,
                        "type": "integer"
                    },
                    "channels": {
                        "description": "Channels specifies the number of audio channels.\nValid values: 1 (mono), 2 (stereo), 5 (5.1), 7 (7.1)",
                        "enum": [1, 2, 5, 7],
                        "type": "integer"
                    },
                    "disable_audio": {
                        "description": "DisableAudio indicates whether to disable audio processing.",
                        "type": "boolean"
                    },
                    "disable_video": {
                        "description": "DisableVideo indicates whether to disable video processing.",
                        "type": "boolean"
                    },
                    "duration": {
                        "description": "Duration specifies the duration to process in seconds.\nMust be a positive value.",
                        "minimum": 1,
                        "type": "integer"
                    },
                    "framerate": {
                        "description": "Framerate specifies the output video frame rate.\nMust be between 15 and 120 fps.",
                        "maximum": 120,
                        "minimum": 15,
                        "type": "number"
                    },
                    "gop": {
                        "description": "Gop specifies the Group of Pictures (GOP) size.\nMust be between 1 and 300.",
                        "maximum": 300,
                        "minimum": 1,
                        "type": "integer"
                    },
                    "height": {
                        "description": "Height specifies the output video height in pixels.\nMust be between -2 and 7680. Use -2 for automatic calculation while maintaining aspect ratio.",
                        "maximum": 7680,
                        "minimum": -2,
                        "type": "integer"
                    },
                    "maxrate": {
                        "description": "Maxrate specifies the maximum video bitrate in bits per second.\nMust be between 100Kbps and 50Mbps.",
                        "maximum": 50000000,
                        "minimum": 100000,
                        "type": "integer"
                    },
                    "minrate": {
                        "description": "Minrate specifies the minimum video bitrate in bits per second.\nMust be between 100Kbps and 50Mbps.",
                        "maximum": 50000000,
                        "minimum": 100000,
                        "type": "integer"
                    },
                    "per_title": {
                        "default": false,
                        "description": "Enables per-title optimization. Disabled by default. Set it to true to let Chunkify select rate control automatically. When enabled, explicit rate-control fields cannot be provided. For HLS outputs, either audio_bitrate or video_bitrate is required when per-title optimization is disabled or omitted.",
                        "type": "boolean"
                    },
                    "pixfmt": {
                        "description": "PixFmt specifies the pixel format.\nValid value: yuv420p",
                        "enum": [
                            "yuv410p",
                            "yuv411p",
                            "yuv420p",
                            "yuv422p",
                            "yuv440p",
                            "yuv444p",
                            "yuvJ411p",
                            "yuvJ420p",
                            "yuvJ422p",
                            "yuvJ440p",
                            "yuvJ444p",
                            "yuv420p10le",
                            "yuv422p10le",
                            "yuv440p10le",
                            "yuv444p10le",
                            "yuv420p12le",
                            "yuv422p12le",
                            "yuv440p12le",
                            "yuv444p12le",
                            "yuv420p10be",
                            "yuv422p10be",
                            "yuv440p10be",
                            "yuv444p10be",
                            "yuv420p12be",
                            "yuv422p12be",
                            "yuv440p12be",
                            "yuv444p12be"
                        ],
                        "type": "string",
                        "default": "yuv420p"
                    },
                    "seek": {
                        "description": "Seek specifies the timestamp to start processing from (in seconds).\nMust be a positive value.",
                        "minimum": 1,
                        "type": "integer"
                    },
                    "width": {
                        "description": "Width specifies the output video width in pixels.\nMust be between -2 and 7680. Use -2 for automatic calculation while maintaining aspect ratio.",
                        "maximum": 7680,
                        "minimum": -2,
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "Mp4Av1": {
                "description": "FFmpeg encoding parameters specific to MP4 with AV1 encoding.",
                "properties": {
                    "id": { "const": "mp4_av1", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/Av1" },
                    { "$ref": "#/components/schemas/FormatBitrates" },
                    { "$ref": "#/components/schemas/VideoCommon" }
                ],
                "required": ["id"],
                "type": "object"
            },
            "Av1": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters specific to AV1 encoding.",
                "properties": {
                    "crf": {
                        "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 63.\nRecommended values: 16-35 for high quality, 35-45 for good quality, 45-63 for acceptable quality.",
                        "examples": [35],
                        "maximum": 63,
                        "minimum": 16,
                        "type": "integer",
                        "default": 35
                    },
                    "level": {
                        "description": "Level specifies the AV1 profile level. Valid values: 30-31 (main), 41 (main10).\nHigher levels support higher resolutions and bitrates but require more processing power.",
                        "enum": [30, 31, 41],
                        "examples": [41],
                        "type": "integer"
                    },
                    "movflags": { "type": "string" },
                    "preset": {
                        "description": "Preset controls the encoding efficiency and processing intensity. Lower presets use more\noptimization features, creating smaller files with better quality but requiring more compute time.\nHigher presets encode faster but produce larger files.\n\nPreset ranges:\n- 6-7: Fast encoding for real-time applications (smaller files)\n- 8-10: Balanced efficiency and speed for general use\n- 11-13: Fastest encoding for real-time applications (larger files)",
                        "enum": ["6", "7", "8", "9", "10", "11", "12", "13"],
                        "examples": ["10"],
                        "type": "string",
                        "default": "10"
                    },
                    "profilev": {
                        "description": "Profilev specifies the AV1 profile. Valid values:\n- main: Main profile, good for most applications\n- main10: Main 10-bit profile, supports 10-bit color\n- mainstillpicture: Still picture profile, optimized for single images",
                        "enum": ["main", "main10", "mainstillpicture"],
                        "examples": ["main10"],
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "Hls": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters specific to HLS packaging.",
                "properties": {
                    "hls_enc": {
                        "description": "HlsEnc enables encryption for HLS segments when set to true.",
                        "examples": [false],
                        "type": "boolean"
                    },
                    "hls_enc_iv": {
                        "description": "HlsEncIv specifies the initialization vector for encryption. Maximum length: 64 characters.\nRequired when HlsEnc is true.",
                        "examples": ["0123456789abcdef"],
                        "maxLength": 64,
                        "type": "string"
                    },
                    "hls_enc_key": {
                        "description": "HlsEncKey specifies the encryption key for HLS segments. Maximum length: 64 characters.\nRequired when HlsEnc is true.",
                        "examples": ["0123456789abcdef"],
                        "maxLength": 64,
                        "type": "string"
                    },
                    "hls_enc_key_url": {
                        "description": "HlsEncKeyUrl specifies the URL where clients can fetch the encryption key.\nRequired when HlsEnc is true.",
                        "examples": ["https://example.com/key"],
                        "type": "string"
                    },
                    "hls_segment_type": {
                        "description": "HlsSegmentType specifies the type of HLS segments. Valid values:\n- mpegts: Traditional MPEG-TS segments, better compatibility\n- fmp4: Fragmented MP4 segments, better efficiency",
                        "enum": ["mpegts", "fmp4"],
                        "examples": ["mpegts"],
                        "type": "string",
                        "default": "fmp4"
                    },
                    "hls_time": {
                        "description": "HlsTime specifies the duration of each HLS segment in seconds. Range: 1 to 10.\nShorter segments provide faster startup but more overhead, longer segments are more efficient.",
                        "examples": [6],
                        "maximum": 10,
                        "minimum": 1,
                        "type": "integer",
                        "default": 4
                    }
                },
                "type": "object"
            },
            "HlsAv1": {
                "description": "FFmpeg encoding parameters specific to HLS with AV1 encoding. When per-title optimization is disabled, either audio_bitrate or video_bitrate is required.",
                "properties": {
                    "id": { "const": "hls_av1", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/Hls" },
                    { "$ref": "#/components/schemas/Av1" },
                    { "$ref": "#/components/schemas/VideoCommon" },
                    { "$ref": "#/components/schemas/FormatBitrates" }
                ],
                "required": ["id"],
                "type": "object"
            },
            "HlsH264": {
                "description": "FFmpeg encoding parameters specific to HLS with H.264 encoding. When per-title optimization is disabled, either audio_bitrate or video_bitrate is required.",
                "properties": {
                    "id": { "const": "hls_h264", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/Hls" },
                    { "$ref": "#/components/schemas/H264" },
                    { "$ref": "#/components/schemas/VideoCommon" },
                    { "$ref": "#/components/schemas/FormatBitrates" }
                ],
                "required": ["id"],
                "type": "object"
            },
            "HlsH265": {
                "description": "FFmpeg encoding parameters specific to HLS with H.265 encoding. When per-title optimization is disabled, either audio_bitrate or video_bitrate is required.",
                "properties": {
                    "id": { "const": "hls_h265", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/Hls" },
                    { "$ref": "#/components/schemas/H265" },
                    { "$ref": "#/components/schemas/VideoCommon" },
                    { "$ref": "#/components/schemas/FormatBitrates" }
                ],
                "required": ["id"],
                "type": "object"
            },
            "Jpg": {
                "description": "FFmpeg encoding parameters specific to JPEG image extraction.",
                "properties": {
                    "id": { "const": "jpg", "type": "string" },
                    "chunk_duration": { "minimum": 1, "type": "integer" },
                    "duration": {
                        "description": "Duration specifies the duration to process in seconds.\nMust be a positive value.",
                        "minimum": 1,
                        "type": "integer"
                    },
                    "frames": { "minimum": 1, "type": "integer" },
                    "height": {
                        "maximum": 3840,
                        "minimum": -2,
                        "type": "integer"
                    },
                    "interval": {
                        "description": "Time interval in seconds at which frames are extracted from the video (e.g., interval=10 extracts frames at 0s, 10s, 20s, etc.).\nMust be between 1 and 60 seconds.",
                        "maximum": 60,
                        "minimum": 1,
                        "type": "integer"
                    },
                    "seek": {
                        "description": "Seek specifies the timestamp to start processing from (in seconds).\nMust be a positive value.",
                        "minimum": 1,
                        "type": "integer"
                    },
                    "sprite": { "type": "boolean" },
                    "width": {
                        "maximum": 3840,
                        "minimum": -2,
                        "type": "integer"
                    }
                },
                "required": ["id", "interval"],
                "type": "object"
            },
            "WebmVp9": {
                "description": "FFmpeg encoding parameters specific to WebM with VP9 encoding.",
                "properties": {
                    "id": { "const": "webm_vp9", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/Vp9" },
                    { "$ref": "#/components/schemas/FormatBitrates" },
                    { "$ref": "#/components/schemas/VideoCommon" }
                ],
                "required": ["id"],
                "type": "object"
            },
            "Vp9": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters specific to VP9 encoding.",
                "properties": {
                    "cpu_used": {
                        "description": "CpuUsed specifies the CPU usage level for VP9 encoding. Range: 0 to 8.\nLower values mean better quality but slower encoding, higher values mean faster encoding but lower quality.\nRecommended values: 0-2 for high quality, 2-4 for good quality, 4-6 for balanced, 6-8 for speed",
                        "examples": ["4"],
                        "maxLength": 8,
                        "type": "string",
                        "default": "5",
                        "enum": ["0", "1", "2", "3", "4", "5", "6", "7", "8"]
                    },
                    "crf": {
                        "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 15 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
                        "examples": [23],
                        "maximum": 35,
                        "minimum": 15,
                        "type": "integer",
                        "default": 24
                    },
                    "quality": {
                        "description": "Quality specifies the VP9 encoding quality preset. Valid values:\n- good: Balanced quality preset, good for most applications\n- best: Best quality preset, slower encoding\n- realtime: Fast encoding preset, suitable for live streaming",
                        "enum": ["good", "best", "realtime"],
                        "examples": ["good"],
                        "type": "string",
                        "default": "realtime"
                    }
                },
                "type": "object"
            },
            "Mp4H264": {
                "description": "FFmpeg encoding parameters specific to MP4 with H.264 encoding.",
                "properties": {
                    "id": { "const": "mp4_h264", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/H264" },
                    { "$ref": "#/components/schemas/FormatBitrates" },
                    { "$ref": "#/components/schemas/VideoCommon" }
                ],
                "type": "object",
                "required": ["id"]
            },
            "H264": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters specific to H.264/AVC encoding.",
                "properties": {
                    "crf": {
                        "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
                        "examples": [23],
                        "maximum": 35,
                        "minimum": 16,
                        "type": "integer",
                        "default": 21
                    },
                    "level": {
                        "description": "Level specifies the H.264 profile level. Valid values: 10-13 (baseline), 20-22 (main), 30-32 (high), 40-42 (high), 50-51 (high).\nHigher levels support higher resolutions and bitrates but require more processing power.",
                        "enum": [
                            10, 11, 12, 13, 20, 21, 22, 30, 31, 32, 40, 41, 42,
                            50, 51
                        ],
                        "examples": [41],
                        "type": "integer"
                    },
                    "movflags": { "type": "string" },
                    "preset": {
                        "description": "Preset specifies the encoding speed preset. Valid values (from fastest to slowest):\n- ultrafast: Fastest encoding, lowest quality\n- superfast: Very fast encoding, lower quality\n- veryfast: Fast encoding, moderate quality\n- faster: Faster encoding, good quality\n- fast: Fast encoding, better quality\n- medium: Balanced preset, best quality",
                        "enum": [
                            "ultrafast",
                            "superfast",
                            "veryfast",
                            "faster",
                            "fast",
                            "medium"
                        ],
                        "examples": ["medium"],
                        "type": "string",
                        "default": "veryfast"
                    },
                    "profilev": {
                        "description": "Profilev specifies the H.264 profile. Valid values:\n- baseline: Basic profile, good for mobile devices\n- main: Main profile, good for most applications\n- high: High profile, best quality but requires more processing\n- high10: High 10-bit profile, supports 10-bit color\n- high422: High 4:2:2 profile, supports 4:2:2 color sampling\n- high444: High 4:4:4 profile, supports 4:4:4 color sampling",
                        "enum": [
                            "baseline",
                            "main",
                            "high",
                            "high10",
                            "high422",
                            "high444"
                        ],
                        "examples": ["high"],
                        "type": "string"
                    },
                    "x264_keyint": {
                        "description": "X264KeyInt specifies the maximum number of frames between keyframes for H.264 encoding.\nRange: 1 to 300. Higher values can improve compression but may affect seeking.",
                        "examples": [60],
                        "maximum": 300,
                        "minimum": 1,
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "Mp4H265": {
                "description": "FFmpeg encoding parameters specific to MP4 with H.265 encoding.",
                "properties": {
                    "id": { "const": "mp4_h265", "type": "string" }
                },
                "allOf": [
                    { "$ref": "#/components/schemas/H265" },
                    { "$ref": "#/components/schemas/FormatBitrates" },
                    { "$ref": "#/components/schemas/VideoCommon" }
                ],
                "type": "object",
                "required": ["id"]
            },
            "H265": {
                "x-oapi-gen-ignore": true,
                "description": "FFmpeg encoding parameters specific to H.265/HEVC encoding. It extends FfmpegCommon with H.265-specific options for quality control and encoding profiles.",
                "properties": {
                    "crf": {
                        "description": "Crf (Constant Rate Factor) controls the quality of the output video.\nLower values mean better quality but larger file size. Range: 16 to 35.\nRecommended values: 18-28 for high quality, 23-28 for good quality, 28-35 for acceptable quality.",
                        "examples": [23],
                        "maximum": 35,
                        "minimum": 16,
                        "type": "integer",
                        "default": 24
                    },
                    "level": {
                        "description": "Level specifies the H.265 profile level. Valid values: 30-31 (main), 41 (main10).\nHigher levels support higher resolutions and bitrates but require more processing power.",
                        "enum": [30, 31, 41],
                        "examples": [41],
                        "type": "integer"
                    },
                    "movflags": { "type": "string" },
                    "preset": {
                        "description": "Preset specifies the encoding speed preset. Valid values (from fastest to slowest):\n- ultrafast: Fastest encoding, lowest quality\n- superfast: Very fast encoding, lower quality\n- veryfast: Fast encoding, moderate quality\n- faster: Faster encoding, good quality\n- fast: Fast encoding, better quality\n- medium: Balanced preset, best quality",
                        "enum": [
                            "ultrafast",
                            "superfast",
                            "veryfast",
                            "faster",
                            "fast",
                            "medium"
                        ],
                        "examples": ["medium"],
                        "type": "string",
                        "default": "veryfast"
                    },
                    "profilev": {
                        "description": "Profilev specifies the H.265 profile. Valid values:\n- main: Main profile, good for most applications\n- main10: Main 10-bit profile, supports 10-bit color\n- mainstillpicture: Still picture profile, optimized for single images",
                        "enum": ["main", "main10", "mainstillpicture"],
                        "examples": ["main10"],
                        "type": "string"
                    },
                    "x265_keyint": {
                        "description": "X265KeyInt specifies the maximum number of frames between keyframes for H.265 encoding.\nRange: 1 to 300. Higher values can improve compression but may affect seeking.",
                        "examples": [60],
                        "maximum": 300,
                        "minimum": 1,
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "File": {
                "properties": {
                    "audio_bitrate": {
                        "description": "Audio bitrate in bits per second",
                        "examples": [128000],
                        "type": "integer"
                    },
                    "audio_codec": {
                        "description": "Audio codec used",
                        "examples": ["aac"],
                        "type": "string"
                    },
                    "created_at": {
                        "description": "Timestamp when the file was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "cdn_url": {
                        "description": "Stable, unsigned CDN delivery URL derived from the file's current storage configuration. Omitted when no CDN base URL is configured.",
                        "examples": [
                            "https://media.example.com/path/to/file.mp4"
                        ],
                        "type": "string",
                        "format": "uri",
                        "nullable": true
                    },
                    "duration": {
                        "description": "Duration of the video in seconds",
                        "examples": [120],
                        "type": "integer"
                    },
                    "height": {
                        "description": "Height of the video in pixels",
                        "examples": [1080],
                        "type": "integer"
                    },
                    "id": {
                        "description": "Unique identifier of the file",
                        "examples": ["file_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "job_id": {
                        "description": "ID of the job that created this file",
                        "examples": ["job_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "mime_type": {
                        "description": "MIME type of the file",
                        "examples": ["video/mp4"],
                        "type": "string"
                    },
                    "path": {
                        "description": "Path to the file in storage",
                        "examples": ["path/to/file.mp4"],
                        "type": "string"
                    },
                    "size": {
                        "description": "Size of the file in bytes",
                        "examples": [1234567],
                        "type": "integer"
                    },
                    "storage_id": {
                        "description": "StorageId identifier where the file is stored",
                        "examples": [
                            "stor_chunkify_2wLmj1fp8neUaFAWwwxvzKAT0Fa"
                        ],
                        "type": "string"
                    },
                    "url": {
                        "description": "Pre-signed URL to directly access the file (only included when available)",
                        "examples": [
                            "https://my-bucket.s3.us-east-1.amazonaws.com/path/to/file.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256"
                        ],
                        "type": "string"
                    },
                    "video_bitrate": {
                        "description": "Video bitrate in bits per second",
                        "examples": [20000000],
                        "type": "integer"
                    },
                    "video_codec": {
                        "description": "Video codec used",
                        "examples": ["h264"],
                        "type": "string"
                    },
                    "video_framerate": {
                        "description": "Video framerate in frames per second",
                        "examples": [29.97],
                        "type": "number"
                    },
                    "width": {
                        "description": "Width of the video in pixels",
                        "examples": [1920],
                        "type": "integer"
                    }
                },
                "required": [
                    "id",
                    "job_id",
                    "storage_id",
                    "path",
                    "size",
                    "mime_type",
                    "duration",
                    "width",
                    "height",
                    "video_bitrate",
                    "video_codec",
                    "video_framerate",
                    "audio_codec",
                    "audio_bitrate",
                    "created_at",
                    "url"
                ],
                "type": "object"
            },
            "JobResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Job": {
                "properties": {
                    "billable_time": {
                        "description": "Billable time in seconds",
                        "examples": [120],
                        "type": "integer"
                    },
                    "created_at": {
                        "description": "Creation timestamp",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "error": {
                        "allOf": [
                            { "$ref": "#/components/schemas/ChunkifyError" }
                        ],
                        "description": "Error message for the job"
                    },
                    "format": {
                        "allOf": [{ "$ref": "#/components/schemas/JobFormat" }],
                        "description": "Format configuration used for transcoding"
                    },
                    "hls_manifest_id": {
                        "description": "HLS manifest ID",
                        "examples": ["hls_2v6EIgcNAycdS5g0IUm0TXBjvHV"],
                        "type": "string"
                    },
                    "id": {
                        "description": "Unique identifier for the job",
                        "examples": ["job_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "metadata": {
                        "description": "Additional metadata for the job",
                        "type": "object",
                        "additionalProperties": { "type": "string" },
                        "examples": [{ "key1": "value1", "key2": "value2" }]
                    },
                    "progress": {
                        "description": "Progress percentage of the job (0-100)",
                        "examples": [45.5],
                        "type": "number"
                    },
                    "source_id": {
                        "description": "ID of the source video being transcoded",
                        "examples": ["src_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "started_at": {
                        "description": "When the job started processing",
                        "examples": ["2025-01-01T12:01:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "status": {
                        "description": "Current status of the job. New jobs start as pending while waiting for scheduler admission, then become queued when admitted for processing.",
                        "examples": ["pending"],
                        "enum": [
                            "pending",
                            "queued",
                            "ingesting",
                            "transcoding",
                            "downloading",
                            "merging",
                            "uploading",
                            "failed",
                            "completed",
                            "cancelled",
                            "merged",
                            "downloaded",
                            "transcoded",
                            "waiting"
                        ],
                        "type": "string",
                        "default": "pending"
                    },
                    "storage": {
                        "allOf": [
                            { "$ref": "#/components/schemas/JobStorage" }
                        ],
                        "description": "Storage configuration for the job output"
                    },
                    "transcoder": {
                        "allOf": [
                            { "$ref": "#/components/schemas/JobTranscoder" }
                        ],
                        "description": "Transcoder configuration and status"
                    },
                    "updated_at": {
                        "description": "Last update timestamp",
                        "examples": ["2025-01-01T12:05:00Z"],
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "status",
                    "created_at",
                    "updated_at",
                    "source_id",
                    "format",
                    "storage",
                    "transcoder",
                    "progress",
                    "billable_time"
                ],
                "type": "object"
            },
            "JobFormatId": {
                "type": "string",
                "enum": [
                    "mp4_h264",
                    "mp4_h265",
                    "mp4_av1",
                    "webm_vp9",
                    "hls_h264",
                    "hls_h265",
                    "hls_av1",
                    "jpg"
                ]
            },
            "JobCreateFormatParams": {
                "description": "The format parameters for creating a new job.",
                "type": "object",
                "discriminator": { "propertyName": "id" },
                "oneOf": [
                    { "$ref": "#/components/schemas/Mp4Av1" },
                    { "$ref": "#/components/schemas/Mp4H264" },
                    { "$ref": "#/components/schemas/Mp4H265" },
                    { "$ref": "#/components/schemas/WebmVp9" },
                    { "$ref": "#/components/schemas/HlsAv1" },
                    { "$ref": "#/components/schemas/HlsH264" },
                    { "$ref": "#/components/schemas/HlsH265" },
                    { "$ref": "#/components/schemas/Jpg" }
                ]
            },
            "JobCreateParams": {
                "description": "The parameters for creating a new job, including source file, metadata, storage, format, and transcoder configurations.",
                "allOf": [
                    {
                        "if": {
                            "required": ["format"]
                        },
                        "then": {
                            "description": "format.per_title supports video formats only and cannot be combined with explicit rate-control fields; HLS formats require audio_bitrate or video_bitrate unless per-title optimization is enabled",
                            "allOf": [
                                {
                                    "if": {
                                        "properties": {
                                            "format": {
                                                "properties": {
                                                    "per_title": {
                                                        "const": true
                                                    }
                                                },
                                                "required": ["per_title"]
                                            }
                                        }
                                    },
                                    "then": {
                                        "description": "format.per_title supports video formats only and cannot be combined with crf, video_bitrate, minrate, maxrate, bufsize, or disable_video=true",
                                        "properties": {
                                            "format": {
                                                "allOf": [
                                                    {
                                                        "properties": {
                                                            "disable_video": {
                                                                "const": false
                                                            }
                                                        }
                                                    },
                                                    {
                                                        "not": {
                                                            "anyOf": [
                                                                { "required": ["crf"] },
                                                                { "required": ["video_bitrate"] },
                                                                { "required": ["minrate"] },
                                                                { "required": ["maxrate"] },
                                                                { "required": ["bufsize"] }
                                                            ]
                                                        }
                                                    },
                                                    {
                                                        "properties": {
                                                            "id": {
                                                                "enum": [
                                                                    "mp4_h264",
                                                                    "mp4_h265",
                                                                    "mp4_av1",
                                                                    "webm_vp9",
                                                                    "hls_h264",
                                                                    "hls_h265",
                                                                    "hls_av1"
                                                                ]
                                                            }
                                                        }
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                },
                                {
                                    "if": {
                                        "properties": {
                                            "format": {
                                                "properties": {
                                                    "id": {
                                                        "const": "jpg"
                                                    }
                                                },
                                                "required": ["id"]
                                            }
                                        }
                                    },
                                    "then": {
                                        "description": "JPEG output does not support per-title optimization.",
                                        "properties": {
                                            "format": {
                                                "not": {
                                                    "required": ["per_title"]
                                                }
                                            }
                                        }
                                    }
                                },
                                {
                                    "if": {
                                        "properties": {
                                            "format": {
                                                "properties": {
                                                    "id": {
                                                        "enum": [
                                                            "hls_h264",
                                                            "hls_h265",
                                                            "hls_av1"
                                                        ]
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "then": {
                                        "description": "HLS formats require audio_bitrate or video_bitrate unless per-title optimization is enabled.",
                                        "properties": {
                                            "format": {
                                                "anyOf": [
                                                    {
                                                        "properties": {
                                                            "per_title": {
                                                                "const": true
                                                            }
                                                        },
                                                        "required": ["per_title"]
                                                    },
                                                    {
                                                        "anyOf": [
                                                            { "required": ["video_bitrate"] },
                                                            { "required": ["audio_bitrate"] }
                                                        ]
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    }
                ],
                "properties": {
                    "format": {
                        "$ref": "#/components/schemas/JobCreateFormatParams",
                        "description": "Required format configuration, one and only one valid format configuration must be provided.\nIf you want to use a format without specifying any configuration, use an empty object in the corresponding field."
                    },
                    "hls_manifest_id": {
                        "description": "Optional HLS manifest configuration\nUse the same hls manifest ID to group multiple jobs into a single HLS manifest\nBy default, it's automatically generated if no set for HLS jobs",
                        "examples": ["hls_2v6EIgcNAycdS5g0IUm0TXBjvHV"],
                        "maxLength": 64,
                        "type": "string"
                    },
                    "metadata": {
                        "additionalProperties": { "type": "string" },
                        "description": "Optional metadata to attach to the job, the maximum size allowed is 2048 bytes",
                        "examples": [{ "key": "value", "key2": "value2" }],
                        "type": "object"
                    },
                    "source_id": {
                        "description": "The ID of the source file to transcode",
                        "examples": ["src_UioP9I876hjKlNBH78ILp0mo56t"],
                        "type": "string"
                    },
                    "storage": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/JobCreateStorageParams"
                            }
                        ],
                        "description": "Optional storage configuration"
                    },
                    "transcoder": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/JobCreateTranscoderParams"
                            }
                        ],
                        "description": "Optional transcoder configuration. If not provided, the system will automatically\ncalculate the optimal quantity and CPU type based on the source file specifications\nand output requirements. This auto-scaling ensures efficient resource utilization."
                    }
                },
                "required": ["format", "source_id"],
                "type": "object"
            },
            "JobCreateStorageParams": {
                "properties": {
                    "id": {
                        "description": "Storage Id specifies the storage configuration to use from pre-configured storage options.\nMust be 4-64 characters long and contain only alphanumeric characters, underscores and hyphens.\nOptional if Storage Path is provided.",
                        "examples": ["aws-my-storage"],
                        "maxLength": 64,
                        "minLength": 4,
                        "type": "string"
                    },
                    "path": {
                        "description": "Storage Path specifies an object path relative to the selected storage connection's base_prefix. Do not include the base_prefix. Leading slashes are accepted for compatibility and removed before the path is stored. The base_prefix and normalized path may contain at most 1024 bytes combined. Optional if Storage Id is provided.",
                        "examples": ["exports/video.mp4"],
                        "maxLength": 1024,
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "JobCreateTranscoderParams": {
                "properties": {
                    "quantity": {
                        "description": "Quantity specifies the number of transcoder instances.\nRequired if Type is set.",
                        "examples": [2],
                        "minimum": 1,
                        "maximum": 128,
                        "type": "integer"
                    },
                    "type": {
                        "description": "Type specifies the CPU configuration for each transcoder instance.\nRequired if Quantity is set.",
                        "$ref": "#/components/schemas/InstanceType"
                    }
                },
                "type": "object"
            },
            "InstanceType": {
                "type": "string",
                "enum": ["4vCPU", "8vCPU", "16vCPU"]
            },
            "JobFormat": {
                "description": "A template defines the transcoding parameters and settings for a job",
                "discriminator": { "propertyName": "id" },
                "properties": {
                    "id": {
                        "description": "The format ID",
                        "$ref": "#/components/schemas/JobFormatId"
                    },
                    "per_title": {
                        "description": "Whether per-title optimization was enabled for this job.",
                        "type": "boolean"
                    }
                },
                "oneOf": [
                    { "$ref": "#/components/schemas/Mp4Av1" },
                    { "$ref": "#/components/schemas/Mp4H264" },
                    { "$ref": "#/components/schemas/Mp4H265" },
                    { "$ref": "#/components/schemas/WebmVp9" },
                    { "$ref": "#/components/schemas/HlsAv1" },
                    { "$ref": "#/components/schemas/HlsH264" },
                    { "$ref": "#/components/schemas/HlsH265" },
                    { "$ref": "#/components/schemas/Jpg" }
                ],
                "required": ["id", "per_title"],
                "type": "object"
            },
            "JobStorage": {
                "description": "Storage settings for where the job output will be saved",
                "properties": {
                    "id": {
                        "description": "ID of the storage",
                        "examples": ["stor_aws_S1cce6120E56e7Tu9ioP09Nhjk1"],
                        "type": "string"
                    },
                    "path": {
                        "description": "Path where the output will be stored",
                        "examples": ["path/to/video.mp4"],
                        "type": "string"
                    }
                },
                "type": "object",
                "required": ["id", "path"]
            },
            "JobTranscoder": {
                "description": "The transcoder configuration for a job",
                "properties": {
                    "quantity": {
                        "description": "Number of instances allocated",
                        "examples": [10],
                        "type": "integer"
                    },
                    "type": {
                        "description": "Type of transcoder instance",
                        "$ref": "#/components/schemas/InstanceType"
                    },
                    "auto": {
                        "description": "Whether the transcoder configuration is automatically set by Chunkify",
                        "examples": [true],
                        "type": "boolean"
                    }
                },
                "required": ["quantity", "type", "auto"],
                "type": "object"
            },
            "JobTranscodersListResponse": {
                "description": "Response containing a list of transcoders for a job",
                "properties": {
                    "status": {
                        "type": "string",
                        "description": "Status indicates the response status \"success\"",
                        "const": "success"
                    },
                    "data": {
                        "items": {
                            "$ref": "#/components/schemas/TranscoderStatus"
                        },
                        "type": "array"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Log": {
                "properties": {
                    "attributes": {
                        "type": "object",
                        "description": "Additional structured data attached to the log",
                        "additionalProperties": true
                    },
                    "job_id": {
                        "description": "Optional ID of the job this log is associated with",
                        "examples": ["job_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "level": {
                        "description": "Log level",
                        "examples": ["info", "error", "debug"],
                        "type": "string",
                        "enum": ["info", "error", "debug"]
                    },
                    "msg": {
                        "description": "The log message content",
                        "examples": ["Starting transcoder#1"],
                        "type": "string"
                    },
                    "service": {
                        "description": "Name of the service that generated the log",
                        "examples": ["transcoder", "manager"],
                        "type": "string",
                        "enum": ["transcoder", "manager"]
                    },
                    "time": {
                        "description": "Timestamp when the log was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    }
                },
                "required": ["time", "level", "msg", "service", "attributes"],
                "type": "object"
            },
            "NotificationResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Notification"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Notification": {
                "properties": {
                    "created_at": {
                        "description": "Timestamp when the notification was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "event": {
                        "description": "Type of event that triggered this notification",
                        "$ref": "#/components/schemas/WebhookEvent"
                    },
                    "id": {
                        "description": "Unique identifier of the notification",
                        "examples": ["notf_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "object_id": {
                        "description": "ID of the object that triggered this notification",
                        "examples": ["job_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "payload": {
                        "description": "JSON payload that was sent to the webhook endpoint",
                        "examples": [
                            "{\"event\":\"job.completed\",\"job\":{\"id\":\"job_123\"}}"
                        ],
                        "type": "string"
                    },
                    "response_status_code": {
                        "description": "HTTP status code received from the webhook endpoint",
                        "examples": [200],
                        "type": "integer"
                    },
                    "webhook": {
                        "allOf": [{ "$ref": "#/components/schemas/Webhook" }],
                        "description": "Webhook endpoint configuration that received this notification"
                    }
                },
                "required": [
                    "created_at",
                    "event",
                    "id",
                    "object_id",
                    "payload",
                    "webhook"
                ],
                "type": "object"
            },
            "NotificationCreateParams": {
                "properties": {
                    "event": {
                        "description": "Event specifies the type of event that triggered the notification.",
                        "$ref": "#/components/schemas/WebhookEvent"
                    },
                    "object_id": {
                        "description": "ObjectId specifies the object that triggered this notification.",
                        "examples": ["job_A1cce6120E56e7Tu9ioP09Nhjk9"],
                        "type": "string"
                    },
                    "webhook_id": {
                        "description": "WebhookId specifies the webhook endpoint that will receive the notification.",
                        "examples": ["wh_A1cce6120E56e7Tu9ioP09Nhjk9"],
                        "type": "string"
                    }
                },
                "required": ["event", "object_id", "webhook_id"],
                "type": "object"
            },
            "NotificationPayload": {
                "type": "object",
                "discriminator": { "propertyName": "event" },
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "Unique identifier of the notification",
                        "examples": ["notf_2G6MJiNz71bHQGNzGwKx5cJwPFS"]
                    },
                    "event": {
                        "description": "Type of event that triggered the notification.",
                        "$ref": "#/components/schemas/WebhookEvent"
                    },
                    "date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Timestamp when the notification was sent",
                        "examples": ["2025-01-01T12:00:00Z"]
                    },
                    "data": {
                        "description": "Event-specific payload data",
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/NotificationPayloadJobCompleted"
                            },
                            {
                                "$ref": "#/components/schemas/NotificationPayloadJobFailed"
                            },
                            {
                                "$ref": "#/components/schemas/NotificationPayloadUploadCompleted"
                            },
                            {
                                "$ref": "#/components/schemas/NotificationPayloadUploadFailed"
                            }
                        ]
                    }
                },
                "required": ["id", "event", "date", "data"]
            },
            "NotificationPayloadJobCompleted": {
                "type": "object",
                "description": "Payload data structure for job.completed events",
                "properties": {
                    "job": { "$ref": "#/components/schemas/Job" },
                    "files": {
                        "type": "array",
                        "items": { "$ref": "#/components/schemas/File" },
                        "description": "List of files generated by the job"
                    }
                },
                "required": ["job", "files"]
            },
            "NotificationPayloadJobFailed": {
                "type": "object",
                "description": "Payload data structure for job.failed and job.cancelled events",
                "properties": { "job": { "$ref": "#/components/schemas/Job" } },
                "required": ["job"]
            },
            "NotificationPayloadUploadCompleted": {
                "type": "object",
                "description": "Payload data structure for upload.completed events",
                "properties": {
                    "upload": { "$ref": "#/components/schemas/Upload" },
                    "source": { "$ref": "#/components/schemas/Source" }
                },
                "required": ["upload", "source"]
            },
            "NotificationPayloadUploadFailed": {
                "type": "object",
                "description": "Payload data structure for upload.failed and upload.expired events",
                "properties": {
                    "upload": { "$ref": "#/components/schemas/Upload" }
                },
                "required": ["upload"]
            },
            "ProjectResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Project"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Project": {
                "properties": {
                    "created_at": {
                        "description": "Timestamp when the project was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "id": {
                        "description": "Id is the unique identifier for the project.",
                        "examples": ["proj_2vPYfWPSk3Uejm1HHaMoDqogcVJ"],
                        "type": "string"
                    },
                    "name": {
                        "description": "Name of the project",
                        "examples": ["My Video Project"],
                        "type": "string"
                    },
                    "slug": {
                        "description": "Slug is the slug for the project.",
                        "examples": ["my-video-project"],
                        "type": "string"
                    },
                    "storage_id": {
                        "description": "StorageId identifier where project files are stored",
                        "examples": [
                            "stor_chunkify_S1cce6120E56e7Tu9ioP09Nhjk1"
                        ],
                        "type": "string"
                    }
                },
                "required": ["id", "name", "slug", "storage_id", "created_at"],
                "type": "object"
            },
            "ProjectCreateParams": {
                "properties": {
                    "name": {
                        "description": "Name is the name of the project, which must be between 4 and 32 characters.",
                        "examples": ["My Project"],
                        "maxLength": 32,
                        "minLength": 4,
                        "type": "string",
                        "pattern": "^[a-zA-Z0-9\\-\\_ ]+$"
                    }
                },
                "required": ["name"],
                "type": "object"
            },
            "ProjectListResponse": {
                "description": "Response containing the list of projects for a team",
                "properties": {
                    "data": {
                        "description": "Data contains the project items",
                        "items": {
                            "$ref": "#/components/schemas/Project"
                        },
                        "type": "array"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    }
                },
                "required": ["data", "status"],
                "type": "object"
            },
            "ProjectUpdateParams": {
                "properties": {
                    "name": {
                        "description": "Name is the name of the project. Required when storage_id is not provided.",
                        "type": "string",
                        "minLength": 4,
                        "maxLength": 32,
                        "pattern": "^[a-zA-Z0-9\\-\\_ ]+$"
                    },
                    "storage_id": {
                        "description": "StorageId is the storage id of the project. Required when name is not provided.",
                        "type": "string",
                        "minLength": 4,
                        "maxLength": 64
                    }
                },
                "anyOf": [
                    { "required": ["name"] },
                    { "required": ["storage_id"] }
                ],
                "type": "object"
            },
            "FileResponse": {
                "description": "Successful response",
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/File"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "FileListResponse": {
                "description": "Paginated response containing a list of files",
                "properties": {
                    "data": {
                        "description": "Data contains the paginated file items",
                        "items": { "$ref": "#/components/schemas/File" },
                        "type": "array"
                    },
                    "limit": {
                        "description": "Limit indicates the maximum number of items in the current response",
                        "type": "integer"
                    },
                    "offset": {
                        "description": "Offset indicates the offset of the first item in the current response",
                        "type": "integer"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "total": {
                        "description": "Total indicates the total number of items",
                        "type": "integer"
                    }
                },
                "required": ["data", "limit", "offset", "status", "total"],
                "type": "object"
            },
            "JobListResponse": {
                "description": "Paginated response containing a list of jobs",
                "properties": {
                    "data": {
                        "description": "Data contains the paginated job items",
                        "items": { "$ref": "#/components/schemas/Job" },
                        "type": "array"
                    },
                    "limit": {
                        "description": "Limit indicates the maximum number of items in the current response",
                        "type": "integer"
                    },
                    "offset": {
                        "description": "Offset indicates the offset of the first item in the current response",
                        "type": "integer"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "total": {
                        "description": "Total indicates the total number of items",
                        "type": "integer"
                    }
                },
                "required": ["data", "limit", "offset", "status", "total"],
                "type": "object"
            },
            "JobLogsListResponse": {
                "description": "Response containing a list of logs for a job",
                "properties": {
                    "status": {
                        "type": "string",
                        "description": "Status indicates the response status \"success\"",
                        "const": "success",
                        "examples": ["success"]
                    },
                    "data": {
                        "items": { "$ref": "#/components/schemas/Log" },
                        "type": "array"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "JobFilesListResponse": {
                "description": "Response containing a list of files for a job",
                "properties": {
                    "status": {
                        "type": "string",
                        "description": "Status indicates the response status \"success\"",
                        "const": "success"
                    },
                    "data": {
                        "items": { "$ref": "#/components/schemas/File" },
                        "type": "array"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "NotificationListResponse": {
                "description": "Paginated response containing a list of notifications",
                "properties": {
                    "data": {
                        "description": "Data contains the paginated notification items",
                        "items": {
                            "$ref": "#/components/schemas/Notification"
                        },
                        "type": "array"
                    },
                    "limit": {
                        "description": "Limit indicates the maximum number of items in the current response",
                        "type": "integer"
                    },
                    "offset": {
                        "description": "Offset indicates the offset of the first item in the current response",
                        "type": "integer"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "total": {
                        "description": "Total indicates the total number of items",
                        "type": "integer"
                    }
                },
                "required": ["data", "limit", "offset", "status", "total"],
                "type": "object"
            },
            "SourceListResponse": {
                "description": "Paginated response containing a list of sources",
                "properties": {
                    "data": {
                        "description": "Data contains the paginated source items",
                        "items": { "$ref": "#/components/schemas/Source" },
                        "type": "array"
                    },
                    "limit": {
                        "description": "Limit indicates the maximum number of items in the current response",
                        "type": "integer"
                    },
                    "offset": {
                        "description": "Offset indicates the offset of the first item in the current response",
                        "type": "integer"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "total": {
                        "description": "Total indicates the total number of items",
                        "type": "integer"
                    }
                },
                "required": ["data", "limit", "offset", "status", "total"],
                "type": "object"
            },
            "UploadListResponse": {
                "description": "Paginated response containing a list of uploads",
                "properties": {
                    "data": {
                        "description": "Data contains the paginated upload items",
                        "items": { "$ref": "#/components/schemas/Upload" },
                        "type": "array"
                    },
                    "limit": {
                        "description": "Limit indicates the maximum number of items in the current response",
                        "type": "integer"
                    },
                    "offset": {
                        "description": "Offset indicates the offset of the first item in the current response",
                        "type": "integer"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "total": {
                        "description": "Total indicates the total number of items",
                        "type": "integer"
                    }
                },
                "required": ["data", "limit", "offset", "status", "total"],
                "type": "object"
            },
            "ResponseErrorGone": {
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "GoneError",
                                "description": "Type indicates the error category",
                                "enum": [
                                    "GoneError"
                                ]
                            },
                            "code": {
                                "type": "integer",
                                "const": 410,
                                "description": "Code is the HTTP status code",
                                "examples": [
                                    410
                                ]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": [
                                    "The requested resource is no longer available"
                                ]
                            }
                        },
                        "required": [
                            "type",
                            "code",
                            "message"
                        ]
                    }
                },
                "required": [
                    "status",
                    "error"
                ]
            },
            "ResponseErrorServiceUnavailable": {
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "ServiceUnavailableError",
                                "description": "Type indicates the error category",
                                "enum": [
                                    "ServiceUnavailableError"
                                ]
                            },
                            "code": {
                                "type": "integer",
                                "const": 503,
                                "description": "Code is the HTTP status code",
                                "examples": [
                                    503
                                ]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": [
                                    "The service is temporarily unavailable; retry the request"
                                ]
                            }
                        },
                        "required": [
                            "type",
                            "code",
                            "message"
                        ]
                    }
                },
                "required": [
                    "status",
                    "error"
                ]
            },
            "ResponseErrorNotFound": {
                "type": "object",
                "description": "Error response",
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "NotFoundError",
                                "description": "Type indicates the error category",
                                "enum": ["NotFoundError"]
                            },
                            "code": {
                                "type": "integer",
                                "const": 404,
                                "description": "Code is the HTTP status code",
                                "examples": [404]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": ["Ressource not found"]
                            }
                        },
                        "required": ["type", "code", "message"]
                    }
                },
                "required": ["status", "error"]
            },
            "ResponseErrorAuthentication": {
                "type": "object",
                "description": "Error response",
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "AuthenticationError",
                                "description": "Type indicates the error category",
                                "enum": ["AuthenticationError"]
                            },
                            "code": {
                                "type": "integer",
                                "const": 401,
                                "description": "Code is the HTTP status code",
                                "examples": [401]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": [
                                    "Authentication error: invalid token or subscription inactive"
                                ]
                            }
                        },
                        "required": ["type", "code", "message"]
                    }
                },
                "required": ["status", "error"]
            },
            "ResponseErrorValidation": {
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "ValidationError",
                                "description": "Type indicates the error category",
                                "enum": ["ValidationError"]
                            },
                            "code": {
                                "type": "integer",
                                "const": 400,
                                "description": "Code is the HTTP status code",
                                "examples": [400]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": ["Invalid request parameters"]
                            }
                        },
                        "required": ["type", "code", "message"]
                    }
                },
                "required": ["status", "error"]
            },
            "ResponseErrorForbidden": {
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "ForbiddenError",
                                "description": "Type indicates the error category",
                                "enum": ["ForbiddenError"]
                            },
                            "code": {
                                "type": "integer",
                                "const": 403,
                                "description": "Code is the HTTP status code",
                                "examples": [403]
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": [
                                    "Unauthorized to perform this action"
                                ]
                            }
                        },
                        "required": ["type", "code", "message"]
                    }
                },
                "required": ["status", "error"]
            },
            "ResponseErrorTooManyRequests": {
                "type": "object",
                "description": "Error response",
                "properties": {
                    "status": {
                        "type": "string",
                        "const": "error",
                        "description": "Status indicates the response status \"error\""
                    },
                    "error": {
                        "type": "object",
                        "description": "Error response details",
                        "properties": {
                            "type": {
                                "type": "string",
                                "const": "TooManyRequestsError",
                                "description": "Type indicates the error category",
                                "enum": ["TooManyRequestsError"]
                            },
                            "code": {
                                "type": "integer",
                                "description": "Code is the HTTP status code",
                                "examples": [429],
                                "const": 429
                            },
                            "message": {
                                "type": "string",
                                "description": "Message is a human-readable error description",
                                "examples": ["Rate limit exceeded"]
                            }
                        },
                        "required": ["type", "code", "message"]
                    }
                },
                "required": ["status", "error"]
            },
            "SourceResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Source"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Source": {
                "properties": {
                    "audio_bitrate": {
                        "description": "Audio bitrate in bits per second",
                        "examples": [
                            128000
                        ],
                        "type": "integer"
                    },
                    "audio_codec": {
                        "description": "Audio codec used",
                        "examples": [
                            "aac"
                        ],
                        "type": "string"
                    },
                    "created_at": {
                        "description": "Timestamp when the source was created",
                        "examples": [
                            "2025-01-01T12:00:00Z"
                        ],
                        "format": "date-time",
                        "type": "string"
                    },
                    "device": {
                        "description": "Device used to record the video",
                        "examples": [
                            "iPhone"
                        ],
                        "type": "string"
                    },
                    "duration": {
                        "description": "Duration of the video in seconds",
                        "examples": [
                            120
                        ],
                        "type": "integer"
                    },
                    "height": {
                        "description": "Height of the video in pixels",
                        "examples": [
                            1080
                        ],
                        "type": "integer"
                    },
                    "id": {
                        "description": "Unique identifier of the source",
                        "examples": [
                            "src_2G6MJiNz71bHQGNzGwKx5cJwPFS"
                        ],
                        "type": "string"
                    },
                    "metadata": {
                        "description": "Additional metadata for the source",
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "examples": [
                            {
                                "key1": "value1",
                                "key2": "value2"
                            }
                        ]
                    },
                    "size": {
                        "description": "Size of the source file in bytes",
                        "examples": [
                            1234567
                        ],
                        "type": "integer"
                    },
                    "url": {
                        "description": "URL where the source video can be accessed",
                        "examples": [
                            "https://example.com/video.mp4"
                        ],
                        "type": "string"
                    },
                    "video_bitrate": {
                        "description": "Video bitrate in bits per second",
                        "examples": [
                            20000000
                        ],
                        "type": "integer"
                    },
                    "video_codec": {
                        "description": "Video codec used",
                        "examples": [
                            "h264"
                        ],
                        "type": "string"
                    },
                    "video_framerate": {
                        "description": "Video framerate in frames per second",
                        "examples": [
                            29.97
                        ],
                        "type": "number"
                    },
                    "width": {
                        "description": "Width of the video in pixels",
                        "examples": [
                            1920
                        ],
                        "type": "integer"
                    },
                    "storage_id": {
                        "type": "string",
                        "minLength": 1,
                        "description": "Connected Storage belonging to this Project."
                    },
                    "path": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 1024,
                        "description": "Exact object key in the configured bucket, 1 to 1024 UTF-8 bytes. The output base_prefix is not added."
                    }
                },
                "required": [
                    "audio_bitrate",
                    "audio_codec",
                    "created_at",
                    "device",
                    "duration",
                    "height",
                    "id",
                    "metadata",
                    "size",
                    "video_bitrate",
                    "video_codec",
                    "video_framerate",
                    "width"
                ],
                "type": "object"
            },
            "SourceCreateParams": {
                "properties": {
                    "metadata": {
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Metadata allows for additional information to be attached to the source, with a maximum size of 2048 bytes.",
                        "examples": [
                            {
                                "key": "value",
                                "key2": "value2"
                            }
                        ],
                        "type": "object"
                    },
                    "url": {
                        "format": "http-url",
                        "description": "Url is the URL of the source, which must be a valid HTTP URL.",
                        "examples": [
                            "https://example.com/video.mp4"
                        ],
                        "maxLength": 4096,
                        "type": "string",
                        "minLength": 1
                    },
                    "storage": {
                        "$ref": "#/components/schemas/SourceCreateStorageParams",
                        "description": "Storage input configuration. Provide this or url, never both."
                    }
                },
                "required": [],
                "type": "object",
                "additionalProperties": false,
                "oneOf": [
                    {
                        "required": [
                            "url"
                        ],
                        "not": {
                            "required": [
                                "storage"
                            ]
                        }
                    },
                    {
                        "required": [
                            "storage"
                        ],
                        "not": {
                            "required": [
                                "url"
                            ]
                        }
                    }
                ],
                "description": "Provide exactly one input: an HTTP URL, or storage with a required path and optional id. When storage.id is omitted, the project default storage must be external. Chunkify-managed storage cannot be used as a source input. Storage credentials must allow GetObject. Chunkify reads directly from the source provider; cross-region or cross-provider reads may incur customer-paid egress. Source creation does not copy or retain the object."
            },
            "SourceCreateStorageParams": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "id": {
                        "type": "string",
                        "minLength": 1,
                        "description": "Connected external storage belonging to this project. If omitted, uses the project default storage, which must be external. The resolved storage ID is saved on the source."
                    },
                    "path": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 1024,
                        "x-maxBytes": 1024,
                        "description": "Exact object key in the configured bucket, 1 to 1024 UTF-8 bytes. The output base_prefix is not added."
                    }
                },
                "required": [
                    "path"
                ]
            },
            "StorageResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Storage"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Storage": {
                "discriminator": { "propertyName": "provider" },
                "oneOf": [
                    { "$ref": "#/components/schemas/StorageChunkify" },
                    { "$ref": "#/components/schemas/StorageCloudflare" },
                    { "$ref": "#/components/schemas/StorageAws" },
                    { "$ref": "#/components/schemas/StorageS3Compatible" }
                ],
                "type": "object"
            },
            "StorageChunkify": {
                "properties": {
                    "id": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": [
                            "stor_chunkify_S1cce6120E56e7Tu9ioP09Nhjk1"
                        ],
                        "type": "string"
                    },
                    "slug": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": ["chunkify-10"],
                        "type": "string"
                    },
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["chunkify"],
                        "type": "string",
                        "const": "chunkify"
                    },
                    "region": {
                        "description": "Region specifies the region of the storage provider.",
                        "$ref": "#/components/schemas/ChunkifyRegion"
                    },
                    "created_at": {
                        "description": "Created at timestamp",
                        "examples": ["2021-01-01T00:00:00Z"],
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": ["id", "slug", "provider", "region", "created_at"]
            },
            "StorageCloudflare": {
                "properties": {
                    "id": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": [
                            "stor_cloudflare_S1cce6120E56e7Tu9ioP09Nhjk1"
                        ],
                        "type": "string"
                    },
                    "slug": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": ["cloudflare-20"],
                        "type": "string"
                    },
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["cloudflare"],
                        "type": "string",
                        "const": "cloudflare"
                    },
                    "region": {
                        "description": "Region specifies the region of the storage provider.",
                        "enum": ["auto"],
                        "type": "string",
                        "const": "auto"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string"
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin used to build stable CDN URLs for objects in this storage.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Canonical object-key prefix prepended to every final job output in this customer-owned storage. An empty string means the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    },
                    "endpoint": {
                        "description": "Endpoint is the endpoint of the storage provider.",
                        "examples": ["https://[id].r2.cloudflarestorage.com"],
                        "type": "string",
                        "pattern": "^https://[a-z0-9]{32}\\.r2\\.cloudflarestorage\\.com$",
                        "format": "uri"
                    },
                    "location": {
                        "description": "Location specifies the location of the storage provider.",
                        "$ref": "#/components/schemas/StorageLocation"
                    },
                    "public": {
                        "description": "Public indicates whether the storage is publicly accessible.",
                        "examples": ["false"],
                        "type": "boolean",
                        "default": false
                    },
                    "created_at": {
                        "description": "Created at timestamp",
                        "examples": ["2021-01-01T00:00:00Z"],
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "provider",
                    "region",
                    "bucket",
                    "endpoint",
                    "location",
                    "public",
                    "base_prefix",
                    "created_at"
                ]
            },
            "StorageAws": {
                "properties": {
                    "id": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": ["stor_aws_S1cce6120E56e7Tu9ioP09Nhjk1"],
                        "type": "string"
                    },
                    "slug": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": ["aws-30"],
                        "type": "string"
                    },
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["aws"],
                        "type": "string",
                        "const": "aws"
                    },
                    "region": {
                        "description": "Region specifies the region of the storage provider.",
                        "$ref": "#/components/schemas/AwsRegion"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string"
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin used to build stable CDN URLs for objects in this storage.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Canonical object-key prefix prepended to every final job output in this customer-owned storage. An empty string means the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    },
                    "public": {
                        "description": "Public indicates whether the storage is publicly accessible.",
                        "examples": ["false"],
                        "type": "boolean",
                        "default": false
                    },
                    "created_at": {
                        "description": "Created at timestamp",
                        "examples": ["2021-01-01T00:00:00Z"],
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "provider",
                    "region",
                    "bucket",
                    "public",
                    "base_prefix",
                    "created_at"
                ]
            },
            "StorageS3Compatible": {
                "description": "A customer-owned storage connection using the standard S3 API.",
                "properties": {
                    "id": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": [
                            "stor_s3_compatible_S1cce6120E56e7Tu9ioP09Nhjk1"
                        ],
                        "type": "string"
                    },
                    "slug": {
                        "description": "Unique identifier of the storage configuration",
                        "examples": ["s3_compatible-40"],
                        "type": "string"
                    },
                    "provider": {
                        "description": "Stable provider identifier for generic S3-compatible storage.",
                        "enum": ["s3_compatible"],
                        "type": "string",
                        "const": "s3_compatible"
                    },
                    "region": {
                        "description": "Provider region used for S3 request signing. This is independent from the Chunkify workload location.",
                        "examples": ["us-west-004"],
                        "type": "string"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string"
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin used to build stable CDN URLs for objects in this storage.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Canonical object-key prefix prepended to every final job output in this customer-owned storage. An empty string means the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    },
                    "endpoint": {
                        "description": "Public HTTPS origin for the S3-compatible service. Credentials, paths, queries, fragments, and non-public destinations are rejected.",
                        "examples": ["https://s3.us-west-004.backblazeb2.com"],
                        "type": "string",
                        "format": "uri"
                    },
                    "location": {
                        "description": "Chunkify workload location. This is independent from the provider signing region.",
                        "$ref": "#/components/schemas/StorageLocation"
                    },
                    "addressing_style": {
                        "description": "Addressing style detected during connection validation and used for later S3 operations.",
                        "enum": ["virtual", "path"],
                        "type": "string"
                    },
                    "public": {
                        "description": "Public indicates whether the storage is publicly accessible.",
                        "examples": ["false"],
                        "type": "boolean"
                    },
                    "created_at": {
                        "description": "Created at timestamp",
                        "examples": ["2021-01-01T00:00:00Z"],
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "provider",
                    "region",
                    "bucket",
                    "endpoint",
                    "location",
                    "addressing_style",
                    "public",
                    "base_prefix",
                    "created_at"
                ]
            },
            "StorageListResponse": {
                "description": "Response containing the list of storages configurations for a project",
                "properties": {
                    "data": {
                        "description": "Data contains the storage items",
                        "items": {
                            "$ref": "#/components/schemas/Storage"
                        },
                        "type": "array"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    }
                },
                "required": ["data", "status"],
                "type": "object"
            },
            "StorageLocation": {
                "description": "Location specifies the location of the storage provider.",
                "enum": ["US", "EU", "ASIA"],
                "examples": ["US"],
                "type": "string"
            },
            "StorageAwsCreateParams": {
                "description": "Storage parameters for AWS S3 storage.",
                "type": "object",
                "properties": {
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["aws"],
                        "examples": ["aws"],
                        "type": "string",
                        "const": "aws"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string"
                    },
                    "access_key_id": {
                        "description": "AccessKeyId is the access key for the storage provider. Required if not using Chunkify storage.",
                        "examples": ["1234567890"],
                        "type": "string"
                    },
                    "secret_access_key": {
                        "description": "SecretAccessKey is the secret key for the storage provider. Required if not using Chunkify storage.",
                        "examples": ["1234567890"],
                        "type": "string"
                    },
                    "region": {
                        "description": "Region specifies the region of the storage provider.",
                        "$ref": "#/components/schemas/AwsRegion"
                    },
                    "public": {
                        "description": "Public indicates whether the storage is publicly accessible.",
                        "examples": ["false"],
                        "type": "boolean",
                        "default": false
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin. It must not contain credentials, a path, query string, or fragment.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Object-key prefix for final job outputs. The API normalizes it without a leading slash and with one trailing slash. Omit it or send an empty string to use the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    }
                },
                "required": [
                    "provider",
                    "region",
                    "bucket",
                    "access_key_id",
                    "secret_access_key"
                ]
            },
            "AwsRegion": {
                "description": "Region specifies the region of the storage provider.",
                "examples": ["us-east-1"],
                "enum": [
                    "us-east-1",
                    "us-east-2",
                    "us-central-1",
                    "us-west-1",
                    "us-west-2",
                    "eu-west-1",
                    "eu-west-2",
                    "eu-west-3",
                    "eu-central-1",
                    "eu-north-1",
                    "ap-east-1",
                    "ap-east-2",
                    "ap-northeast-1",
                    "ap-northeast-2",
                    "ap-south-1",
                    "ap-southeast-1",
                    "ap-southeast-2"
                ],
                "type": "string"
            },
            "ChunkifyRegion": {
                "description": "Chunkify available regions.",
                "enum": [
                    "us-east-1",
                    "us-east-2",
                    "us-west-1",
                    "us-west-2",
                    "eu-west-1",
                    "eu-west-2",
                    "ap-northeast-1",
                    "ap-southeast-1"
                ],
                "type": "string"
            },
            "StorageChunkifyCreateParams": {
                "description": "Storage parameters for Chunkify ephemeral storage.",
                "type": "object",
                "properties": {
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["chunkify"],
                        "examples": ["chunkify"],
                        "type": "string",
                        "const": "chunkify"
                    },
                    "region": {
                        "description": "Region specifies the region of the storage provider.",
                        "$ref": "#/components/schemas/ChunkifyRegion"
                    },
                    "cdn_base_url": {
                        "description": "Unsupported for Chunkify-managed temporary storage. Requests that provide this field are rejected.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    }
                },
                "required": ["provider", "region"]
            },
            "StorageCloudflareCreateParams": {
                "description": "Storage parameters for Cloudflare R2 storage.",
                "type": "object",
                "properties": {
                    "provider": {
                        "description": "Provider specifies the storage provider.",
                        "enum": ["cloudflare"],
                        "examples": ["cloudflare"],
                        "type": "string",
                        "const": "cloudflare"
                    },
                    "region": {
                        "description": "Region must be set to 'auto'.",
                        "examples": ["auto"],
                        "enum": ["auto"],
                        "type": "string",
                        "const": "auto"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string"
                    },
                    "access_key_id": {
                        "description": "AccessKeyId is the access key for the storage provider.",
                        "examples": ["1234567890"],
                        "type": "string"
                    },
                    "secret_access_key": {
                        "description": "SecretAccessKey is the secret key for the storage provider.",
                        "examples": ["1234567890"],
                        "type": "string"
                    },
                    "location": {
                        "description": "Location specifies the location of the storage provider.",
                        "examples": ["US"],
                        "enum": ["US", "EU", "ASIA"],
                        "type": "string"
                    },
                    "public": {
                        "description": "Public indicates whether the storage is publicly accessible.",
                        "examples": ["false"],
                        "type": "boolean",
                        "default": false
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin. It must not contain credentials, a path, query string, or fragment.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Object-key prefix for final job outputs. The API normalizes it without a leading slash and with one trailing slash. Omit it or send an empty string to use the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    },
                    "endpoint": {
                        "description": "Endpoint is the endpoint of the storage provider.",
                        "examples": ["https://[id].r2.cloudflarestorage.com"],
                        "type": "string",
                        "pattern": "^https://[a-z0-9]{32}\\.r2\\.cloudflarestorage\\.com$",
                        "format": "uri"
                    }
                },
                "required": [
                    "provider",
                    "region",
                    "bucket",
                    "access_key_id",
                    "secret_access_key",
                    "location",
                    "endpoint"
                ]
            },
            "StorageS3CompatibleCreateParams": {
                "description": "Storage parameters for a public S3-compatible service such as MinIO, Wasabi, or Backblaze B2.",
                "type": "object",
                "properties": {
                    "provider": {
                        "description": "Stable provider identifier for generic S3-compatible storage.",
                        "enum": ["s3_compatible"],
                        "examples": ["s3_compatible"],
                        "type": "string",
                        "const": "s3_compatible"
                    },
                    "region": {
                        "description": "Explicit provider region used for S3 request signing. Vendor-specific identifiers are accepted.",
                        "examples": ["us-west-004"],
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 128,
                        "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
                    },
                    "bucket": {
                        "description": "Bucket is the name of the storage bucket.",
                        "examples": ["my-bucket"],
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    },
                    "access_key_id": {
                        "description": "Access key for the storage provider.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 256
                    },
                    "secret_access_key": {
                        "description": "Secret key for the storage provider.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 256
                    },
                    "location": {
                        "description": "Chunkify workload location. It controls where Chunkify processes the workload and is independent from the provider region.",
                        "$ref": "#/components/schemas/StorageLocation"
                    },
                    "public": {
                        "description": "Whether the bucket is publicly readable.",
                        "type": "boolean",
                        "default": false
                    },
                    "cdn_base_url": {
                        "description": "Optional customer-managed HTTPS delivery origin. It must not contain credentials, a path, query string, or fragment.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Object-key prefix for final job outputs. The API normalizes it without a leading slash and with one trailing slash. Omit it or send an empty string to use the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    },
                    "endpoint": {
                        "description": "Public HTTPS origin for the S3-compatible service. Credentials, paths, queries, fragments, and non-public destinations are rejected.",
                        "examples": ["https://s3.us-west-004.backblazeb2.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267
                    }
                },
                "required": [
                    "provider",
                    "region",
                    "bucket",
                    "access_key_id",
                    "secret_access_key",
                    "location",
                    "endpoint"
                ]
            },
            "StorageCreateParams": {
                "description": "The parameters for creating a new storage configuration.",
                "type": "object",
                "discriminator": { "propertyName": "provider" },
                "oneOf": [
                    { "$ref": "#/components/schemas/StorageAwsCreateParams" },
                    {
                        "$ref": "#/components/schemas/StorageChunkifyCreateParams"
                    },
                    {
                        "$ref": "#/components/schemas/StorageCloudflareCreateParams"
                    },
                    {
                        "$ref": "#/components/schemas/StorageS3CompatibleCreateParams"
                    }
                ]
            },
            "StorageUpdateParams": {
                "description": "Mutable customer storage settings. Omitted fields remain unchanged. An explicit null removes the CDN base URL.",
                "type": "object",
                "properties": {
                    "cdn_base_url": {
                        "description": "Customer-managed HTTPS delivery origin, or null to remove the current value.",
                        "examples": ["https://media.example.com"],
                        "type": "string",
                        "format": "uri",
                        "maxLength": 267,
                        "nullable": true
                    },
                    "base_prefix": {
                        "description": "Object-key prefix for future final job outputs. Existing files keep their stored object keys. Send an empty string to use the bucket root.",
                        "examples": ["chunkify/"],
                        "type": "string",
                        "maxLength": 768
                    }
                }
            },
            "TokenListResponse": {
                "description": "Response containing the list of all tokens for a team. Including project and team tokens.",
                "properties": {
                    "data": {
                        "description": "Data contains the token items",
                        "items": {
                            "$ref": "#/components/schemas/Token"
                        },
                        "type": "array"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    }
                },
                "required": ["data", "status"],
                "type": "object"
            },
            "TokenResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Token"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Token": {
                "properties": {
                    "created_at": {
                        "description": "Timestamp when the token was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "id": {
                        "description": "Unique identifier of the token",
                        "examples": ["tok_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "name": {
                        "description": "Name given to the token",
                        "examples": ["Production API Key"],
                        "type": "string"
                    },
                    "project_id": {
                        "description": "ID of the project this token belongs to",
                        "examples": ["proj_A1cce6120E56e7Tu9ioP09Nhjk1"],
                        "type": "string"
                    },
                    "scope": {
                        "description": "Access scope of the token",
                        "$ref": "#/components/schemas/TokenScope"
                    },
                    "token": {
                        "description": "The actual token value (only returned on creation)",
                        "examples": ["sk_project..."],
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "project_id",
                    "scope",
                    "token",
                    "created_at"
                ],
                "type": "object"
            },
            "TokenScope": { "type": "string", "enum": ["project", "team"] },
            "TokenCreateParams": {
                "properties": {
                    "name": {
                        "description": "Name is the name of the token, which can be up to 64 characters long.",
                        "examples": ["My Token"],
                        "maxLength": 64,
                        "type": "string"
                    },
                    "project_id": {
                        "description": "ProjectId is required if the scope is set to \"project\".",
                        "examples": ["proj_A1cce6120E56e7Tu9ioP09Nhjk1"],
                        "type": "string"
                    },
                    "scope": {
                        "description": "Scope specifies the scope of the token, which must be either \"team\" or \"project\".",
                        "$ref": "#/components/schemas/TokenScope"
                    }
                },
                "required": ["scope"],
                "if": { "properties": { "scope": { "const": "project" } } },
                "then": { "required": ["project_id"] },
                "type": "object"
            },
            "TranscoderStatus": {
                "properties": {
                    "billable_time": {
                        "description": "Billable time in seconds",
                        "type": "integer"
                    },
                    "chunk_end_time": {
                        "description": "End time of the current chunk in seconds",
                        "type": "number"
                    },
                    "chunk_number": {
                        "description": "Number of the chunk being processed",
                        "type": "integer"
                    },
                    "chunk_start_time": {
                        "description": "Start time of the current chunk in seconds",
                        "type": "number"
                    },
                    "cpu_time": {
                        "description": "CPU time used for transcoding in seconds",
                        "type": "number"
                    },
                    "created_at": {
                        "description": "Timestamp when the status was created",
                        "type": "string",
                        "format": "date-time"
                    },
                    "error": {
                        "allOf": [
                            { "$ref": "#/components/schemas/ChunkifyError" }
                        ],
                        "description": "Error message if the transcoding failed"
                    },
                    "fps": {
                        "description": "Current frames per second being processed",
                        "type": "number"
                    },
                    "frame": {
                        "description": "Current frame number being processed",
                        "type": "integer"
                    },
                    "id": {
                        "description": "Unique identifier of the transcoder",
                        "type": "string"
                    },
                    "job_id": {
                        "description": "Unique identifier of the job",
                        "type": "string"
                    },
                    "out_time": {
                        "description": "Current output time in seconds",
                        "type": "integer"
                    },
                    "progress": {
                        "description": "Progress percentage of the transcoding operation (0-100)",
                        "type": "number"
                    },
                    "speed": {
                        "description": "Current processing speed multiplier",
                        "type": "number"
                    },
                    "status": {
                        "description": "Current status of the transcoder (starting, transcoding, finished, failed)",
                        "type": "string",
                        "enum": [
                            "starting",
                            "pending",
                            "transcoding",
                            "completed",
                            "failed",
                            "cancelled"
                        ],
                        "default": "pending"
                    },
                    "transcoder_instance_id": {
                        "description": "Unique identifier of the transcoder instance (generated by the transcoder)",
                        "type": "string"
                    },
                    "updated_at": {
                        "description": "Timestamp when the status was last updated",
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "type": "object",
                "required": [
                    "id",
                    "transcoder_instance_id",
                    "job_id",
                    "chunk_number",
                    "created_at",
                    "updated_at",
                    "progress",
                    "status",
                    "speed",
                    "fps",
                    "frame",
                    "cpu_time",
                    "out_time",
                    "billable_time",
                    "chunk_end_time",
                    "chunk_start_time"
                ]
            },
            "UploadResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Upload"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Upload": {
                "properties": {
                    "created_at": {
                        "description": "Timestamp when the upload was created",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "error": {
                        "allOf": [
                            { "$ref": "#/components/schemas/ChunkifyError" }
                        ],
                        "description": "Error message of the upload"
                    },
                    "expires_at": {
                        "description": "Timestamp when the upload will expire",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "id": {
                        "description": "Unique identifier of the upload",
                        "examples": ["upl_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "metadata": {
                        "description": "Additional metadata for the upload",
                        "type": "object",
                        "additionalProperties": { "type": "string" },
                        "examples": [{ "key1": "value1", "key2": "value2" }]
                    },
                    "source_id": {
                        "description": "SourceId is the id of the source that was created from the upload",
                        "examples": ["src_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "status": {
                        "description": "Current status of the upload",
                        "examples": ["waiting"],
                        "type": "string",
                        "enum": ["waiting", "completed", "failed", "expired"]
                    },
                    "updated_at": {
                        "description": "Timestamp when the upload was updated",
                        "examples": ["2025-01-01T12:00:00Z"],
                        "format": "date-time",
                        "type": "string"
                    },
                    "storage_id": {
                        "type": "string",
                        "description": "Resolved Storage selected when the Upload was created. Absent for historical uploads."
                    },
                    "completion_url": {
                        "type": "string",
                        "description": "Short-lived completion capability, returned only on creation. POST after a successful PUT before expires_at. Requires no API key. Repeated valid calls are idempotent."
                    },
                    "upload_url": {
                        "description": "Presigned PUT URL, returned only when creating an Upload session. Call completion_url after the PUT succeeds.",
                        "examples": ["https://s3.amazonaws.com/bucket/key"],
                        "type": "string"
                    }
                },
                "required": [
                    "created_at",
                    "expires_at",
                    "id",
                    "status",
                    "updated_at"
                ],
                "type": "object"
            },
            "UploadCreateStorageParams": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "id": { "type": "string", "minLength": 1, "description": "Storage belonging to this Project. Omit to use the Project default." },
                    "path": { "type": "string", "minLength": 1, "maxLength": 1024, "x-maxBytes": 1024, "description": "Exact object key including filename, required for customer Storage and forbidden for Chunkify Storage. The output base_prefix is not added. Existing keys may be overwritten." }
                }
            },
            "UploadCreateParams": {
                "properties": {
                    "storage": {
                        "$ref": "#/components/schemas/UploadCreateStorageParams",
                        "description": "Optional Storage override. Omit id to use the Project default. Customer-connected Storage requires path; Chunkify Storage generates its own path."
                    },
                    "metadata": {
                        "additionalProperties": { "type": "string" },
                        "description": "Metadata allows for additional information to be attached to the upload, with a maximum size of 2048 bytes.",
                        "examples": [{ "key": "value", "key2": "value2" }],
                        "type": "object"
                    },
                    "validity_timeout": {
                        "description": "Both the file PUT and completion POST must finish within this timeout in seconds",
                        "examples": [7200],
                        "maximum": 36000,
                        "minimum": 300,
                        "type": "integer",
                        "default": 7200
                    }
                },
                "type": "object"
            },
            "WebhookResponse": {
                "properties": {
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    },
                    "data": {
                        "description": "Data contains the response object",
                        "$ref": "#/components/schemas/Webhook"
                    }
                },
                "required": ["status", "data"],
                "type": "object"
            },
            "Webhook": {
                "properties": {
                    "enabled": {
                        "description": "Whether the webhook is currently enabled",
                        "examples": [true],
                        "type": "boolean"
                    },
                    "events": {
                        "description": "Array of event types this webhook subscribes to",
                        "examples": [["job.completed", "job.failed"]],
                        "items": {
                            "$ref": "#/components/schemas/WebhookEvent"
                        },
                        "type": "array"
                    },
                    "id": {
                        "description": "Unique identifier of the webhook",
                        "examples": ["wh_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "project_id": {
                        "description": "ID of the project this webhook belongs to",
                        "examples": ["proj_2G6MJiNz71bHQGNzGwKx5cJwPFS"],
                        "type": "string"
                    },
                    "url": {
                        "description": "URL where webhook events will be sent",
                        "examples": ["https://example.com/webhook"],
                        "type": "string"
                    }
                },
                "required": ["enabled", "events", "id", "project_id", "url"],
                "type": "object"
            },
            "WebhookEvent": {
                "type": "string",
                "enum": [
                    "job.completed",
                    "job.failed",
                    "job.cancelled",
                    "upload.completed",
                    "upload.failed",
                    "upload.expired"
                ]
            },
            "WebhookCreateParams": {
                "properties": {
                    "events": {
                        "description": "Events specifies the types of events that will trigger the webhook.",
                        "examples": [
                            "[\"job.completed\"&comma; \"job.failed\"]"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/WebhookEvent"
                        },
                        "type": "array"
                    },
                    "enabled": {
                        "description": "Enabled indicates whether the webhook is active.",
                        "examples": [true],
                        "type": "boolean"
                    },
                    "url": {
                        "description": "Url is the endpoint that will receive webhook notifications, which must be a valid HTTP URL.",
                        "examples": ["https://example.com/webhook"],
                        "maxLength": 256,
                        "type": "string"
                    }
                },
                "required": ["url"],
                "type": "object"
            },
            "WebhookListResponse": {
                "description": "Response containing the list of all webhooks for a project",
                "properties": {
                    "data": {
                        "description": "Data contains the webhook items",
                        "items": {
                            "$ref": "#/components/schemas/Webhook"
                        },
                        "type": "array"
                    },
                    "status": {
                        "description": "Status indicates the response status \"success\"",
                        "type": "string",
                        "const": "success"
                    }
                },
                "required": ["data", "status"],
                "type": "object"
            },
            "WebhookUpdateParams": {
                "properties": {
                    "events": {
                        "description": "Events specifies the types of events that will trigger the webhook.",
                        "examples": [
                            "[\"job.completed\"&comma; \"job.failed\"]"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/WebhookEvent"
                        },
                        "type": "array"
                    },
                    "enabled": {
                        "description": "Enabled indicates whether the webhook should be enabled or disabled.",
                        "examples": [true],
                        "type": "boolean"
                    }
                },
                "type": "object"
            }
        },
        "securitySchemes": {
            "ProjectAccessToken": {
                "description": "Enter the project access token with the `Bearer ` prefix, e.g. \"Bearer project_access_token\"",
                "scheme": "bearer",
                "type": "http"
            },
            "TeamAccessToken": {
                "description": "Enter the team access token with the `Bearer ` prefix, e.g. \"Bearer team_access_token\"",
                "scheme": "bearer",
                "type": "http"
            }
        }
    },
    "info": {
        "contact": {
            "email": "support@chunkify.dev",
            "name": "API Support",
            "url": "https://chunkify.dev/support"
        },
        "description": "API for Chunkify video processing service",
        "termsOfService": "https://chunkify.dev",
        "title": "Chunkify API",
        "version": "1.0"
    },
    "openapi": "3.1.0",
    "paths": {
        "/api/files": {
            "get": {
                "description": "Retrieve a list of files with optional filtering and pagination",
                "parameters": [
                    {
                        "description": "Filter by file ID",
                        "in": "query",
                        "name": "id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Pagination offset",
                        "in": "query",
                        "name": "offset",
                        "schema": {
                            "type": "integer",
                            "default": 0,
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Pagination limit (max 100)",
                        "in": "query",
                        "name": "limit",
                        "schema": {
                            "type": "integer",
                            "default": 100,
                            "maximum": 100,
                            "minimum": 1
                        }
                    },
                    {
                        "description": "Filter by exact duration",
                        "in": "query",
                        "name": "duration.eq",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration greater than or equal",
                        "in": "query",
                        "name": "duration.gte",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration greater than",
                        "in": "query",
                        "name": "duration.gt",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration less than or equal",
                        "in": "query",
                        "name": "duration.lte",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration less than",
                        "in": "query",
                        "name": "duration.lt",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by creation date greater than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.gte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by creation date less than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.lte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by exact width",
                        "in": "query",
                        "name": "width.eq",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by width greater than or equal",
                        "in": "query",
                        "name": "width.gte",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by width greater than",
                        "in": "query",
                        "name": "width.gt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by width less than or equal",
                        "in": "query",
                        "name": "width.lte",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by width less than",
                        "in": "query",
                        "name": "width.lt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by exact height",
                        "in": "query",
                        "name": "height.eq",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by height greater than or equal",
                        "in": "query",
                        "name": "height.gte",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by height greater than",
                        "in": "query",
                        "name": "height.gt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by height less than or equal",
                        "in": "query",
                        "name": "height.lte",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by height less than",
                        "in": "query",
                        "name": "height.lt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by exact file size",
                        "in": "query",
                        "name": "size.eq",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by file size greater than or equal",
                        "in": "query",
                        "name": "size.gte",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by file size greater than",
                        "in": "query",
                        "name": "size.gt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by file size less than or equal",
                        "in": "query",
                        "name": "size.lte",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by file size less than",
                        "in": "query",
                        "name": "size.lt",
                        "schema": { "type": "integer" }
                    },
                    {
                        "description": "Filter by audio codec",
                        "in": "query",
                        "name": "audio_codec",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by video codec",
                        "in": "query",
                        "name": "video_codec",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Sort by creation date (asc/desc)",
                        "in": "query",
                        "name": "created.sort",
                        "schema": {
                            "type": "string",
                            "default": "asc",
                            "enum": ["asc", "desc"]
                        }
                    },
                    {
                        "description": "Filter by job ID",
                        "in": "query",
                        "name": "job_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by mime type",
                        "in": "query",
                        "name": "mime_type",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by storage ID",
                        "in": "query",
                        "name": "storage_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by path",
                        "in": "query",
                        "name": "path.eq",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by path (case insensitive)",
                        "in": "query",
                        "name": "path.ilike",
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FileListResponse"
                                }
                            }
                        },
                        "description": "Successful response"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all files",
                "tags": ["Files"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Automatically fetches more pages as needed.\nfor await (const file of client.files.list()) {\n  console.log(file.id);\n}"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Automatically fetches more pages as needed.\nfor file in client.files.list():\n   print(file.id)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Automatically fetches more pages as needed.\nforeach ($client->files->list()->pagingEachItem() as $file) {\n    var_dump($file->id);\n}"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  page, err := client.Files.List(context.TODO(), chunkify.FileListParams{})\n  if err != nil {\n    panic(err.Error())\n  }\n\n  // Loop through the pages and print the file IDs\n  for page != nil {\n    for _, file := range page.Data {\n      fmt.Printf(\"%+v\\n\", file.ID)\n    }\n    page, err = page.GetNextPage()\n    if err != nil {\n      panic(err.Error())\n    }\n  }\n}\n"
                    }
                ],
                "operationId": "listFiles"
            }
        },
        "/api/files/{fileId}": {
            "delete": {
                "description": "Delete a file. It will fail if there are processing jobs using this file.",
                "parameters": [
                    {
                        "description": "File id",
                        "in": "path",
                        "name": "fileId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The file was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a file",
                "tags": ["Files"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.files.delete('fileId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.files.delete(\n    \"fileId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->files->delete('fileId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Files.Delete(context.TODO(), \"fileId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteFile"
            },
            "get": {
                "description": "Retrieve details of a specific file by its ID, including metadata, media properties, and associated jobs.",
                "parameters": [
                    {
                        "description": "File ID",
                        "in": "path",
                        "name": "fileId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/FileResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single file",
                "tags": ["Files"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst file = await client.files.retrieve('fileId');\n\nconsole.log(file);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nfile = client.files.retrieve(\n    \"fileId\",\n)\nprint(file)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$file = $client->files->retrieve('fileId');\n\nvar_dump($file);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  file, err := client.Files.Get(context.TODO(), \"fileId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", file)\n}\n"
                    }
                ],
                "operationId": "getFile"
            }
        },
        "/api/jobs": {
            "get": {
                "description": "Retrieve a list of jobs with optional filtering and pagination",
                "parameters": [
                    {
                        "description": "Filter by job ID",
                        "in": "query",
                        "name": "id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Pagination offset",
                        "in": "query",
                        "name": "offset",
                        "schema": {
                            "type": "integer",
                            "default": 0,
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Pagination limit",
                        "in": "query",
                        "name": "limit",
                        "schema": {
                            "type": "integer",
                            "default": 100,
                            "maximum": 100,
                            "minimum": 1
                        }
                    },
                    {
                        "description": "Filter by creation date greater than or equal",
                        "in": "query",
                        "name": "created.gte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by creation date less than or equal",
                        "in": "query",
                        "name": "created.lte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by source ID",
                        "in": "query",
                        "name": "source_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by hls manifest ID",
                        "in": "query",
                        "name": "hls_manifest_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by job status",
                        "in": "query",
                        "name": "status",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "completed",
                                "processing",
                                "failed",
                                "cancelled",
                                "queued",
                                "pending"
                            ]
                        }
                    },
                    {
                        "description": "Filter by format id",
                        "in": "query",
                        "name": "format_id",
                        "schema": { "$ref": "#/components/schemas/JobFormatId" }
                    },
                    {
                        "description": "Filter by metadata",
                        "in": "query",
                        "name": "metadata",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "array",
                                "items": {
                                    "examples": ["key1:value1", "key2:value2"],
                                    "type": "string",
                                    "pattern": "^[^:]+:[^:]+$"
                                }
                            }
                        }
                    },
                    {
                        "description": "Sort by creation date (asc/desc)",
                        "in": "query",
                        "name": "created.sort",
                        "schema": {
                            "type": "string",
                            "enum": ["asc", "desc"],
                            "default": "asc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all jobs",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Automatically fetches more pages as needed.\nfor await (const job of client.jobs.list()) {\n  console.log(job.id);\n}"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Automatically fetches more pages as needed.\nfor job in client.jobs.list():\n   print(job.id)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Automatically fetches more pages as needed.\nforeach ($client->jobs->list()->pagingEachItem() as $job) {\n    var_dump($job->id);\n}"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  page, err := client.Jobs.List(context.TODO(), chunkify.JobListParams{})\n  if err != nil {\n    panic(err.Error())\n  }\n\n  // Loop through the pages and print the job IDs\n  for page != nil {\n    for _, job := range page.Data {\n      fmt.Printf(\"%+v\\n\", job.ID)\n    }\n    page, err = page.GetNextPage()\n    if err != nil {\n      panic(err.Error())\n    }\n  }\n}\n"
                    }
                ],
                "operationId": "listJobs"
            },
            "post": {
                "description": "Create a new video processing job with specified parameters. The job is created with pending status and waits for scheduler admission before processing. Pending jobs are admitted oldest first across all projects in the team as vCPU capacity becomes available.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobCreateParams"
                            }
                        }
                    },
                    "description": "Job creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobResponse"
                                }
                            }
                        },
                        "description": "The job was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        },
                        "description": "Unauthorized to perform this action: insufficient funds or the job CPU requirement exceeds the plan limit"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded or the team's pending job limit has been reached"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a new job",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Transcode using h264 format with 720p resolution\nconst job = await client.jobs.create({\n  source_id: 'src_UioP9I876hjKlNBH78ILp0mo56t',\n  format: {\n    id: 'mp4_h264',\n    height: 720,\n  }\n});\n\nconsole.log(job);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Transcode using h264 format with 720p resolution\njob = client.jobs.create(\n    source_id=\"src_UioP9I876hjKlNBH78ILp0mo56t\",\n    format={\n        \"id\": \"mp4_h264\",\n        \"height\": 720,\n    }\n)\n\nprint(job)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Transcode using H.264 at 720p resolution.\n$job = $client->jobs->create(\n    format: ['id' => 'mp4_h264', 'height' => 720],\n    sourceID: 'src_UioP9I876hjKlNBH78ILp0mo56t',\n);\n\nvar_dump($job);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n\n  // Transcode using h264 format with 720p resolution\n  jobParams := chunkify.JobNewParams{\n    SourceID: \"src_UioP9I876hjKlNBH78ILp0mo56t\",\n    Format: chunkify.JobNewParamsFormatUnion{\n      OfMP4H264: &chunkify.MP4H264Param{\n        Height: chunkify.Int(720),\n      },\n    },\n  }\n\n  job, err := client.Jobs.New(context.TODO(), jobParams)\n  if err != nil {\n    panic(err.Error())\n  }"
                    }
                ],
                "operationId": "createJob"
            }
        },
        "/api/jobs/{jobId}": {
            "delete": {
                "description": "Delete a job.",
                "parameters": [
                    {
                        "description": "Job id",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The job was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a job",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.jobs.delete('jobId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.jobs.delete(\n    \"jobId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->jobs->delete('jobId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Jobs.Delete(context.TODO(), \"jobId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteJob"
            },
            "get": {
                "description": "Retrieve details of a specific job",
                "parameters": [
                    {
                        "description": "Job ID",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single job",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst job = await client.jobs.retrieve('jobId');\n\nconsole.log(job);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\njob = client.jobs.retrieve(\n    \"jobId\",\n)\nprint(job)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$job = $client->jobs->retrieve('jobId');\n\nvar_dump($job);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  job, err := client.Jobs.Get(context.TODO(), \"jobId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", job)\n}\n"
                    }
                ],
                "operationId": "getJob"
            }
        },
        "/api/jobs/{jobId}/cancel": {
            "post": {
                "description": "Cancel a job.",
                "parameters": [
                    {
                        "description": "Job id",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The job was cancelled successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Cancel a job",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.jobs.cancel('jobId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.jobs.cancel(\n    \"jobId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->jobs->cancel('jobId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Jobs.Cancel(context.TODO(), \"jobId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "cancelJob"
            }
        },
        "/api/jobs/{jobId}/files": {
            "get": {
                "description": "Retrieve all files associated with a specific job",
                "parameters": [
                    {
                        "description": "Job ID",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobFilesListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get job files",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst files = await client.jobs.files.list('jobId');\n\nconsole.log(files);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nfiles = client.jobs.files.list(\n    \"jobId\",\n)\nprint(files)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$files = $client->jobs->files->list('jobId');\n\nvar_dump($files);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  files, err := client.Jobs.Files.List(context.TODO(), \"jobId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", files)\n}\n"
                    }
                ],
                "operationId": "getJobFiles"
            }
        },
        "/api/jobs/{jobId}/logs": {
            "get": {
                "description": "Retrieve logs for a specific job, either from the transcoder or manager service",
                "parameters": [
                    {
                        "description": "Job ID",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Service type (transcoder or manager)",
                        "in": "query",
                        "name": "service",
                        "required": true,
                        "schema": {
                            "enum": ["transcoder", "manager"],
                            "type": "string"
                        }
                    },
                    {
                        "description": "Transcoder ID (required if service is transcoder)",
                        "in": "query",
                        "name": "transcoder_id",
                        "schema": { "type": "integer" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobLogsListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get job logs",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst logs = await client.jobs.logs.list('jobId', { service: 'transcoder' });\n\nconsole.log(logs);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nlogs = client.jobs.logs.list(\n    job_id=\"jobId\",\n    service=\"transcoder\",\n)\nprint(logs)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$logs = $client->jobs->logs->list(\n    'jobId',\n    service: 'transcoder',\n);\n\nvar_dump($logs);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  logs, err := client.Jobs.Logs.List(\n    context.TODO(),\n    \"jobId\",\n    chunkify.JobLogListParams{\n      Service: chunkify.JobLogListParamsServiceTranscoder,\n    },\n  )\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", logs)\n}\n"
                    }
                ],
                "operationId": "getJobLogs"
            }
        },
        "/api/jobs/{jobId}/transcoders": {
            "get": {
                "description": "Retrieve all the transcoders statuses for a specific job",
                "parameters": [
                    {
                        "description": "Job ID to get status for",
                        "in": "path",
                        "name": "jobId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobTranscodersListResponse"
                                }
                            }
                        },
                        "description": "Transcoders statuses retrieved successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get job transcoders",
                "tags": ["Jobs"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst transcoders = await client.jobs.transcoders.list('jobId');\n\nconsole.log(transcoders);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\ntranscoders = client.jobs.transcoders.list(\n    \"jobId\",\n)\nprint(transcoders)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$transcoders = $client->jobs->transcoders->list('jobId');\n\nvar_dump($transcoders);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  transcoders, err := client.Jobs.Transcoders.List(context.TODO(), \"jobId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", transcoders)\n}\n"
                    }
                ],
                "operationId": "getJobTranscoders"
            }
        },
        "/api/notifications": {
            "get": {
                "description": "Retrieve a list of notifications with optional filtering and pagination",
                "parameters": [
                    {
                        "description": "Filter by object ID",
                        "in": "query",
                        "name": "object_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by webhook ID",
                        "in": "query",
                        "name": "webhook_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by events",
                        "in": "query",
                        "name": "events",
                        "schema": {
                            "items": {
                                "$ref": "#/components/schemas/WebhookEvent"
                            },
                            "type": "array"
                        }
                    },
                    {
                        "description": "Filter by exact response status code",
                        "in": "query",
                        "name": "response_status_code.eq",
                        "schema": {
                            "type": "integer",
                            "minimum": 100,
                            "maximum": 599
                        }
                    },
                    {
                        "description": "Filter by response status code greater than or equal",
                        "in": "query",
                        "name": "response_status_code.gte",
                        "schema": {
                            "type": "integer",
                            "minimum": 100,
                            "maximum": 599
                        }
                    },
                    {
                        "description": "Filter by response status code less than or equal",
                        "in": "query",
                        "name": "response_status_code.lte",
                        "schema": {
                            "type": "integer",
                            "minimum": 100,
                            "maximum": 599
                        }
                    },
                    {
                        "description": "Pagination offset",
                        "in": "query",
                        "name": "offset",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "default": 0
                        }
                    },
                    {
                        "description": "Pagination limit (max 100)",
                        "in": "query",
                        "name": "limit",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 100
                        }
                    },
                    {
                        "description": "Filter by creation date greater than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.gte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by creation date less than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.lte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Sort by creation date (asc/desc)",
                        "in": "query",
                        "name": "created.sort",
                        "schema": {
                            "type": "string",
                            "enum": ["asc", "desc"],
                            "default": "asc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all notifications",
                "tags": ["Notifications"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Automatically fetches more pages as needed.\nfor await (const notification of client.notifications.list()) {\n  console.log(notification.id);\n}"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Automatically fetches more pages as needed.\nfor notification in client.notifications.list():\n   print(notification.id)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Automatically fetches more pages as needed.\nforeach ($client->notifications->list()->pagingEachItem() as $notification) {\n    var_dump($notification->id);\n}"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  page, err := client.Notifications.List(\n    context.TODO(),\n    chunkify.NotificationListParams{},\n  )\n  if err != nil {\n    panic(err.Error())\n  }\n\n  // Loop through the pages and print the notifications IDs\n  for page != nil {\n    for _, notification := range page.Data {\n      fmt.Printf(\"%+v\\n\", notification.ID)\n    }\n    page, err = page.GetNextPage()\n    if err != nil {\n      panic(err.Error())\n    }\n  }\n}\n"
                    }
                ],
                "operationId": "listNotifications"
            },
            "post": {
                "description": "Create a new notification for a job event",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NotificationCreateParams"
                            }
                        }
                    },
                    "description": "Notification creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationResponse"
                                }
                            }
                        },
                        "description": "The notification was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a notification",
                "tags": ["Notifications"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst notification = await client.notifications.create({\n  event: 'job.completed',\n  object_id: 'job_A1cce6120E56e7Tu9ioP09Nhjk9',\n  webhook_id: 'wh_A1cce6120E56e7Tu9ioP09Nhjk9',\n});\n\nconsole.log(notification);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nnotification = client.notifications.create(\n    event=\"job.completed\",\n    object_id=\"job_A1cce6120E56e7Tu9ioP09Nhjk9\",\n    webhook_id=\"wh_A1cce6120E56e7Tu9ioP09Nhjk9\",\n)\nprint(notification)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$notification = $client->notifications->create(\n    event: 'job.completed',\n    objectID: 'job_A1cce6120E56e7Tu9ioP09Nhjk9',\n    webhookID: 'wh_A1cce6120E56e7Tu9ioP09Nhjk9',\n);\n\nvar_dump($notification);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  notification, err := client.Notifications.New(context.TODO(), chunkify.NotificationNewParams{\n    Event: chunkify.NotificationNewParamsEventJobCompleted,\n    ObjectID: \"job_A1cce6120E56e7Tu9ioP09Nhjk9\",\n    WebhookID: \"wh_A1cce6120E56e7Tu9ioP09Nhjk9\",\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", notification)\n}\n"
                    }
                ],
                "operationId": "createNotification"
            }
        },
        "/api/notifications/{notificationId}": {
            "delete": {
                "description": "Delete a notification.",
                "parameters": [
                    {
                        "description": "Notification id",
                        "in": "path",
                        "name": "notificationId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The notification was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a notification",
                "tags": ["Notifications"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.notifications.delete('notificationId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.notifications.delete(\n    \"notificationId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->notifications->delete('notificationId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Notifications.Delete(context.TODO(), \"notificationId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteNotification"
            },
            "get": {
                "description": "Retrieve details of a specific notification",
                "parameters": [
                    {
                        "description": "Notification ID",
                        "in": "path",
                        "name": "notificationId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single notification",
                "tags": ["Notifications"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst notification = await client.notifications.retrieve('notificationId');\n\nconsole.log(notification);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nnotification = client.notifications.retrieve(\n    \"notificationId\",\n)\nprint(notification)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$notification = $client->notifications->retrieve('notificationId');\n\nvar_dump($notification);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  notification, err := client.Notifications.Get(context.TODO(), \"notificationId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", notification)\n}\n"
                    }
                ],
                "operationId": "getNotification"
            }
        },
        "/api/projects": {
            "get": {
                "description": "Retrieve a list of all projects for a team",
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectListResponse"
                                }
                            }
                        },
                        "description": "Projects retrieved successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Get all projects",
                "tags": ["Projects"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nconst projects = await client.projects.list();\n\nconsole.log(projects);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nprojects = client.projects.list()\nprint(projects)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$projects = $client->projects->list();\n\nvar_dump($projects);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  projects, err := client.Projects.List(context.TODO())\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", projects)\n}\n"
                    }
                ],
                "operationId": "listProjects"
            },
            "post": {
                "description": "Create a new project with the specified name. The project will be created with default Chunkify storage settings.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ProjectCreateParams"
                            }
                        }
                    },
                    "description": "Project creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectResponse"
                                }
                            }
                        },
                        "description": "The project was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        },
                        "description": "Unauthorized to perform this action: number of projects reached the limit"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Create a new project",
                "tags": ["Projects"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nconst project = await client.projects.create({ name: 'My Project' });\n\nconsole.log(project);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nproject = client.projects.create(\n    name=\"My Project\",\n)\nprint(project)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$project = $client->projects->create(name: 'My Project');\n\nvar_dump($project);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  project, err := client.Projects.New(context.TODO(), chunkify.ProjectNewParams{\n    Name: \"My Project\",\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", project)\n}\n"
                    }
                ],
                "operationId": "createProject"
            }
        },
        "/api/projects/{projectId}": {
            "delete": {
                "description": "Delete a project and revoke all associated access tokens. Only team owners can delete projects.",
                "parameters": [
                    {
                        "description": "Project Id",
                        "in": "path",
                        "name": "projectId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The project was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Delete a project",
                "tags": ["Projects"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nawait client.projects.delete('projectId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nclient.projects.delete(\n    \"projectId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$client->projects->delete('projectId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  err := client.Projects.Delete(context.TODO(), \"projectId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteProject"
            },
            "get": {
                "description": "Retrieve details of a specific project by its slug",
                "parameters": [
                    {
                        "description": "Project Id",
                        "in": "path",
                        "name": "projectId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProjectResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Get a single project",
                "tags": ["Projects"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nconst project = await client.projects.retrieve('projectId');\n\nconsole.log(project);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nproject = client.projects.retrieve(\n    \"projectId\",\n)\nprint(project)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$project = $client->projects->retrieve('projectId');\n\nvar_dump($project);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  project, err := client.Projects.Get(context.TODO(), \"projectId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", project)\n}\n"
                    }
                ],
                "operationId": "getProject"
            },
            "patch": {
                "description": "Update a project's name or storage settings. Only team owners can update projects.",
                "parameters": [
                    {
                        "description": "Project Id",
                        "in": "path",
                        "name": "projectId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ProjectUpdateParams"
                            }
                        }
                    },
                    "description": "Project update parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "204": {
                        "description": "The project was updated successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Update a project",
                "tags": ["Projects"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nawait client.projects.update('project_id', { name: 'New Name' });"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nclient.projects.update(\n    project_id=\"projectId\",\n    name=\"New Name\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$client->projects->update('projectId', name: 'New Name');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  err := client.Projects.Update(\n    context.TODO(),\n    \"projectId\",\n    chunkify.ProjectUpdateParams{\n        Name: chunkify.String(\"New Name\"),\n    },\n  )\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "updateProject"
            }
        },
        "/api/sources": {
            "get": {
                "description": "Retrieve a list of all sources with optional filtering and pagination. Supports filtering by various media properties like duration, dimensions, codecs, etc.",
                "parameters": [
                    {
                        "description": "Filter by source ID",
                        "in": "query",
                        "name": "id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Pagination offset",
                        "in": "query",
                        "name": "offset",
                        "schema": {
                            "type": "integer",
                            "default": 0,
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Pagination limit (max 100)",
                        "in": "query",
                        "name": "limit",
                        "schema": {
                            "type": "integer",
                            "default": 100,
                            "maximum": 100,
                            "minimum": 1
                        }
                    },
                    {
                        "description": "Filter by exact duration",
                        "in": "query",
                        "name": "duration.eq",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration greater than or equal",
                        "in": "query",
                        "name": "duration.gte",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration greater than",
                        "in": "query",
                        "name": "duration.gt",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration less than or equal",
                        "in": "query",
                        "name": "duration.lte",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by duration less than",
                        "in": "query",
                        "name": "duration.lt",
                        "schema": { "type": "number", "minimum": 0 }
                    },
                    {
                        "description": "Filter by creation date greater than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.gte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by creation date less than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.lte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by exact width",
                        "in": "query",
                        "name": "width.eq",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by width greater than or equal",
                        "in": "query",
                        "name": "width.gte",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by width greater than",
                        "in": "query",
                        "name": "width.gt",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by width less than or equal",
                        "in": "query",
                        "name": "width.lte",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by width less than",
                        "in": "query",
                        "name": "width.lt",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by exact height",
                        "in": "query",
                        "name": "height.eq",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by height greater than or equal",
                        "in": "query",
                        "name": "height.gte",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by height greater than",
                        "in": "query",
                        "name": "height.gt",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by height less than or equal",
                        "in": "query",
                        "name": "height.lte",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by height less than",
                        "in": "query",
                        "name": "height.lt",
                        "schema": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 8192
                        }
                    },
                    {
                        "description": "Filter by exact file size",
                        "in": "query",
                        "name": "size.eq",
                        "schema": { "type": "integer", "minimum": 0 }
                    },
                    {
                        "description": "Filter by file size greater than or equal",
                        "in": "query",
                        "name": "size.gte",
                        "schema": { "type": "integer", "minimum": 0 }
                    },
                    {
                        "description": "Filter by file size greater than",
                        "in": "query",
                        "name": "size.gt",
                        "schema": { "type": "integer", "minimum": 0 }
                    },
                    {
                        "description": "Filter by file size less than or equal",
                        "in": "query",
                        "name": "size.lte",
                        "schema": { "type": "integer", "minimum": 0 }
                    },
                    {
                        "description": "Filter by file size less than",
                        "in": "query",
                        "name": "size.lt",
                        "schema": { "type": "integer", "minimum": 0 }
                    },
                    {
                        "description": "Filter by audio codec",
                        "in": "query",
                        "name": "audio_codec",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by video codec",
                        "in": "query",
                        "name": "video_codec",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by device (apple/android)",
                        "in": "query",
                        "name": "device",
                        "schema": {
                            "type": "string",
                            "enum": ["apple", "android", "unknown"]
                        }
                    },
                    {
                        "description": "Sort by creation date (asc/desc)",
                        "in": "query",
                        "name": "created.sort",
                        "schema": {
                            "type": "string",
                            "enum": ["asc", "desc"],
                            "default": "asc"
                        }
                    },
                    {
                        "description": "Filter by metadata",
                        "in": "query",
                        "name": "metadata",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "array",
                                "items": {
                                    "examples": ["key1:value1", "key2:value2"],
                                    "type": "string",
                                    "pattern": "^[^:]+:[^:]+$"
                                }
                            }
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SourceListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all sources",
                "tags": ["Sources"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Automatically fetches more pages as needed.\nfor await (const source of client.sources.list()) {\n  console.log(source.id);\n}"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Automatically fetches more pages as needed.\nfor source in client.sources.list():\n   print(source.id)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Automatically fetches more pages as needed.\nforeach ($client->sources->list()->pagingEachItem() as $source) {\n    var_dump($source->id);\n}"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  page, err := client.Sources.List(context.TODO(), chunkify.SourceListParams{})\n  if err != nil {\n    panic(err.Error())\n  }\n\n  // Loop through the pages and print the sources IDs\n  for page != nil {\n    for _, source := range page.Data {\n      fmt.Printf(\"%+v\\n\", source.ID)\n    }\n    page, err = page.GetNextPage()\n    if err != nil {\n      panic(err.Error())\n    }\n  }\n}\n"
                    }
                ],
                "operationId": "listSources"
            },
            "post": {
                "description": "Create a new source from a media URL. The source will be analyzed to extract metadata and generate a thumbnail. The source will be automatically deleted after the data retention period.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SourceCreateParams"
                            }
                        }
                    },
                    "description": "Source creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SourceResponse"
                                }
                            }
                        },
                        "description": "Created"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        },
                        "description": "Unauthorized to perform this action: insufficient funds"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a new source",
                "tags": ["Sources"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst source = await client.sources.create({ url: 'https://example.com/video.mp4' });\n\nconsole.log(source);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nsource = client.sources.create(\n    url=\"https://example.com/video.mp4\",\n)\nprint(source)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$source = $client->sources->create(\n    url: 'https://example.com/video.mp4',\n);\n\nvar_dump($source);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  source, err := client.Sources.New(context.TODO(), chunkify.SourceNewParams{\n    URL: \"https://example.com/video.mp4\",\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", source)\n}\n"
                    }
                ],
                "operationId": "createSource"
            }
        },
        "/api/sources/{sourceId}": {
            "delete": {
                "description": "Delete a source. It will fail if there are processing jobs using this source.",
                "parameters": [
                    {
                        "description": "Source id",
                        "in": "path",
                        "name": "sourceId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The source was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a source",
                "tags": ["Sources"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.sources.delete('sourceId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.sources.delete(\n    \"sourceId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->sources->delete('sourceId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Sources.Delete(context.TODO(), \"sourceId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteSource"
            },
            "get": {
                "description": "Retrieve details of a specific source by its ID, including metadata, media properties, and associated jobs.",
                "parameters": [
                    {
                        "description": "Source ID",
                        "in": "path",
                        "name": "sourceId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SourceResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single source",
                "tags": ["Sources"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst source = await client.sources.retrieve('sourceId');\n\nconsole.log(source);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nsource = client.sources.retrieve(\n    \"sourceId\",\n)\nprint(source)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$source = $client->sources->retrieve('sourceId');\n\nvar_dump($source);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  source, err := client.Sources.Get(context.TODO(), \"sourceId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", source)\n}\n"
                    }
                ],
                "operationId": "getSource"
            }
        },
        "/api/storages": {
            "get": {
                "description": "Retrieve a list of all storage configurations for the current project.",
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StorageListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all storages",
                "tags": ["Storages"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst storages = await client.storages.list();\n\nconsole.log(storages);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nstorages = client.storages.list()\nprint(storages)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$storages = $client->storages->list();\n\nvar_dump($storages);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  storages, err := client.Storages.List(context.TODO())\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", storages)\n}\n"
                    }
                ],
                "operationId": "listStorages"
            },
            "post": {
                "description": "Create a new storage configuration for cloud storage providers like AWS S3, Cloudflare R2, etc. The storage credentials will be validated before saving.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/StorageCreateParams"
                            }
                        }
                    },
                    "description": "Storage creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StorageResponse"
                                }
                            }
                        },
                        "description": "The storage was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a new storage",
                "tags": ["Storages"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst storage = await client.storages.create({\n  storage: {\n    access_key_id: '1234567890',\n    bucket: 'my-bucket',\n    provider: 'aws',\n    region: 'us-east-1',\n    secret_access_key: '1234567890',\n    base_prefix: 'chunkify/',\n  },\n});\n\nconsole.log(storage);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nstorage = client.storages.create(\n    storage={\n        \"access_key_id\": \"1234567890\",\n        \"bucket\": \"my-bucket\",\n        \"provider\": \"aws\",\n        \"region\": \"us-east-1\",\n        \"secret_access_key\": \"1234567890\",\n        \"base_prefix\": \"chunkify/\",\n    },\n)\nprint(storage)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$storage = $client->storages->create(\n    storage: [\n        'accessKeyID' => '1234567890',\n        'bucket' => 'my-bucket',\n        'provider' => 'aws',\n        'region' => 'us-east-1',\n        'secretAccessKey' => '1234567890',\n        'basePrefix' => 'chunkify/',\n    ],\n);\n\nvar_dump($storage);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  storage, err := client.Storages.New(context.TODO(), chunkify.StorageNewParams{\n    OfAws: &chunkify.StorageNewParamsStorageAws{\n      AccessKeyID: \"1234567890\",\n      Bucket: \"my-bucket\",\n      Region: \"us-east-1\",\n      SecretAccessKey: \"1234567890\",\n      BasePrefix: \"chunkify/\",\n    },\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", storage)\n}\n"
                    }
                ],
                "operationId": "createStorage"
            }
        },
        "/api/storages/{storageId}": {
            "patch": {
                "description": "Update customer-owned storage settings. Prefix changes apply to final outputs that have not been uploaded yet. Existing files keep their stored object keys.",
                "parameters": [
                    {
                        "description": "Storage id",
                        "in": "path",
                        "name": "storageId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/StorageUpdateParams"
                            }
                        }
                    },
                    "description": "Mutable customer storage settings",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "204": {
                        "description": "The storage was updated successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid settings or Chunkify-managed storage"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        },
                        "description": "Only a team owner can update storage delivery settings"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Storage not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Update storage settings",
                "tags": ["Storages"],
                "operationId": "updateStorage"
            },
            "delete": {
                "description": "Delete a storage configuration. The storage must not be currently attached to the project.",
                "parameters": [
                    {
                        "description": "Storage id",
                        "in": "path",
                        "name": "storageId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The storage was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a storage",
                "tags": ["Storages"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.storages.delete('storageId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.storages.delete(\n    \"storageId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->storages->delete('storageId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Storages.Delete(context.TODO(), \"storageId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteStorage"
            },
            "get": {
                "description": "Retrieve details of a specific storage configuration by its id.",
                "parameters": [
                    {
                        "description": "Storage id",
                        "in": "path",
                        "name": "storageId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StorageResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single storage",
                "tags": ["Storages"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst storage = await client.storages.retrieve('storageId');\n\nconsole.log(storage);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nstorage = client.storages.retrieve(\n    \"storageId\",\n)\nprint(storage)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$storage = $client->storages->retrieve('storageId');\n\nvar_dump($storage);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  storage, err := client.Storages.Get(context.TODO(), \"storageId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", storage)\n}\n"
                    }
                ],
                "operationId": "getStorage"
            }
        },
        "/api/tokens": {
            "post": {
                "description": "Create a new access token for either account-wide or project-specific access. Project tokens require a valid project slug.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TokenCreateParams"
                            }
                        }
                    },
                    "description": "Token creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TokenResponse"
                                }
                            }
                        },
                        "description": "The token was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Create a new access token",
                "tags": ["Tokens"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nconst token = await client.tokens.create({ scope: 'project' });\n\nconsole.log(token);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\ntoken = client.tokens.create(\n    scope=\"project\",\n)\nprint(token)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$token = $client->tokens->create(scope: 'project');\n\nvar_dump($token);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  token, err := client.Tokens.New(context.TODO(), chunkify.TokenNewParams{\n    Scope: chunkify.TokenNewParamsScopeProject,\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", token)\n}\n"
                    }
                ],
                "operationId": "createToken"
            },
            "get": {
                "description": "Retrieve a list of all API tokens for your account, including both team-scoped and project-scoped tokens. For each token, the response includes its name, scope, creation date, and usage statistics. The token values are not included in the response for security reasons.",
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/TokenListResponse"
                                }
                            }
                        },
                        "description": "Tokens retrieved successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "List all API tokens",
                "tags": ["Tokens"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nconst tokens = await client.tokens.list();\n\nconsole.log(tokens);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\ntokens = client.tokens.list()\nprint(tokens)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$tokens = $client->tokens->list();\n\nvar_dump($tokens);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  tokens, err := client.Tokens.List(context.TODO())\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", tokens)\n}\n"
                    }
                ],
                "operationId": "listTokens"
            }
        },
        "/api/tokens/{tokenId}": {
            "delete": {
                "description": "Revoke an access token by its ID. This action is irreversible and will immediately invalidate the token.",
                "parameters": [
                    {
                        "description": "Token ID",
                        "in": "path",
                        "name": "tokenId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Success response with no content"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "TeamAccessToken": [] }],
                "summary": "Revoke an access token",
                "tags": ["Tokens"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  teamAccessToken: 'My Team Access Token',\n});\n\nawait client.tokens.revoke('tokenId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    team_access_token=\"My Team Access Token\",\n)\nclient.tokens.revoke(\n    \"tokenId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    teamAccessToken: 'My Team Access Token',\n);\n\n$client->tokens->revoke('tokenId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithTeamAccessToken(\"My Team Access Token\"),\n  )\n  err := client.Tokens.Revoke(context.TODO(), \"tokenId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteToken"
            }
        },
        "/api/uploads": {
            "get": {
                "description": "Retrieve a list of all uploads with optional filtering and pagination.",
                "parameters": [
                    {
                        "description": "Filter by upload ID",
                        "in": "query",
                        "name": "id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Pagination offset",
                        "in": "query",
                        "name": "offset",
                        "schema": {
                            "type": "integer",
                            "default": 0,
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Pagination limit (max 100)",
                        "in": "query",
                        "name": "limit",
                        "schema": {
                            "type": "integer",
                            "default": 100,
                            "maximum": 100,
                            "minimum": 1
                        }
                    },
                    {
                        "description": "Filter by source ID",
                        "in": "query",
                        "name": "source_id",
                        "schema": { "type": "string" }
                    },
                    {
                        "description": "Filter by status (pending, completed, error)",
                        "in": "query",
                        "name": "status",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "waiting",
                                "completed",
                                "failed",
                                "expired"
                            ]
                        }
                    },
                    {
                        "description": "Filter by creation date greater than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.gte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Filter by creation date less than or equal (UNIX epoch time)",
                        "in": "query",
                        "name": "created.lte",
                        "schema": {
                            "type": "integer",
                            "format": "epoch",
                            "examples": ["1764238404"],
                            "minimum": 0
                        }
                    },
                    {
                        "description": "Sort by creation date (asc/desc)",
                        "in": "query",
                        "name": "created.sort",
                        "schema": {
                            "type": "string",
                            "enum": ["asc", "desc"],
                            "default": "asc"
                        }
                    },
                    {
                        "description": "Filter by metadata",
                        "in": "query",
                        "name": "metadata",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "array",
                                "items": {
                                    "examples": ["key1:value1", "key2:value2"],
                                    "type": "string",
                                    "pattern": "^[^:]+:[^:]+$"
                                }
                            }
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UploadListResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all uploads",
                "tags": ["Uploads"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\n// Automatically fetches more pages as needed.\nfor await (const upload of client.uploads.list()) {\n  console.log(upload.id);\n}"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\n\n# Automatically fetches more pages as needed.\nfor upload in client.upoads.list():\n   print(upload.id)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n// Automatically fetches more pages as needed.\nforeach ($client->uploads->list()->pagingEachItem() as $upload) {\n    var_dump($upload->id);\n}"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  page, err := client.Uploads.List(context.TODO(), chunkify.UploadListParams{})\n  if err != nil {\n    panic(err.Error())\n  }\n\n  // Loop through the pages and print the upload IDs\n  for page != nil {\n    for _, upload := range page.Data {\n      fmt.Printf(\"%+v\\n\", upload.ID)\n    }\n    page, err = page.GetNextPage()\n    if err != nil {\n      panic(err.Error())\n    }\n  }\n}\n"
                    }
                ],
                "operationId": "listUploads"
            },
            "post": {
                "description": "Create a new upload with the specified name.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UploadCreateParams"
                            }
                        }
                    },
                    "description": "Upload creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UploadResponse"
                                }
                            }
                        },
                        "description": "The upload was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "403": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        },
                        "description": "Unauthorized to perform this action: insufficient funds"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a new upload",
                "tags": ["Uploads"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst upload = await client.uploads.create();\n\nconsole.log(upload);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nupload = client.uploads.create()\nprint(upload)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$upload = $client->uploads->create();\n\nvar_dump($upload);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  upload, err := client.Uploads.New(context.TODO(), chunkify.UploadNewParams{\n\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", upload)\n}\n"
                    }
                ],
                "operationId": "createUpload"
            }
        },
        "/api/uploads/completion/{token}": {
            "post": {
                "operationId": "completeUpload",
                "summary": "Complete an upload",
                "description": "After a successful PUT, POST the returned completion_url before expires_at. The token authorizes only this Upload; no API key, cookies, or request body is required. Verifies the stored object and commits one Source relationship. Valid retries return 204 without duplicate side effects. Retry network errors, 429, and 5xx responses with bounded backoff; never repeat the PUT just to retry completion.",
                "tags": [
                    "Uploads"
                ],
                "security": [],
                "parameters": [
                    {
                        "name": "token",
                        "in": "path",
                        "required": true,
                        "description": "Opaque completion capability from completion_url",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Upload completed or already completed. The response body is empty."
                    },
                    "400": {
                        "description": "Invalid uploaded media or Upload is no longer waiting",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Invalid completion capability",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Storage permission or plan limit prevents completion",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorForbidden"
                                }
                            }
                        }
                    },
                    "410": {
                        "description": "Upload session expired or was deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorGone"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Rate limited; retry with backoff",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "Temporary object verification failure; retry completion",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorServiceUnavailable"
                                }
                            }
                        }
                    }
                },
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "// Use the completion_url returned when creating the Upload.\nconst response = await fetch(upload.completion_url, {\n  method: 'POST',\n  credentials: 'omit',\n});\nif (!response.ok) {\n  throw new Error(`Completion failed: ${response.status}`);\n}\n// 204 No Content: do not call response.json()."
                    },
                    {
                        "lang": "Python",
                        "source": "import requests\n\n# Use the completion_url returned when creating the Upload.\nresponse = requests.post(upload[\"completion_url\"], timeout=30)\nresponse.raise_for_status()\n# 204 No Content: there is no JSON response to parse."
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\n// Use the completion_url returned when creating the Upload.\n$request = curl_init($upload['completion_url']);\ncurl_setopt_array($request, [\n    CURLOPT_POST => true,\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_TIMEOUT => 30,\n]);\n$result = curl_exec($request);\n$status = curl_getinfo($request, CURLINFO_HTTP_CODE);\nif ($result === false || $status !== 204) {\n    throw new RuntimeException('Completion failed: ' . $status);\n}\ncurl_close($request);\n// 204 No Content: there is no JSON response to parse."
                    },
                    {
                        "lang": "Go",
                        "source": "// completionURL is the completion_url returned when creating the Upload.\nreq, err := http.NewRequestWithContext(ctx, http.MethodPost, completionURL, nil)\nif err != nil {\n    return err\n}\nclient := &http.Client{Timeout: 30 * time.Second}\nresp, err := client.Do(req)\nif err != nil {\n    return err\n}\ndefer resp.Body.Close()\nif resp.StatusCode != http.StatusNoContent {\n    return fmt.Errorf(\"completion failed: %d\", resp.StatusCode)\n}\n// 204 No Content: there is no JSON response to decode."
                    }
                ]
            }
        },
        "/api/uploads/{uploadId}": {
            "delete": {
                "description": "Delete an upload.",
                "parameters": [
                    {
                        "description": "Upload id",
                        "in": "path",
                        "name": "uploadId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The upload was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete an upload",
                "tags": ["Uploads"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.uploads.delete('uploadId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.uploads.delete(\n    \"uploadId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->uploads->delete('uploadId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Uploads.Delete(context.TODO(), \"uploadId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteUpload"
            },
            "get": {
                "description": "Retrieve details of a specific upload by its ID, including metadata, status, and associated source.",
                "parameters": [
                    {
                        "description": "Upload ID",
                        "in": "path",
                        "name": "uploadId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UploadResponse"
                                }
                            }
                        },
                        "description": "OK"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single upload",
                "tags": ["Uploads"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst upload = await client.uploads.retrieve('uploadId');\n\nconsole.log(upload);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nupload = client.uploads.retrieve(\n    \"uploadId\",\n)\nprint(upload)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$upload = $client->uploads->retrieve('uploadId');\n\nvar_dump($upload);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  upload, err := client.Uploads.Get(context.TODO(), \"uploadId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", upload)\n}\n"
                    }
                ],
                "operationId": "getUpload"
            }
        },
        "/api/webhooks": {
            "get": {
                "description": "Retrieve a list of all webhooks configured for the current project. Each webhook includes its URL, enabled status, and subscribed events.",
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/WebhookListResponse"
                                }
                            }
                        },
                        "description": "Webhooks retrieved successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get all webhooks",
                "tags": ["Webhooks"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst webhooks = await client.webhooks.list();\n\nconsole.log(webhooks);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nwebhooks = client.webhooks.list()\nprint(webhooks)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$webhooks = $client->webhooks->list();\n\nvar_dump($webhooks);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  webhooks, err := client.Webhooks.List(context.TODO())\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", webhooks)\n}\n"
                    }
                ],
                "operationId": "listWebhooks"
            },
            "post": {
                "description": "Create a new webhook for a project. The webhook will receive notifications for specified events.",
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/WebhookCreateParams"
                            }
                        }
                    },
                    "description": "Webhook creation parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "201": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/WebhookResponse"
                                }
                            }
                        },
                        "description": "The webhook was created successfully"
                    },
                    "400": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorValidation"
                                }
                            }
                        },
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Create a new webhook",
                "tags": ["Webhooks"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst webhook = await client.webhooks.create({ url: 'https://example.com/webhook' });\n\nconsole.log(webhook);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nwebhook = client.webhooks.create(\n    url=\"https://example.com/webhook\",\n)\nprint(webhook)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$webhook = $client->webhooks->create(\n    url: 'https://example.com/webhook',\n);\n\nvar_dump($webhook);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  webhook, err := client.Webhooks.New(context.TODO(), chunkify.WebhookNewParams{\n    URL: \"https://example.com/webhook\",\n  })\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", webhook)\n}\n"
                    }
                ],
                "operationId": "createWebhook"
            }
        },
        "/api/webhooks/{webhookId}": {
            "delete": {
                "description": "Permanently delete a webhook configuration. The webhook must belong to the current project. This action cannot be undone.",
                "parameters": [
                    {
                        "description": "Webhook ID",
                        "in": "path",
                        "name": "webhookId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The webhook was deleted successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Delete a webhook",
                "tags": ["Webhooks"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.webhooks.delete('webhookId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.webhooks.delete(\n    \"webhookId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->webhooks->delete('webhookId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Webhooks.Delete(context.TODO(), \"webhookId\")\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "deleteWebhook"
            },
            "get": {
                "description": "Retrieve details of a specific webhook configuration by its ID. The webhook must belong to the current project.",
                "parameters": [
                    {
                        "description": "Webhook ID",
                        "in": "path",
                        "name": "webhookId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "responses": {
                    "200": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/WebhookResponse"
                                }
                            }
                        },
                        "description": "Success response with webhook details"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Get a single webhook",
                "tags": ["Webhooks"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nconst webhook = await client.webhooks.retrieve('webhookId');\n\nconsole.log(webhook);"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nwebhook = client.webhooks.retrieve(\n    \"webhookId\",\n)\nprint(webhook)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$webhook = $client->webhooks->retrieve('webhookId');\n\nvar_dump($webhook);"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n  \"fmt\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  webhook, err := client.Webhooks.Get(context.TODO(), \"webhookId\")\n  if err != nil {\n    panic(err.Error())\n  }\n  fmt.Printf(\"%+v\\n\", webhook)\n}\n"
                    }
                ],
                "operationId": "getWebhook"
            },
            "patch": {
                "description": "Update the enabled status of a webhook. The webhook must belong to the current project.",
                "parameters": [
                    {
                        "description": "Webhook ID",
                        "in": "path",
                        "name": "webhookId",
                        "required": true,
                        "schema": { "type": "string" }
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/WebhookUpdateParams"
                            }
                        }
                    },
                    "description": "Webhook update parameters",
                    "required": true,
                    "x-originalParamName": "request"
                },
                "responses": {
                    "204": {
                        "description": "The webhook was updated successfully"
                    },
                    "401": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorAuthentication"
                                }
                            }
                        },
                        "description": "Authentication error: invalid token or subscription inactive"
                    },
                    "404": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorNotFound"
                                }
                            }
                        },
                        "description": "Resource not found"
                    },
                    "429": {
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResponseErrorTooManyRequests"
                                }
                            }
                        },
                        "description": "Rate limit exceeded"
                    }
                },
                "security": [{ "ProjectAccessToken": [] }],
                "summary": "Update a webhook",
                "tags": ["Webhooks"],
                "x-codeSamples": [
                    {
                        "lang": "JavaScript",
                        "source": "import Chunkify from '@chunkify/chunkify';\n\nconst client = new Chunkify({\n  projectAccessToken: 'My Project Access Token',\n});\n\nawait client.webhooks.update('webhookId');"
                    },
                    {
                        "lang": "Python",
                        "source": "from chunkify import Chunkify\n\nclient = Chunkify(\n    project_access_token=\"My Project Access Token\",\n)\nclient.webhooks.update(\n    webhook_id=\"webhookId\",\n)"
                    },
                    {
                        "lang": "php",
                        "source": "<?php\n\nuse Chunkify\\Client;\n\n$client = new Client(\n    projectAccessToken: 'My Project Access Token',\n);\n\n$client->webhooks->update('webhookId');"
                    },
                    {
                        "lang": "Go",
                        "source": "package main\n\nimport (\n  \"context\"\n\n  \"github.com/chunkifydev/chunkify-go\"\n  \"github.com/chunkifydev/chunkify-go/option\"\n)\n\nfunc main() {\n  client := chunkify.NewClient(\n    option.WithProjectAccessToken(\"My Project Access Token\"),\n  )\n  err := client.Webhooks.Update(\n    context.TODO(),\n    \"webhookId\",\n    chunkify.WebhookUpdateParams{\n\n    },\n  )\n  if err != nil {\n    panic(err.Error())\n  }\n}\n"
                    }
                ],
                "operationId": "updateWebhook"
            }
        }
    },
    "webhooks": {
        "newEvent": {
            "post": {
                "description": "Webhook endpoint for new events.",
                "requestBody": {
                    "description": "Payload data structure for new events",
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NotificationPayload"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Return a 200 status to indicate that the data was received successfully"
                    }
                }
            }
        }
    },
    "servers": [{ "url": "https://api.chunkify.dev/v1" }]
}
