> ## Documentation Index
> Fetch the complete documentation index at: https://gcore.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create videos in batch

> Mass upload of your videos. Method is used to set the task of creating videos in the form of 1 aggregated request instead of a large number of single requests.

  
An additional advantage is the ability to specify subtitles in the same request. Whereas for a normal single upload, subtitles are uploaded in separate requests.

  
All videos in the request will be processed in queue in order of priority. Use "priority" attribute and look at general description in POST /videos method.

Limits:
- Batch max size = 500 videos.
- Max body size (payload) = 64MB.
- API connection timeout = 30 sec.



## OpenAPI

````yaml /api-reference/services_documented/streaming_api.yaml post /streaming/videos/batch
openapi: 3.1.0
info:
  title: Gcore OpenAPI – Streaming API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  version: '2026-05-14T07:00:22.640261+00:00'
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: AI
    x-displayName: AI
  - name: Broadcasts
    x-displayName: Broadcasts
  - name: Directories
    x-displayName: Directories
  - name: Overlays
    x-displayName: Overlays
  - name: Players
    x-displayName: Players
  - name: Playlists
    x-displayName: Playlists
  - name: QualitySets
    x-displayName: QualitySets
  - name: Restreams
    x-displayName: Restreams
  - name: Streaming Statistics
    x-displayName: Statistics
  - name: Streams
    x-displayName: Streams
  - name: Subtitles
    x-displayName: Subtitles
  - name: Videos
    x-displayName: Videos
paths:
  /streaming/videos/batch:
    post:
      tags:
        - Videos
      summary: Create videos in batch
      description: >-
        Mass upload of your videos. Method is used to set the task of creating
        videos in the form of 1 aggregated request instead of a large number of
        single requests.

          
        An additional advantage is the ability to specify subtitles in the same
        request. Whereas for a normal single upload, subtitles are uploaded in
        separate requests.

          
        All videos in the request will be processed in queue in order of
        priority. Use "priority" attribute and look at general description in
        POST /videos method.


        Limits:

        - Batch max size = 500 videos.

        - Max body size (payload) = 64MB.

        - API connection timeout = 30 sec.
      operationId: post_videos_batch
      parameters:
        - name: fields
          in: query
          description: >-
            Restriction to return only the specified attributes, instead of the
            entire dataset. Specify, if you need to get short response. The
            following fields are available for specifying: id, name, duration,
            status, `created_at`, `updated_at`, `hls_url`, screenshots,
            `converted_videos`, priority. Example, ?fields=id,name,`hls_url`
          schema:
            type: string
          required: false
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                videos:
                  type: array
                  items:
                    $ref: '#/components/schemas/createVideoBatch'
        required: false
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/searchVideo'
        '400':
          description: One or more parameters were specified incorrectly, check the request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/badrequest'
        '422':
          description: |-
            Possible error messages:   
             **{ "errors": { "name": [ "can't be blank" ] } }**   
             *Name* is a required parameter, so it must be specified
          content: {}
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from gcore import Gcore

            client = Gcore(
                api_key=os.environ.get("GCORE_API_KEY"),  # This is the default and can be omitted
            )
            videos = client.streaming.videos.create_multiple()
            print(videos)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/G-Core/gcore-go\"\n\t\"github.com/G-Core/gcore-go/option\"\n\t\"github.com/G-Core/gcore-go/streaming\"\n)\n\nfunc main() {\n\tclient := gcore.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tvideos, err := client.Streaming.Videos.NewMultiple(context.TODO(), streaming.VideoNewMultipleParams{})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", videos)\n}\n"
components:
  schemas:
    createVideoBatch:
      allOf:
        - $ref: '#/components/schemas/createVideo'
        - properties:
            subtitles:
              type: array
              items:
                $ref: '#/components/schemas/subtitleBody'
          example:
            subtitles:
              - name: English (AI-generated)
                language: eng
                vtt: >-
                  WEBVTT


                  1

                  00:00:07.154 --> 00:00:12.736

                  We have 100 million registered users or active users who play
                  at least once a week.


                  2

                  00:00:13.236 --> 00:00:20.198

                  We might have 80 or 100,000 playing on a given cluster.
              - name: German (AI-translated)
                language: ger
                vtt: >-
                  WEBVTT


                  1

                  00:00:07.154 --> 00:00:12.736

                  Wir haben 100 Millionen registrierte Benutzer oder aktive
                  Benutzer, die mindestens einmal pro Woche spielen.


                  2

                  00:00:13.236 --> 00:00:20.198

                  Wir haben vielleicht 80 oder 100.000, die auf einem bestimmten
                  Cluster spielen.
    searchVideo:
      type: object
      properties:
        id:
          type: integer
          description: Video ID
        name:
          type: string
          description: >-
            Title of the video.


            Often used as a human-readable name of the video, but can contain
            any text you wish. The values are not unique and may be repeated.

            Examples:

            - Educational training 2024-03-29

            - Series X S3E14, The empire strikes back

            - 480fd499-2de2-4988-bc1a-a4eebe9818ee
        description:
          type: string
          description: Additional text field for video description
        client_id:
          type: integer
          description: Client ID
        origin_size:
          type: integer
          description: Size of original file
        origin_video_duration:
          type: integer
          description: Original video duration in milliseconds
        origin_url:
          type: string
          description: >-
            URL to an original file from which the information for transcoding
            was taken. 


            May contain a link for scenarios:

            - If the video was downloaded from another origin

            - If the video is a recording of a live stream

            - Otherwise it is "null"


            **Copy from another server**

            URL to an original file that was downloaded. Look at method "Copy
            from another server" in POST /videos.

            **Recording of an original live stream** 


            URL to the original non-transcoded stream recording with original
            quality, saved in MP4 format. File is created immediately after the
            completion of the stream recording. The stream from which the
            recording was made is reflected in "stream_id" field.


            Can be used for internal operations when a recording needs to be
            received faster than the transcoded versions are ready. But this
            version is not intended for public distribution. Views and downloads
            occur in the usual way, like viewing an MP4 rendition.


            The MP4 file becomes available for downloading when the video entity
            "status" changes from "new" to "pending". 


            Format of URL is
            ```/videos/<cid>_<slug>/origin_<bitrate>_<height>.mp4```

            Where:

            - ```<bitrate>``` – Encoding bitrate in Kbps.

            - ```<height>``` – Video height.


            The original file is stored for up to 7 days, after which it is
            deleted automatically. By default, the retention policy for original
            recorded files cannot be changed. For enterprise customers, it can
            be adjusted individually upon request.


            This is a premium feature, available only upon request through your
            manager or support team.
          default: null
        duration:
          type: integer
          description: >-
            Video duration in milliseconds. May differ from
            "origin_video_duration" value if the video was uploaded with
            clipping through the parameters "clip_start_seconds" and
            "clip_duration_seconds"
        slug:
          type: string
          description: >-
            A unique alphanumeric identifier used in public URLs to retrieve and
            view the video. It is unique for each video, generated randomly and
            set automatically by the system.


            Format of usage in URL is *.../videos/{`client_id`}_{slug}/...*


            Example:

            - Player: /videos/`12345_neAq1bYZ2`

            - Manifest: /videos/`12345_neAq1bYZ2`/master.m3u8

            - Rendition: /videos/`12345_neAq1bYZ2`/`qid90v1_720`.mp4
        stream_id:
          type: integer
          description: >-
            If the video was saved from a stream, then ID of that stream is
            saved here
        recording_started_at:
          type: string
          description: >-
            If the video was saved from a stream, then start time of the stream
            recording is saved here. Format is date time in ISO 8601
        share_url:
          type: string
          description: >-
            Custom URL or iframe displayed in the link field when a user clicks
            on a sharing button in player. If empty, the link field and social
            network sharing is disabled
        poster:
          type: string
          default: null
          description: >-
            Poster is your own static image which can be displayed before the
            video begins playing. This is often a frame of the video or a custom
            title screen.


            Field contains a link to your own uploaded image.


            Also look at "screenshot" attribute.
        poster_thumb:
          type: string
          default: null
          description: >-
            Field contains a link to minimized poster image. Original "poster"
            image is proportionally scaled to a size of 200 pixels in height.
        screenshot:
          type: string
          description: >-
            A URL to the default screenshot is here. The image is selected from
            an array of all screenshots based on the “`screenshot_id`”
            attribute. If you use your own "poster", the link to it will be here
            too.


            Our video player uses this field to display the static image before
            the video starts playing. As soon as the user hits "play" the image
            will go away.

            If you use your own external video player, then you can use the
            value of this field to set the poster/thumbnail in your player.


            Example:

            - `video_js`.poster: ```api.screenshot```

            - clappr.poster: ```api.screenshot```
        screenshots:
          type: array
          items:
            type: string
          description: >-
            Array of auto generated screenshots from the video. By default 5
            static screenshots are taken from different places in the video. If
            the video is short, there may be fewer screenshots.


            Screenshots are created automatically, so they may contain not very
            good frames from the video. To use your own image look at "poster"
            attribute.
        screenshot_id:
          type: integer
          description: >-
            ID of auto generated screenshots to be used for default screenshot.


            Counting from 0. A value of -1 sets the "screenshot" attribute to
            the URL of your own image from the "poster" attribute.
          default: null
        sprite:
          type: string
          description: >-
            Link to picture with video storyboard. Image in JPG format. The
            picture is a set of rectangles with frames from the video. Typically
            storyboard is used to show preview images when hovering the video's
            timeline.
          default: null
        sprite_vtt:
          type: string
          description: >-
            Storyboard in VTT format. This format implies an explicit indication
            of the timing and frame area from a large sprite image.
          default: null
        ad_id:
          type: integer
          description: >-
            ID of ad that should be shown. If empty the default ad is show. If
            there is no default ad, no ad is shownю
        hls_url:
          type: string
          description: >-
            A URL to a master playlist HLS (master.m3u8).

            Chunk type will be selected automatically:

            - TS if your video was encoded to H264 only.

            - CMAF if your video was encoded additionally to H265 and/or AV1
            codecs (as Apple does not support these codecs over MPEG TS, and
            they are not standardized in TS-container).

              


            You can also manually specify suffix-options that will allow you to
            change the manifest to your request:


            ```

            /videos/{client_id}_{video_slug}/master[-cmaf][-min-N][-max-N][-img][-(h264|hevc|av1)].m3u8

            ```


            List of suffix-options:

            - [-cmaf] – getting HLS CMAF version of the manifest. Look at the
            ```hls_cmaf_url``` field.

            - [-min-N] – ABR soft limitation of qualities from below.

            - [-max-N] – ABR soft limitation of qualities from above.

            - [-img] – Roku trick play: to add tiles directly into .m3u8
            manifest. Read the Product Documentation for details.

            - [-(h264|hevc|av1) – Video codec soft limitation. Applicable if the
            video was transcoded into multiple codecs H264, H265 and AV1 at
            once, but you want to return just 1 video codec in a manifest. Read
            the Product Documentation for details.
              
            ABR soft-limiting: Soft limitation of the list of qualities allows
            you to return not the entire list of transcoded qualities for a
            video, but only those you need.

            For example, the video is available in 7 qualities from 360p to 4K,
            but you want to return not more than 480p only due to the conditions
            of distribution of content to a specific end-user (i.e. free
            account):

            ABR soft-limiting examples:

            - To a generic ```.../master.m3u8``` manifest

            - Add a suffix-option to limit quality ```.../master-max-480.m3u8```

            - Add a suffix-option to limit quality and codec
            ```.../master-min-320-max-320-h264.m3u8```

            For more details look at the Product Documentation.
              
            Caution. Solely master.m3u8 (and master[-options].m3u8) is
            officially documented and intended for your use. Any additional
            internal manifests, sub-manifests, parameters, chunk names, file
            extensions, and related components are internal infrastructure
            entities. These may undergo modifications without prior notice, in
            any manner or form. It is strongly advised not to store them in your
            database or cache them on your end.
        hls_cmaf_url:
          type: string
          description: >-
            A URL to a master playlist HLS (master-cmaf.m3u8) with CMAF-based
            chunks. Chunks are in fMP4 container. It's a code-agnostic
            container, which allows to use any like H264, H265, AV1, etc.
              


            It is possible to use the same suffix-options as described in the
            "hls_url" attribute.
              


            Caution. Solely master.m3u8 (and master[-options].m3u8) is
            officially documented and intended for your use. Any additional
            internal manifests, sub-manifests, parameters, chunk names, file
            extensions, and related components are internal infrastructure
            entities. These may undergo modifications without prior notice, in
            any manner or form. It is strongly advised not to store them in your
            database or cache them on your end.
        dash_url:
          type: string
          description: >-
            A URL to a master playlist MPEG-DASH (master.mpd) with CMAF or WebM
            based chunks.


            Chunk type will be selected automatically for each quality:

            - CMAF for H264 and H265 codecs.

            - WebM for AV1 codec.

              


            This URL is a link to the main manifest. But you can also manually
            specify suffix-options that will allow you to change the manifest to
            your request:


            ```

            /videos/{client_id}_{slug}/master[-min-N][-max-N][-(h264|hevc|av1)].mpd

            ```


            List of suffix-options:

            - [-min-N] – ABR soft limitation of qualities from below.

            - [-max-N] – ABR soft limitation of qualities from above.

            - [-(h264|hevc|av1) – Video codec soft limitation. Applicable if the
            video was transcoded into multiple codecs H264, H265 and AV1 at
            once, but you want to return just 1 video codec in a manifest. Read
            the Product Documentation for details.


            Read more what is ABR soft-limiting in the "hls_url" field above.

              


            Caution. Solely master.mpd is officially documented and intended for
            your use. Any additional internal manifests, sub-manifests,
            parameters, chunk names, file extensions, and related components are
            internal infrastructure entities. These may undergo modifications
            without prior notice, in any manner or form. It is strongly advised
            not to store them in your database or cache them on your end.
        iframe_url:
          type: string
          description: >-
            A URL to a built-in HTML video player with the video inside. It can
            be inserted into an iframe on your website and the video will
            automatically play in all browsers.


            The player can be opened or shared via this direct link. Also the
            video player can be integrated into your web pages using the Iframe
            tag.


            Example of usage on a web page:

            <iframe width="100%" height="100%"
            src="https://player.gvideo.co/videos/2675_FnlHXwA16ZMxmUr"
            frameborder="0" allow="autoplay; encrypted-media"
            allowfullscreen></iframe>
              


            There are some link modificators you can specify and add manually:

            - ?`no_low_latency` – player is forced to use non-low-latency
            streams HLS MPEG-TS, instead of MPEG-DASH CMAF or HLS/LL-HLS CMAF.

            - ?t=(integer) – time to start playback from specified point in the
            video. Applicable for VOD only.

            - ?`sub_lang`=(language) – force subtitles to specific language (2
            letters ISO 639 code of a language).

            - Read more in the Product Documentation.
        custom_iframe_url:
          type: string
          description: >-
            Custom URL of Iframe for video player to be used in share panel in
            player. Auto generated Iframe URL provided by default.
        views:
          type: integer
          description: >-
            Number of video views through the built-in HTML video player of the
            Streaming Platform only. This attribute does not count views from
            other external players and native OS players, so here may be less
            number of views than in "cdn_views".
        cdn_views:
          type: integer
          description: >-
            Total number of video views. It is calculated based on the analysis
            of all views, no matter in which player.
        client_user_id:
          type: integer
          default: null
          description: >-
            Custom meta field for storing the Identifier in your system. We do
            not use this field in any way when processing the stream. Example:
            ```client_user_id = 1001```
        status:
          type: string
          description: >-
            Video processing status:

            - empty – initial status, when video-entity is created, but
            video-file has not yet been fully uploaded (TUS uploading, or
            downloading from an origin is not finished yet)

            - pending – video is in queue to be processed

            - viewable – video has at least 1 quality and can already be viewed
            via a link, but not all qualities are ready yet

            - ready – video is completely ready, available for viewing with all
            qualities

            - error – error while processing a video, look at "error" field
          enum:
            - empty
            - pending
            - viewable
            - ready
            - error
        error:
          type: string
          description: 'Video processing error text will be saved here if "status: error"'
        projection:
          type: string
          description: |-
            Regulates the video format:

            - **regular** — plays the video as usual
            - **vr360** — plays the video in 360 degree mode
            - **vr180** — plays the video in 180 degree mode
            - **vr360tb** — plays the video in 3D 360 degree mode Top-Bottom.

              
             Default is regular
        converted_videos:
          type: array
          description: Array of data about each transcoded quality
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID of the converted file of the specific quality
              name:
                type: string
                description: Specific quality name
              width:
                type: integer
                description: >-
                  Width in pixels of the converted video file of the specified
                  quality. Can be ```null``` for audio files.
                default: null
              height:
                type: integer
                description: >-
                  Height in pixels of the converted video file of the specific
                  quality. Can be ```null``` for audio-only files.
                default: null
              size:
                type: integer
                description: >-
                  Size in bytes of the converted file of the specific quality.
                  Can be ```null``` until transcoding is fully completed.
                default: null
              progress:
                type: integer
                description: Status of transcoding into the specific quality, from 0 to 100
              status:
                type: string
                description: |-
                  Status of transcoding:
                  - processing – video is being transcoded to this quality,
                  - complete – quality is fully processed,
                  - error – quality processing error, see parameter "error".
                enum:
                  - processing
                  - complete
                  - error
              error:
                type: string
                description: Video processing error text in this quality
                default: null
              mp4_url:
                type: string
                description: >-
                  A URL to a rendition file of the specified quality in MP4
                  format for downloading.
                    


                  **Download methods**


                  For each converted video, additional download endpoints are
                  available under `converted_videos`/`mp4_urls`.

                  An MP4 download enpoints:

                  1. `/videos/{client_id}_{slug}/{filename}.mp4`

                  2. `/videos/{client_id}_{slug}/{filename}.mp4/download`

                  3.
                  `/videos/{client_id}_{slug}/{filename}.mp4/download={custom_filename}`


                  The first option returns the file as is.

                  Response will be:


                  ```

                  GET .mp4

                  ...

                  content-type: video/mp4

                  ```


                  The second option with `/download` will respond with HTTP
                  response header that directly tells browsers to download the
                  file instead of playing it in the browser:


                  ``` 

                  GET .mp4/download

                  ...

                  content-type: video/mp4

                  content-disposition: attachment

                  access-control-expose-headers: Content-Disposition

                  ```


                  The third option allows you to set a custom name for the file
                  being downloaded. You can optionally specify a custom filename
                  (just name excluding the .mp4 extension) using the download=
                  query.


                  Filename constraints:

                  - Length: 1-255 characters

                  - Must NOT include the .mp4 extension (it is added
                  automatically)

                  - Allowed characters: a-z, A-Z, 0-9, _(underscore), -(dash),
                  .(dot)

                  - First character cannot be .(dot)

                  - Example valid filenames: ```holiday2025```,
                  ```_backup.final```, ```clip-v1.2```


                  ```

                  GET .mp4/download={custom_filename}

                  ...

                  content-type: video/mp4

                  content-disposition: attachment;
                  filename="{custom_filename}.mp4"

                  access-control-expose-headers:
                  Content-Disposition                    

                  ```


                  Examples:

                  - MP4:
                  ```https://demo-public.gvideo.io/videos/2675_1OFgHZ1FWZNNvx1A/qid3567v1_h264_4050_1080.mp4/download```

                  - MP4 with custom download filename:
                  ```https://demo-public.gvideo.io/videos/2675_1OFgHZ1FWZNNvx1A/qid3567v1_h264_4050_1080.mp4/download=highlights_v1.1_2025-05-30```

                    


                  **Default MP4 file name structure**


                  Link to the file {filename} contains information about the
                  encoding method using format:


                  ```<quality_version>_<codec>_<bitrate>_<height>.mp4```

                  - ```<quality_version>``` – Internal quality identifier and
                  file version. Please do not use it, can be changed at any time
                  without any notice.

                  - ```<codec>``` – Codec name that was used to encode the
                  video, or audio codec if it is an audio-only file.

                  - ```<bitrate>``` – Encoding bitrate in Kbps.

                  - ```<height>``` – Video height, or word "audio" if it is an
                  audio-only file.


                  Note that this link format has been applied since 14.08.2024.
                  If the video entity was uploaded earlier, links may have old
                  simplified format.


                  Example: ```
                  /videos/{client_id}_{slug}/qid3567v1_h264_4050_1080.mp4 ```

                    


                  **Dynamic speed limiting**

                  This mode sets different limits for different users or for
                  different types of content. The speed is adjusted based on
                  requests with the “speed” and “buffer” arguments.


                  Example: ``` ?speed=50k&buffer=500k ```


                  Read more in Product Documentation in CDN section "Network
                  limits". 

                    


                  **Secure token authentication for MP4 (updated)**


                  Access to MP4 download links only can be protected using
                  advanced secure tokens passed as query parameters.


                  Token generation uses the entire MP4 path, which ensures the
                  token only grants access to a specific quality/version of the
                  video. This prevents unintended access to other bitrate
                  versions of an ABR stream.


                  Token Query Parameters:

                  - token: The generated hash

                  - expires: Expiration timestamp

                  - speed: (optional) Speed limit in bytes/sec, or empty string

                  - buffer: (optional) Buffer size in bytes, or empty string


                  Optional (for IP-bound tokens):

                  - ip: The user’s IP address

                  Example: ``` ?md5=QX39c77lbQKvYgMMAvpyMQ&expires=1743167062
                  ```


                  Read more in Product Documentation in Streaming section
                  "Protected temporarily link".
      example:
        id: 70575
        name: Coffee Run - Blender Open Movie 720p
        description: >-
          Fueled by caffeine, a young woman runs through the bittersweet
          memories of her past relationship. Coffee Run was directed by Hjalti
          Hjalmarsson and produced by the team at Blender Studio.
        client_id: 1
        duration: 184669
        slug: FnlHXwA16ZMxmUr
        status: ready
        origin_size: 29260881
        origin_video_duration: 184669
        origin_audio_channels: 2
        origin_height: 804
        origin_width: 1920
        created_at: '2024-06-13T12:15:25.000Z'
        updated_at: '2024-07-26T15:30:50.000Z'
        clip_start_seconds: null
        clip_duration_seconds: null
        hls_url: https://demo-public.gvideo.io/videos/2675_FnlHXwA16ZMxmUr/master.m3u8
        hls_cmaf_url: >-
          https://demo-public.gvideo.io/videos/2675_FnlHXwA16ZMxmUr/master-cmaf.m3u8
        dash_url: https://demo-public.gvideo.io/videos/2675_FnlHXwA16ZMxmUr/master.mpd
        iframe_url: https://player.gvideo.co/videos/2675_FnlHXwA16ZMxmUr
        poster: >-
          https://static.gvideo.co/videoplatform/posters/video/10507272/f55b7db5f7a1ea48d713d7e6806bb9c5.jpeg
        poster_thumb: >-
          https://static.gvideo.co/videoplatform/posters/video/10507272/thumb_f55b7db5f7a1ea48d713d7e6806bb9c5.jpeg
        screenshot: >-
          https://static.gvideo.co/videoplatform/posters/video/10507272/f55b7db5f7a1ea48d713d7e6806bb9c5.jpeg
        screenshots:
          - >-
            https://static.gvideo.co/videoplatform/thumbnails/2675/2474723_FnlHXwA16ZMxmUr.mp4_2_1080.jpg
          - >-
            https://static.gvideo.co/videoplatform/thumbnails/2675/2474723_FnlHXwA16ZMxmUr.mp4_3_1080.jpg
        screenshot_id: -1
        views: 2000001
        cdn_views: 30000003
        projection: regular
        sprite: >-
          https://static.gvideo.co/videoplatform/sprites/2675/10507272_sNOwd4luk5mGGf9M.mp4_sprite.jpg
        sprite_vtt: |
          1
          00:00:00,000 --> 00:00:05,000
          xMbWbUSuvJ8NX2_sprite.jpg#xywh=0,0,100,42

          2
          00:00:05,000 --> 00:00:10,000
          xMbWbUSuvJ8NX2_sprite.jpg#xywh=100,0,100,42
          ...
        converted_videos:
          - id: 25889825
            name: vod720p
            width: 1719
            height: 720
            size: 37651798
            progress: 100
            status: complete
            mp4_url: >-
              https://demo-public.gvideo.io/videos/2675_FnlHXwA16ZMxmUr/qid3570v3_h264_1566_720.mp4
          - id: 25889828
            name: vod480p
            width: 1146
            height: 480
            size: 20255892
            progress: 100
            status: complete
            mp4_url: >-
              https://demo-public.gvideo.io/videos/2675_FnlHXwA16ZMxmUr/qid3573v3_h264_800_468.mp4
    badrequest:
      type: object
      properties:
        status:
          type: integer
          description: Error number
        error:
          type: string
          description: Error message
      example:
        status: 400
        error: >-
          Bad Request response status code indicates that the server cannot or
          will not process the request due to something that is perceived to be
          a client error (for example, malformed request syntax, invalid request
          message framing, or deceptive request routing).
    createVideo:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          description: Video name
        description:
          type: string
          description: Video details; not visible to the end-users
          default: null
        origin_url:
          type: string
          description: >-
            URL to an original file which you want to copy from external
            storage.

            If specified, system will download the file and will use it as video
            source for transcoding.
          default: null
        origin_http_headers:
          type: string
          description: >-
            Authorization HTTP request header. Will be used as credentials to
            authenticate a request to download a file (specified in "origin_url"
            parameter) on an external server.


            Syntax: ```Authorization: <auth-scheme>
            <authorization-parameters>```


            Examples:

            - "origin_http_headers": "Authorization: Basic ..."

            - "origin_http_headers": "Authorization: Bearer ..."

            - "origin_http_headers": "Authorization: APIKey ..."

            Example of usage when downloading a file from Google Drive:


            ```

            POST https://api.gcore.com/streaming/videos


            "video": {
              "name": "IBC 2024 intro.mp4",
              "origin_url": "https://www.googleapis.com/drive/v3/files/...?alt=media",
              "origin_http_headers": "Authorization: Bearer ABC"
            }            

            ```
          default: null
        priority:
          type: integer
          default: 0
          description: >-
            Priority allows you to adjust the urgency of processing some videos
            before others in your account, if your algorithm requires it. For
            example, when there are very urgent video and some regular ones that
            can wait in the queue.



            Value range, integer [-10..10]. -10 is the lowest down-priority, 10
            is the highest up-priority. Default priority is 0.
        quality_set_id:
          type: integer
          description: >-
            Custom quality set ID for transcoding, if transcoding is required
            according to your conditions. Look at GET /`quality_sets` method
          default: null
        clip_start_seconds:
          type: integer
          default: null
          description: >-
            If you want to transcode only a trimmed segment of a video instead
            of entire length if the video, then you can provide timecodes of
            starting point and duration of a segment to process. Start encoding
            from is a number in seconds.
        clip_duration_seconds:
          type: integer
          default: null
          description: >-
            The length of the trimmed segment to transcode, instead of the
            entire length of the video. Is only used in conjunction with
            specifying the start of a segment. Transcoding duration is a number
            in seconds.
        source_bitrate_limit:
          type: boolean
          default: true
          description: >-
            The option allows you to set the video transcoding rule so that the
            output bitrate in ABR ladder is not exceeding the bitrate of the
            original video.

              
            This option is for advanced users only.
              


            By default ```source_bitrate_limit: true``` this option allows you
            to have the output bitrate not more than in the original video, thus
            to transcode video faster and to deliver it to end-viewers faster as
            well. At the same time, the quality will be similar to the original.


            If for some reason you need more byte-space in the output quality
            when encoding, you can set this option to ```source_bitrate_limit:
            false```. Then, when transcoding, the quality ceiling will be raised
            from the bitrate of the original video to the maximum possible limit
            specified in our the Product Documentation.

            For example, this may be needed when:

            - to improve the visual quality parameters using PSNR, SSIM, VMAF
            metrics,

            - to improve the picture quality on dynamic scenes,

            - etc.


            The option is applied only at the video creation stage and cannot be
            changed later. If you want to re-transcode the video using new
            value, then you need to create and upload a new video only.
        directory_id:
          type: integer
          description: ID of the directory where the video should be uploaded. (beta)
        poster:
          type: string
          default: null
          description: >-
            Poster is your own static image which can be displayed before the
            video starts.


            After uploading the video, the system will automatically create
            several screenshots (they will be stored in "screenshots" attribute)
            from which you can select an default screenshot.

            This "poster" field is for uploading your own image. Also use
            attribute "screenshot_id" to select poster as a default screnshot.


            Attribute accepts single image as base64-encoded string [(RFC 2397 –
            The "data" URL scheme)](https://www.rfc-editor.org/rfc/rfc2397). In
            format: ```data:[<mediatype>];base64,<data>```


            MIME-types are image/jpeg, image/webp, and image/png and file sizes
            up to 1Mb.


            Examples:

            - ```data:image/jpeg;base64,/9j/4AA...qf/2Q==```

            - ```data:image/png;base64,iVBORw0KGg...ggg==```

            - ```data:image/webp;base64,UklGRt.../DgAAAAA```
        remote_poster_url:
          type: string
          default: null
          description: >-
            Poster URL to download from external resource, instead of uploading
            via "poster" attribute. 


            It has the same restrictions as "poster" attribute.
        remove_poster:
          type: boolean
          default: false
          description: Set it to true to remove poster
        screenshot_id:
          type: integer
          default: 0
          description: >-
            Default screenshot index. 


            Specify an ID from the "screenshots" array, so that the URL of the
            required screenshot appears in the "screenshot" attribute as the
            default screenshot. By default 5 static screenshots will be taken
            from different places in the video after transcoding. If the video
            is short, there may be fewer screenshots. 


            Counting from 0. A value of -1 sets the default screenshot to the
            URL of your own image from the "poster" attribute.


            Look at "screenshot" attribute in GET /videos/{`video_id`} for
            details.
        client_user_id:
          type: integer
          description: Custom field where you can specify user ID in your system
        auto_transcribe_audio_language:
          type: string
          description: >-
            Automatic creation of subtitles by transcribing the audio track.


            Values:

            - disable – Do not transcribe.

            - auto – Automatically detects the activation of the option based on
            the settings in your account. If generation is activated, then
            automatic language detection while transcribing.

            - \ – Transcribe from specific language. Can be used to specify the
            exact language spoken in the audio track, or when auto language
            detection fails. Language is set by 3-letter language code according
            to ISO-639-2 (bibliographic code). List of languages is available in
            ```audio_language``` attribute of API POST /streaming/ai/transcribe
            .


            Example:


            ```

            auto_transcribe_audio_language: "auto"

            auto_transcribe_audio_language: "ger"

            ```


            More details:

            - List of AI tasks – API [GET
            /streaming/ai/tasks](/docs/api-reference/streaming/ai/get-list-of-ai-tasks)

            - Add subtitles to an exist video – API [POST
            /streaming/videos/{`video_id`}/subtitles](/docs/api-reference/streaming/subtitles/add-subtitle).
          enum:
            - disable
            - auto
            - <language_code>
          default: auto
        auto_translate_subtitles_language:
          type: string
          description: >-
            Automatic translation of auto-transcribed subtitles to the specified
            language(s). Can be used both together with
            ```auto_transcribe_audio_language``` option only. 


            Use it when you want to make automatic subtitles in languages other
            than the original language in audio.


            Values:

            - disable – Do not translate.

            - default – There are 3 default languages: eng,fre,ger

            - \ – Explicit language to translate to, or list of languages
            separated by a comma. Look at list of available languages in
            description of AI ASR task creation. 


            If several languages are specified for translation, a separate
            subtitle will be generated for each language.


            Example:


            ```

            auto_translate_subtitles_language: default

            auto_translate_subtitles_language: eng,fre,ger

            ```

              


            Please note that subtitle translation is done separately and after
            transcription. Thus separate AI-tasks are created for translation.
          enum:
            - disable
            - default
            - <language_codes,>
          default: disable
        projection:
          type: string
          description: |-
            Deprecated.

            Regulates the video format:

            - **regular**
              — plays the video as usual
            - **vr360**
              — plays the video in 360 degree mode
            - **vr180** — plays the video in 180 degree
              mode
            - **vr360tb** — plays the video in 3D
              360 degree mode Top-Bottom.

              
             Default is regular
        share_url:
          type: string
          description: |-
            Deprecated.

            Custom URL or iframe displayed in the link field when a user clicks
            on a sharing button in player. If empty, the link field and social
            network sharing is disabled
        custom_iframe_url:
          type: string
          description: |-
            Deprecated. 

            Custom URL of IFrame for video player to be used in share panel in
            player. Auto generated IFrame URL provided by default
      example:
        name: IBC 2025 - International Broadcasting Convention
        description: >-
          We look forward to welcoming you at IBC2025, which will take place
          12-15 September 2025.
        origin_url: https://www.googleapis.com/drive/v3/files/...?alt=media
        origin_http_headers: 'Authorization: Bearer ...'
        priority: 0
        clip_start_seconds: 137
        clip_duration_seconds: 60
        directory_id: 800
        projection: regular
        client_user_id: 10
        stream_id: 1
        poster: data:image/jpeg;base64,/9j/4AA...qf/2Q==
        screenshot_id: -1
        auto_transcribe_audio_language: auto
    subtitleBody:
      allOf:
        - $ref: '#/components/schemas/subtitleBase'
        - required:
            - language
            - vtt
          example:
            name: German (AI-generated)
            language: ger
            vtt: >-
              WEBVTT


              1

              00:00:07.154 --> 00:00:12.736

              Wir haben 100 Millionen registrierte Benutzer oder aktive
              Benutzer, die mindestens einmal pro Woche spielen.


              2

              00:00:13.236 --> 00:00:20.198

              Wir haben vielleicht 80 oder 100.000, die auf einem bestimmten
              Cluster spielen.
    subtitleBase:
      type: object
      properties:
        name:
          type: string
          description: Name of subtitle file
        language:
          type: string
          description: 3-letter language code according to ISO-639-2 (bibliographic code)
        vtt:
          type: string
          description: >-
            Full text of subtitles/captions, with escaped "\n" ("\r") symbol of
            new line
      example: null
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234$abcdef`
      type: apiKey
      in: header
      name: Authorization

````