openapi: 3.0.0
info:
  title: REST API Reference
  version: '0.7'
  description: |
    REST API provides low-level access to Uploadcare features. You can access files and their metadata, application data, file groups, add-ons, projects, webhooks, document conversion and video encoding.

    The REST API root is `https://api.uploadcare.com/`. Send data via query strings and POST request bodies, and receive JSON responses. All URLs MUST end with a forward slash `/`.

    Check out our [API clients](https://uploadcare.com/docs/integrations/) that cover most of the popular programming languages and frameworks.

    # Authentication
    <!-- ReDoc-Inject: <security-definitions> -->
  contact:
    name: API support
    email: help@uploadcare.com
  x-logo:
    url: https://ucarecdn.com/06bc72fb-3a5a-4ee7-a19c-b1d02fb9e711/logorestapi.svg
    backgroundColor: '#fafafa'
    altText: Uploadcare REST API Reference
  x-meta:
    title: REST API 0.7 Reference — Uploadcare
    description: Complete reference documentation for the Uploadcare REST API 0.7. Covers endpoints, requests, their params, and response examples.
servers:
  - url: https://api.uploadcare.com
    description: Production server
security:
  - apiKeyAuth: []
tags:
  - name: Integrations
    description: |
      You don't have to code most of the low-level API interactions.
      We have high-level [libraries](/docs/integrations/) for all popular platforms:
      * [JavaScript](/docs/integrations/javascript/)
      * [PHP](/docs/integrations/php/)
      * [Python](/docs/integrations/python/) (including Django)
      * [Ruby](/docs/integrations/ruby/) and [Rails](/docs/integrations/rails/)
      * [Swift](/docs/integrations/swift/) (iOS, iPadOS, macOS, tvOS, Linux)
      * [Kotlin](/docs/integrations/android/) (Android)
      * [Java](/docs/integrations/java/)
      * [Golang](/docs/integrations/golang/)
      * [Rust](/docs/integrations/rust/)

      In this API reference, you will see request examples in different languages.
      Keep in mind that running sample queries requires our libraries to be installed and initialized.
  - name: File
  - name: File metadata
    description: |
      File metadata is additional, arbitrary data, associated with uploaded file. As an example, you could store unique file identifier from your system.

      Metadata is key-value data. You can specify up to 50 keys, with key names up to 64 characters long and values up to 512 characters long.
      Read more in the [docs](https://uploadcare.com/docs/file-metadata/).

      **Notice:** Do not store any sensitive information (bank account numbers, card details, etc.) as metadata.

      **Notice:** File metadata is provided by the end-users uploading the files and can contain symbols unsafe in, for example, HTML context. Please escape the metadata before use according to the rules of the target runtime context (HTML browser, SQL query parameter, etc).
  - name: Group
  - name: Add-Ons
    description: |
      An `Add-On` is an application implemented by Uploadcare that accepts uploaded files as an
      input and can produce other files and/or [appdata](#operation/fileInfo) as an output.
  - name: Project
  - name: Webhook
  - name: Conversion
  - name: Changelog
    description: |
      ### Document conversion info, November 7, 2023
      `GET /convert/document/{uuid}/` allows you to determine the document format and possible conversion formats.

      Learn more about [Document conversion](/docs/transformations/file-conversion/).

      ### Multipage conversion, September 20, 2023
      Added `save_in_group` parameter to allow `POST /convert/document/` to convert a multi-page document into a group of files.

      Learn more about [Multipage conversion](/docs/transformations/file-conversion/#multipage-conversion).

      ### Webhook updates, July 7, 2023
      Added a field `initiator` in webhook payload for all events. It contains a "link" to the entity that initiated the webhook and metadata related to the event.

      Added new webhook events:
      * `file.info_updated` — file's `metadata` or `appdata` has been altered.
      * `file.deleted` — a file has been removed.
      * `file.stored` — a file has been stored.

      Learn more about [Webhook events](/docs/webhooks/#event-types).

      ### File metadata, September 8, 2022
      File metadata is introduced. [File metadata Upload API](/docs/api/upload/upload/file-upload-info/#response.body.metadata) provides an option to specify a file's metadata during the file uploading procedure. [File metadata REST API](https://uploadcare.com/docs/api/rest/file-metadata/) provides the ability to update the file's metadata.

      <table>
      <tr>
        <td>GET /files/{uuid}/metadata/</td>
        <td>Get file's metadata keys and values</td>
      </tr>
      <tr>
        <td>GET /files/{uuid}/metadata/{key}/</td>
        <td>Get the value of a single metadata key</td>
      </tr>
      <tr>
        <td>PUT /files/{uuid}/metadata/{key}/</td>
        <td>Update the value of a single metadata key. If the key does not exist, it will be created</td>
      </tr>
      <tr>
        <td>DELETE /files/{uuid}/metadata/{key}/</td>
        <td>Delete a file's metadata key</td>
      </tr>
      <tr>
        <td>GET /files/{uuid}/</td>
      </tr>
      </table>

      Learn more about [File metadata management](/docs/file-metadata/).

      ### Changes to previous API version (_released on 15 Aug 2022_)
      <table>
      <tr>
        <td>GET /files/{uuid}/</td>
        <td>File information doesn't return `image_info` and `video_info` fields anymore<br /><br />Added mime-type, image (dimensions, format, etc), video information (duration, format, bitrate, etc), audio information, etc. to `content_info` field <br /><br /> Associated field `appdata` that includes <a href="/docs/api/rest/file/info/">dictionary of application names and data</a> with these applications <br /><br />Removed `rekognition_info` in favor of `appdata` <br /><br /> Renamed Parameter `add_fields` to `include`</td>
      </tr>
      <tr>
        <td>DELETE /files/{uuid}/</td>
        <td>Removed in favour of `/files/{uuid}/storage/`</td>
      </tr>
      <tr>
        <td>GET /files/</td>
        <td>Remove the option of sorting the file list by file size</td>
      </tr>
      <tr>
        <td>PUT /group/{uuid}/storage/</td>
        <td>Removed. To store or remove files from a group, query the list of files in it, split the list into chunks of 100 files per chunk and then perform batch file storing or batch file removal for all the chunks</td>
      </tr>
      <tr>
        <td>DELETE /group/{uuid}/</td>
        <td>Added a possibility to delete a Group. Note: when we delete a group, we remove information about the group object itself, the files from the group are left intact</td>
      </tr>
      <tr>
        <td>POST /addons/uc_clamav_virus_scan/execute/</td>
        <td>Introduced ClamAV Add-On: perform virus scan on a target file</td>
      </tr>
      <tr>
        <td>GET /addons/uc_clamav_virus_scan/execute/status/</td>
        <td>Check ClamAV Add-On execution status</td>
      </tr>
      <tr>
        <td>POST /addons/aws_rekognition_detect_labels /execute/</td>
        <td>Introduced AWS Rekognition Add-On: detect labels on a target image and save results in the file's application data</td>
      </tr>
      <tr>
        <td>GET /addons/aws_rekognition_detect_labels /execute/status/</td>
        <td>Check AWS Rekognition Add-On execution status</td>
      </tr>
      <tr>
        <td>POST /addons/aws_rekognition_detect_ moderation_labels/execute/</td>
        <td>Introduced AWS Rekognition moderation Add-On: detect labels on a target image and save results in the file's application data</td>
      </tr>
      <tr>
        <td>GET /addons/aws_rekognition_detect_ moderation_labels/execute/status/</td>
        <td>Check AWS Rekognition moderation Add-On execution status</td>
      </tr>
      <tr>
        <td>POST /addons/remove_bg/execute/</td>
        <td>Introduced RemoveBG Add-On</td>
      </tr>
      <tr>
        <td>GET /addons/remove_bg/execute/status/</td>
        <td>Check RemoveBG Add-On execution status and get `file_id` with an UUID of the file with removed background</td>
      </tr>
      </table>
  - name: Versioning
    description: |
      When we introduce backward-incompatible changes, we release new major versions.
      Once published, such versions are supported for _2 years_.

      | Version                                               | Date Published | Available Until |
      | ----------------------------------------------------- | -------------- | --------------- |
      | [0.7](https://uploadcare.com/docs/api/rest/)      | 15 Aug 2022    | TBD             |
      | [0.6](https://uploadcare.com/api-refs/rest-api/v0.6/) | RC             | 15 Aug 2024     |
      | [0.5](https://uploadcare.com/api-refs/rest-api/v0.5/) | 1 Apr 2016     | 15 Aug 2024     |
      | 0.4                                                   | 13 Jun 2015    | 1 Sep 2019      |
      | 0.3                                                   | 11 Jun 2013    | 1 Sep 2019      |
      | 0.2                                                   | 7 Jun 2012     | 1 Sep 2019      |
      | 0.1                                                   | 31 May 2012    | 1 Feb 2019      |
      | Undefined                                             | 31 May 2012    | 1 Sep 2019      |

      Note, you won’t be able to use any API version after its support term.
      Requests to deprecated API versions will return error messages.
  - name: Other APIs
    description: |
      You can find the complete reference documentation for the Upload API [here](https://uploadcare.com/docs/api/upload/) and URL API [here](https://uploadcare.com/docs/api/url/).
paths:
  /files/:
    get:
      tags:
        - File
      summary: List of files
      description: Getting a paginated list of files. If you need multiple results pages, use `previous`/`next` from the response to navigate back/forth.
      operationId: filesList
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: query
          name: removed
          description: '`true` to only include removed files in the response, `false` to include existing files. Defaults to `false`.'
          schema:
            type: boolean
            default: false
            example: true
        - in: query
          name: stored
          description: '`true` to only include files that were stored, `false` to include temporary ones. The default is unset: both stored and not stored files are returned.'
          schema:
            type: boolean
            example: true
        - in: query
          name: limit
          description: A preferred amount of files in a list for a single response. Defaults to 100, while the maximum is 1000.
          schema:
            type: integer
            maximum: 1000
            minimum: 1
            example: 100
            default: 100
        - in: query
          name: ordering
          description: Specifies the way files are sorted in a returned list. `datetime_uploaded` for ascending order, `-datetime_uploaded` for descending order.
          schema:
            type: string
            enum:
              - datetime_uploaded
              - '-datetime_uploaded'
            default: datetime_uploaded
            example: '-datetime_uploaded'
        - in: query
          name: from
          description: A starting point for filtering the files. If provided, the value MUST adhere to the ISO 8601 Extended Date/Time Format (`YYYY-MM-DDTHH:MM:SSZ`).
          schema:
            type: string
            example: '2015-09-10T10:00:00Z'
        - in: query
          name: include
          description: 'Include additional fields to the file object, such as: appdata.'
          schema:
            type: string
          example: appdata
      responses:
        '200':
          $ref: '#/components/responses/paginatedFilesResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              listOfFiles,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await listOfFiles(
              {},
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $list = $api->listFiles();
            foreach ($list->getResults() as $result) {
                echo \sprintf('URL: %s', $result->getUrl());
            }
            while (($next = $api->nextPage($list)) !== null) {
                foreach ($next->getResults() as $result) {
                    echo \sprintf('URL: %s', $result->getUrl());
                }
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            files = uploadcare.list_files(stored=True, limit=10)
            for file in files:
                print(file.info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            list = Uploadcare::FileList.file_list(stored: true, removed: false, limit: 100)
            list.each { |file| puts file.inspect }
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let query = PaginationQuery()
              .stored(true)
              .ordering(.dateTimeUploadedDESC)
              .limit(10)
            var list = uploadcare.listOfFiles()

            try await list.get(withQuery: query)
            print(list)

            // Next page
            if list.next != nil {
              try await list.nextPage()
              print(list)
            }

            // Previous page
            if list.previous != nil {
              try await filesList.previousPage()
              print(list)
            }
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val filesQueryBuilder = uploadcare.getFiles()
            val files = filesQueryBuilder
                .stored(true)
                .ordering(Order.UPLOAD_TIME_DESC)
                .asList()
            Log.d("TAG", files.toString())
  /files/{uuid}/storage/:
    put:
      summary: Store file
      description: Store a single file by UUID. When file is stored, it is available permanently. If not stored — it will only be available for 24 hours. If the parameter is omitted, it checks the `Auto file storing` setting of your Uploadcare project identified by the `public_key` provided in the `auth-param`.
      tags:
        - File
      operationId: storeFile
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: path
          name: uuid
          description: File UUID.
          required: true
          schema:
            type: string
            format: uuid
            example: 21975c81-7f57-4c7a-aef9-acfe28779f78
      responses:
        '200':
          description: File stored. File info in JSON.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/file'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          $ref: '#/components/responses/fileNotFoundError'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              storeFile,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await storeFile(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $result = $api->storeFile('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('File %s is stored at %s', $result->getUuid(), $result->getDatetimeStored()->format(\DateTimeInterface::ATOM));
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            file.store()
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            Uploadcare::File.store(uuid)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let file = try await uploadcare.storeFile(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(file)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            uploadcare.saveFile("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
    delete:
      summary: Delete file
      tags:
        - File
      description: |
        Removes individual files. Returns file info.

        Note: this operation removes the file from storage but doesn't invalidate CDN cache.
      operationId: deleteFileStorage
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: path
          name: uuid
          description: File UUID.
          required: true
          schema:
            type: string
            format: uuid
            example: 21975c81-7f57-4c7a-aef9-acfe28779f78
      responses:
        '200':
          description: File deleted. File info in JSON.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/file'
              examples:
                Removed File:
                  $ref: '#/components/examples/file_removed'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          $ref: '#/components/responses/fileNotFoundError'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              deleteFile,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await deleteFile(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $fileInfo = (new Uploadcare\Api($configuration))->file()->deleteFile('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('File \'%s\' deleted at \'%s\'', $fileInfo->getUuid(), $fileInfo->getDatetimeRemoved()->format(\DateTimeInterface::ATOM));
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            file.delete()
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            puts Uploadcare::File.delete('1bac376c-aa7e-4356-861b-dd2657b5bfd2')
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let file = try await uploadcare.deleteFile(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(file)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            uploadcare.deleteFile(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
  /files/{uuid}/:
    get:
      summary: File info
      tags:
        - File
      description: Get file information by its UUID (immutable).
      operationId: fileInfo
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: path
          name: uuid
          description: File UUID.
          required: true
          schema:
            type: string
            format: uuid
            example: 03ccf9ab-f266-43fb-973d-a6529c55c2ae
        - in: query
          name: include
          description: 'Include additional fields to the file object, such as: appdata.'
          schema:
            type: string
          example: appdata
      responses:
        '200':
          description: File info in JSON.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/file'
              examples:
                Image:
                  $ref: '#/components/examples/file'
                Video:
                  $ref: '#/components/examples/file_video'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          $ref: '#/components/responses/fileNotFoundError'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              fileInfo,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await fileInfo(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $fileInfo = $api->fileInfo('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('URL: %s, ID: %s, Mime type: %s', $fileInfo->getUrl(), $fileInfo->getUuid(), $fileInfo->getMimeType());
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(file.info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            puts Uploadcare::File.info(uuid).inspect
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let fileInfoQuery = FileInfoQuery().include(.appdata)
            let file = try await uploadcare.fileInfo(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2", withQuery: fileInfoQuery)
            print(file)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val file = uploadcare.getFile(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", file.toString())
  /files/storage/:
    put:
      summary: Batch file storing
      description: Used to store multiple files in one go. Up to 100 files are supported per request. A JSON object holding your File list SHOULD be put into a request body.
      operationId: filesStoring
      tags:
        - File
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
                format: uuid
                description: List of file UUIDs to store.
              example:
                - 21975c81-7f57-4c7a-aef9-acfe28779f78
                - cbaf2d73-5169-4b2b-a543-496cf2813dff
      responses:
        '200':
          $ref: '#/components/responses/filesStorageResponse'
        '400':
          $ref: '#/components/responses/filesStoreUUIDSError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              storeFiles,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await storeFiles(
              {
                  uuids: [
                      'b7a301d1-1bd0-473d-8d32-708dd55addc0',
                      '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                    ]
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            use Uploadcare\Interfaces\File\FileInfoInterface;
            $api = (new Uploadcare\Api($configuration))->file();
            $result = $api->batchStoreFile(['b7a301d1-1bd0-473d-8d32-708dd55addc0', '1bac376c-aa7e-4356-861b-dd2657b5bfd2']);
            foreach ($result->getResult() as $result) {
                if (!$result instanceof FileInfoInterface) {
                    continue;
                }
                \sprintf('Result %s is stored at %s', $result->getUuid(), $result->getDatetimeStored()->format(\DateTimeInterface::ATOM));
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            files = [
                'b7a301d1-1bd0-473d-8d32-708dd55addc0',
                '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            ]
            uploadcare.store_files(files)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuids = %w[
              b7a301d1-1bd0-473d-8d32-708dd55addc0
              1bac376c-aa7e-4356-861b-dd2657b5bfd2
            ]
            Uploadcare::FileList.batch_store(uuids)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let uuids = [
              "b7a301d1-1bd0-473d-8d32-708dd55addc0",
              "1bac376c-aa7e-4356-861b-dd2657b5bfd2"
            ]
            let response = try await uploadcare.storeFiles(withUUIDs: uuids)
            print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val uuids = listOf(
                "b7a301d1-1bd0-473d-8d32-708dd55addc0",
                "1bac376c-aa7e-4356-861b-dd2657b5bfd2"
            )
            uploadcare.saveFiles(uuids)
    delete:
      summary: Batch file delete
      description: |
        Used to delete multiple files in one go. Up to 100 files are supported per request. A JSON object holding your File list SHOULD be put into a request body.

        Note: this operation removes files from storage but doesn't invalidate CDN cache.
      operationId: filesDelete
      tags:
        - File
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
                format: uuid
                description: List of file UUIDs to delete.
              example:
                - 21975c81-7f57-4c7a-aef9-acfe28779f78
                - cbaf2d73-5169-4b2b-a543-496cf2813dff
      responses:
        '200':
          $ref: '#/components/responses/filesStorageResponse'
        '400':
          $ref: '#/components/responses/filesStoreUUIDSError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              deleteFiles,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await deleteFiles(
              {
                  uuids: [
                      '21975c81-7f57-4c7a-aef9-acfe28779f78',
                      'cbaf2d73-5169-4b2b-a543-496cf2813dff',
                    ]
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $fileInfo = $api->fileInfo('21975c81-7f57-4c7a-aef9-acfe28779f78');
            $api->deleteFile($fileInfo);
            echo \sprintf('File \'%s\' deleted at \'%s\'', $fileInfo->getUuid(), $fileInfo->getDatetimeRemoved()->format(\DateTimeInterface::ATOM));
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            files = [
                '21975c81-7f57-4c7a-aef9-acfe28779f78',
                'cbaf2d73-5169-4b2b-a543-496cf2813dff'
                ]
            uploadcare.delete_files(files)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuids = %w[21975c81-7f57-4c7a-aef9-acfe28779f78 cbaf2d73-5169-4b2b-a543-496cf2813dff]
            puts Uploadcare::FileList.batch_delete(uuids)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let uuids = ["21975c81-7f57-4c7a-aef9-acfe28779f78", "cbaf2d73-5169-4b2b-a543-496cf2813dff"]
            try await uploadcare.deleteFiles(withUUIDs: uuids)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val uuids = listOf("21975c81-7f57-4c7a-aef9-acfe28779f78", "cbaf2d73-5169-4b2b-a543-496cf2813dff")
            uploadcare.deleteFiles(fileIds = uuids)
  /files/local_copy/:
    post:
      summary: Copy file to local storage
      description: |
        POST requests are used to copy original files or their modified versions to a default storage.

        Source files MAY either be stored or just uploaded and MUST NOT be deleted.

        Copying of large files is not supported at the moment. If the file CDN URL includes transformation operators, its size MUST NOT exceed 100 MB. If not, the size MUST NOT exceed 5 GB.

        Note: In the immediate 201 response, the `result.size` can be `0` and the `result.mime_type` can be `application/octet-stream`. This indicates the copy has been initiated but is not yet completed.
        Once the copy finishes, fetching the file info (e.g., `GET /files/{uuid}/`) will return the actual size and MIME type.
      tags:
        - File
      operationId: createLocalCopy
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - source
              type: object
              properties:
                source:
                  description: A CDN URL or just UUID of a file subjected to copy.
                  type: string
                  format: uri
                  example:
                    uuid:
                      value: 85b5644f-e692-4855-9db0-8c5a83096e25
                    cdn:
                      value: http://www.ucarecdn.com/85b5644f-e692-4855-9db0-8c5a83096e25/-/resize/200x/roof.jpg
                store:
                  description: The parameter only applies to the Uploadcare storage and MUST be either true or false.
                  type: string
                  enum:
                    - 'true'
                    - 'false'
                  default: 'false'
                  example: 'true'
                metadata:
                  description: Arbitrary additional metadata.
                  type: object
                  example:
                    subsystem: uploader
            example:
              source: 03ccf9ab-f266-43fb-973d-a6529c55c2ae
              store: 'true'
              metadata:
                subsystem: uploader
                pet: cat
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      responses:
        '201':
          description: The file was copied successfully. HTTP response contains `result` field with information about the copy.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/localCopyResponse'
        '400':
          $ref: '#/components/responses/fileCopyErrors'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              copyFileToLocalStorage,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await copyFileToLocalStorage(
              {
                source: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                store: true,
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $fileInfo = $api->copyToLocalStorage('03ccf9ab-f266-43fb-973d-a6529c55c2ae', true);
            echo \sprintf('File \'%s\' copied to local storage', $fileInfo->getUuid());
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            copied_file = file.create_local_copy(store=True)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            source = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            copied_file = Uploadcare::File.local_copy(source, store: true)
            puts copied_file.uuid
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let response = try await uploadcare.copyFileToLocalStorage(source: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val copyFile = uploadcare.copyFileLocalStorage(source = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", copyFile.toString())
  /files/remote_copy/:
    post:
      summary: Copy file to remote storage
      description: |
        POST requests are used to copy original files or their modified versions to the S3 bucket.

        Source files MAY either be stored or just uploaded and MUST NOT be deleted.

        Copying of large files is not supported at the moment. File size MUST NOT exceed 5 GB.
      tags:
        - File
      operationId: createRemoteCopy
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - source
                - target
              type: object
              properties:
                source:
                  description: A CDN URL or just UUID of a file subjected to copy.
                  type: string
                  format: uri
                  example:
                    uuid:
                      value: 85b5644f-e692-4855-9db0-8c5a83096e25
                    cdn:
                      value: http://www.ucarecdn.com/85b5644f-e692-4855-9db0-8c5a83096e25/-/resize/200x/roof.jpg
                target:
                  description: Identifies a custom storage name related to your project. It implies that you are copying a file to a specified custom storage. Keep in mind that you can have multiple storages associated with a single S3 bucket.
                  type: string
                  example: mytarget
                make_public:
                  description: MUST be either `true` or `false`. The `true` value makes copied files available via public links, `false` does the opposite.
                  type: boolean
                  default: true
                  example: true
                pattern:
                  description: |
                    The parameter is used to specify file names Uploadcare passes to the S3 bucket. If the parameter is omitted, your S3 bucket pattern is used. Use any combination of allowed values.

                    Parameter values:
                    - `${default}` = `${uuid}/${auto_filename}`
                    - `${auto_filename}` = `${filename}${effects}${ext}`
                    - `${effects}` = processing operations put into a CDN URL
                    - `${filename}` = original filename without extension
                    - `${uuid}` = file UUID
                    - `${ext}` = file extension, including period, e.g. .jpg
                  type: string
                  default: ${default}
                  enum:
                    - ${default}
                    - ${auto_filename}
                    - ${effects}
                    - ${filename}
                    - ${uuid}
                    - ${ext}
                  example: ${uuid}.${ext}
            example:
              source: 03ccf9ab-f266-43fb-973d-a6529c55c2ae
              target: mytarget
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      responses:
        '200':
          $ref: '#/components/responses/remoteCopyResponse'
        '201':
          $ref: '#/components/responses/remoteCopyResponse201'
        '400':
          description: Simple HTTP auth. on HTTP or file copy errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/responses/fileCopyErrors/content/application~1json/schema'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Copy Error:
                  value:
                    detail: Bad `source` parameter. Use UUID or CDN URL.
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              copyFileToRemoteStorage,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await copyFileToRemoteStorage(
              {
                source: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                target: 'custom_storage_connected_to_the_project',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $result = $api->copyToRemoteStorage('03ccf9ab-f266-43fb-973d-a6529c55c2ae', true);
            echo \sprintf('File \'%s\' copied to local storage', $result);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            r_copied_file = file.create_remote_copy(
                target='custom_storage_connected_to_the_project',
                make_public=True,
                pattern='${uuid}/${filename}${ext}',
            )
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            source_object = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            target = 'custom_storage_connected_to_the_project'
            copied_file_url = Uploadcare::File.remote_copy(source_object, target, make_public: true)
            puts copied_file_url
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let response = try await uploadcare.copyFileToRemoteStorage(source: "03ccf9ab-f266-43fb-973d-a6529c55c2ae", target: "mytarget", pattern: .uuid)
            print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val copyFile = uploadcare.copyFileRemoteStorage(
                source = "1bac376c-aa7e-4356-861b-dd2657b5bfd2",
                target = "custom_storage_connected_to_the_project"
            )
            Log.d("TAG", copyFile.toString())
  /addons/aws_rekognition_detect_labels/execute/:
    post:
      summary: Execute AWS Rekognition
      description: Execute [AWS Rekognition](https://docs.aws.amazon.com/rekognition/latest/dg/labels-detect-labels-image.html) Add-On for a given target to detect labels in an image. **Note:** Detected labels are stored in the file's appdata.
      tags:
        - Add-Ons
      operationId: awsRekognitionExecute
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                target:
                  description: Unique ID of the file to process
                  type: string
                  format: uuid
                  example: 21975c81-7f57-4c7a-aef9-acfe28779f78
              required:
                - target
      responses:
        '200':
          $ref: '#/components/responses/executeAddonResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '409':
          $ref: '#/components/responses/executeAddonConcurrentCallResponse'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $resultKey = $api->requestAwsRecognition('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('Recognition requested. Key is \'%s\'', $resultKey);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            target_file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            aws_recognition_result = uploadcare.addons_api.execute(
                target_file,
                AddonLabels.AWS_LABEL_RECOGNITION,
            )
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            Uploadcare::Addons.ws_rekognition_detect_labels(uuid)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let response = try await uploadcare.executeAWSRekognition(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(response) // contains requestID

            // Execute and wait for completion:
            let status = try await uploadcare.performAWSRekognition(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = AWSRekognitionAddOn(uploadcare)
            val response = addOn.execute(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", response.toString())
  /addons/aws_rekognition_detect_labels/execute/status/:
    get:
      summary: Check AWS Rekognition execution status
      description: |
        Check the status of an Add-On execution request that had been started
        using the [Execute Add-On](#operation/awsRekognitionExecute) operation.
      tags:
        - Add-Ons
      operationId: awsRekognitionExecutionStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: query
          name: request_id
          description: |
            Request ID returned by the Add-On execution request described above.
          schema:
            type: string
            format: uuid
          required: true
      responses:
        '200':
          $ref: '#/components/responses/addonExecutionStatusResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $status = $api->checkAwsRecognition('request-id');
            echo \sprintf('Recognition status: %s', $status);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            addon_task_status = uploadcare.addons_api.status(request_id, AddonLabels.AWS_LABEL_RECOGNITION)
            print(addon_task_status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            request_id = 'd1fb31c6-ed34-4e21-bdc3-4f1485f58e21'
            result = Uploadcare::Addons.ws_rekognition_detect_labels_status(request_id)
            puts result.status
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let status = try await uploadcare.checkAWSRekognitionStatus(requestID: "requestID")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = AWSRekognitionAddOn(uploadcare)
            val status = addOn.check(requestId = "d1fb31c6-ed34-4e21-bdc3-4f1485f58e21")
            Log.d("TAG", status.toString())
  /addons/aws_rekognition_detect_moderation_labels/execute/:
    post:
      summary: Execute AWS Rekognition Moderation
      description: Execute [AWS Rekognition Moderation](https://docs.aws.amazon.com/rekognition/latest/dg/moderation.html) Add-On for a given target to detect moderation labels in an image. **Note:** Detected moderation labels are stored in the file's appdata.
      tags:
        - Add-Ons
      operationId: awsRekognitionDetectModerationLabelsExecute
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                target:
                  description: Unique ID of the file to process
                  type: string
                  format: uuid
                  example: 21975c81-7f57-4c7a-aef9-acfe28779f78
              required:
                - target
      responses:
        '200':
          $ref: '#/components/responses/executeAddonResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '409':
          $ref: '#/components/responses/executeAddonConcurrentCallResponse'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $resultKey = $api->requestAwsRecognitionModeration('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('Recognition requested. Key is \'%s\'', $resultKey);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            target_file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            aws_recognition_result = uploadcare.addons_api.execute(
                target_file,
                AddonLabels.AWS_MODERATION_LABELS,
            )
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            Uploadcare::Addons.ws_rekognition_detect_moderation_labels(uuid)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let response = try await uploadcare.executeAWSRekognitionModeration(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(response) // contains requestID

            // Execute and wait for completion:
            let status = try await uploadcare.performAWSRekognitionModeration(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = AWSRekognitionModerationAddOn(uploadcare)
            val response = addOn.execute(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", response.toString())
  /addons/aws_rekognition_detect_moderation_labels/execute/status/:
    get:
      summary: Check AWS Rekognition Moderation execution status
      description: |
        Check the status of an Add-On execution request that had been started
        using the [Execute Add-On](#operation/awsRekognitionDetectModerationLabelsExecute) operation.
      tags:
        - Add-Ons
      operationId: awsRekognitionDetectModerationLabelsExecutionStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: query
          name: request_id
          description: |
            Request ID returned by the Add-On execution request described above.
          schema:
            type: string
            format: uuid
          required: true
      responses:
        '200':
          $ref: '#/components/responses/addonExecutionStatusResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $status = $api->checkAwsRecognitionModeration('request-id');
            echo \sprintf('Recognition status: %s', $status);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            addon_task_status = uploadcare.addons_api.status(request_id, AddonLabels.AWS_MODERATION_LABEL)
            print(addon_task_status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            request_id = 'd1fb31c6-ed34-4e21-bdc3-4f1485f58e21'
            result = Uploadcare::Addons.ws_rekognition_detect_moderation_labels_status(request_id)
            puts result.status
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let status = try await uploadcare.checkAWSRekognitionModerationStatus(requestID: "requestID")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = AWSRekognitionModerationAddOn(uploadcare)
            val status = addOn.check(requestId = "d1fb31c6-ed34-4e21-bdc3-4f1485f58e21")
            Log.d("TAG", status.toString())
  /addons/uc_clamav_virus_scan/execute/:
    post:
      summary: Execute ClamAV
      description: Execute [ClamAV](https://www.clamav.net/) virus checking Add-On for a given target.
      tags:
        - Add-Ons
      operationId: ucClamavVirusScanExecute
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                target:
                  description: Unique ID of the file to process
                  type: string
                  format: uuid
                  example: 21975c81-7f57-4c7a-aef9-acfe28779f78
                params:
                  description: Optional object with Add-On specific parameters
                  type: object
                  default: {}
                  properties:
                    purge_infected:
                      type: boolean
                      description: Purge infected file.
                      example: true
                  example:
                    purge_infected: true
              required:
                - target
      responses:
        '200':
          $ref: '#/components/responses/executeAddonResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '409':
          $ref: '#/components/responses/executeAddonConcurrentCallResponse'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              executeAddon,
              AddonName,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await executeAddon(
              {
                addonName: AddonName.UC_CLAMAV_VIRUS_SCAN,
                target: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $resultKey = $api->requestAntivirusScan('21975c81-7f57-4c7a-aef9-acfe28779f78');
            echo \sprintf('Antivirus scan requested. Key is \'%s\'', $resultKey);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            clamav_params = AddonClamAVExecutionParams(purge_infected=True)
            target_file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            clamav_result = uploadcare.addons_api.execute(
                target_file.uuid,
                AddonLabels.CLAM_AV,
                clamav_params
            )
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            Uploadcare::Addons.uc_clamav_virus_scan(uuid, purge_infected: true)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let parameters = ClamAVAddonExecutionParams(purgeInfected: true)
            let response = try await uploadcare.executeClamav(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2", parameters: parameters)
            print(response) // contains requestID

            // Execute and wait for completion:
            let status = try await uploadcare.performClamav(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2", parameters: parameters)
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = ClamAVAddOn(uploadcare)
            val response = addOn.execute(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", response.toString())
  /addons/uc_clamav_virus_scan/execute/status/:
    get:
      summary: Check ClamAV execution status
      description: |
        Check the status of an Add-On execution request that had been started
        using the [Execute Add-On](#operation/ucClamavVirusScanExecute) operation.
      tags:
        - Add-Ons
      operationId: ucClamavVirusScanExecutionStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: query
          name: request_id
          description: |
            Request ID returned by the Add-On execution request described above.
          schema:
            type: string
            format: uuid
          required: true
      responses:
        '200':
          $ref: '#/components/responses/addonExecutionStatusResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              addonExecutionStatus,
              AddonName,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await addonExecutionStatus(
              {
                addonName: AddonName.UC_CLAMAV_VIRUS_SCAN,
                requestId: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $status = $api->checkAntivirusScan('request-id');
            echo \sprintf('Antivirus scan status: %s', $status);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            addon_task_status = uploadcare.addons_api.status(request_id, AddonLabels.CLAM_AV)
            print(addon_task_status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            request_id = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            result = Uploadcare::Addons.uc_clamav_virus_scan_status(request_id)
            puts result.status
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let status = try await uploadcare.checkClamAVStatus(requestID: "requestID")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = ClamAVAddOn(uploadcare)
            val status = addOn.check(requestId = "d1fb31c6-ed34-4e21-bdc3-4f1485f58e21")
            Log.d("TAG", status.toString())
  /addons/remove_bg/execute/:
    post:
      summary: Execute Remove.bg
      description: Execute [remove.bg](https://remove.bg/) background image removal Add-On for a given target.
      tags:
        - Add-Ons
      operationId: removeBgExecute
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                target:
                  description: Unique ID of the file to process
                  type: string
                  format: uuid
                  example: 21975c81-7f57-4c7a-aef9-acfe28779f78
                params:
                  description: Optional object with Add-On specific parameters
                  type: object
                  properties:
                    crop:
                      type: boolean
                      default: false
                      description: Whether to crop off all empty regions
                    crop_margin:
                      type: string
                      default: '0'
                      description: Adds a margin around the cropped subject, e.g 30px or 30%
                    scale:
                      type: string
                      description: Scales the subject relative to the total image size, e.g 80%
                      example: 30%
                    add_shadow:
                      type: boolean
                      description: Whether to add an artificial shadow to the result
                      default: false
                    type_level:
                      type: string
                      enum:
                        - none
                        - '1'
                        - '2'
                        - latest
                      description: |
                        "none" = No classification (foreground_type won't bet set in the application data)

                        "1" = Use coarse classification classes: [person, product, animal, car, other]

                        "2" = Use more specific classification classes: [person, product, animal, car,
                              car_interior, car_part, transportation, graphics, other]

                        "latest" = Always use the latest classification classes available
                      default: none
                    type:
                      type: string
                      enum:
                        - auto
                        - person
                        - product
                        - car
                      description: Foreground type.
                    semitransparency:
                      type: boolean
                      description: Whether to have semi-transparent regions in the result
                      default: true
                    channels:
                      type: string
                      enum:
                        - rgba
                        - alpha
                      description: Request either the finalized image ('rgba', default) or an alpha mask ('alpha').
                      default: rgba
                    roi:
                      type: string
                      description: |
                        Region of interest: Only contents of this rectangular region can be detected
                        as foreground. Everything outside is considered background and will be removed.
                        The rectangle is defined as two x/y coordinates in the format "x1 y1 x2 y2".
                        The coordinates can be in absolute pixels (suffix 'px') or relative to the
                        width/height of the image (suffix '%'). By default, the whole image is the
                        region of interest ("0% 0% 100% 100%").
                      example: 0% 0% 90% 90%
                    position:
                      type: string
                      description: |
                        Positions the subject within the image canvas. Can be "original"
                        (default unless "scale" is given), "center" (default when "scale" is given) or a value from "0%" to "100%"
                        (both horizontal and vertical) or two values (horizontal, vertical).
                  default: {}
                  example:
                    crop: true
                    type_level: '2'
              required:
                - target
      responses:
        '200':
          $ref: '#/components/responses/executeAddonResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '409':
          $ref: '#/components/responses/executeAddonConcurrentCallResponse'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $resultKey = $api->requestRemoveBackground('21975c81-7f57-4c7a-aef9-acfe28779f78');
            echo \sprintf('Remove background requested. Key is \'%s\'', $resultKey);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            remove_bg_params = AddonRemoveBGExecutionParams(
                crop=True,
                crop_margin="20px",
                scale="15%",
                position ='',
                roi = ''
            )

            target_file = uploadcare.file("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            remove_bg_result = uploadcare.addons_api.execute(
                target_file,
                AddonLabels.REMOVE_BG,
                remove_bg_params
            )
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            Uploadcare::Addons.remove_bg(uuid, crop: true)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let parameters = RemoveBGAddonExecutionParams(crop: true, typeLevel: .two)
            let response = try await uploadcare.executeRemoveBG(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2", parameters: parameters)
            print(response) // contains requestID

            // Execute and wait for completion:
            let status = try await uploadcare.performRemoveBG(fileUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = RemoveBgAddOn(uploadcare)
            val response = addOn.execute(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", response.toString())
  /addons/remove_bg/execute/status/:
    get:
      summary: Check Remove.bg execution status
      description: |
        Check the status of an Add-On execution request that had been started
        using the [Execute Add-On](#operation/removeBgExecute) operation.
      tags:
        - Add-Ons
      operationId: removeBgExecutionStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: query
          name: request_id
          description: |
            Request ID returned by the Add-On execution request described above.
          schema:
            type: string
            format: uuid
          required: true
      responses:
        '200':
          description: Add-On execution response. See `file_id` in response in order to get image without background.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/addonExecutionStatus'
                  - type: object
                    properties:
                      result:
                        type: object
                        properties:
                          file_id:
                            type: string
                            description: UUID of the file with removed background.
                            example: 21975c81-7f57-4c7a-aef9-acfe28779f78
              example:
                result:
                  file_id: 21975c81-7f57-4c7a-aef9-acfe28779f78
                status: done
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->addons();
            $status = $api->checkRemoveBackground('request-id');
            echo \sprintf('Remove background status: %s', $status);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            addon_task_status = uploadcare.addons_api.status(request_id, AddonLabels.REMOVE_BG)
            print(addon_task_status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            request_id = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            result = Uploadcare::Addons.remove_bg_status(request_id)
            puts result.status
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let status = try await uploadcare.checkRemoveBGStatus(requestID: "requestID")
            print(status)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val addOn = RemoveBgAddOn(uploadcare)
            val status = addOn.check(requestId = "d1fb31c6-ed34-4e21-bdc3-4f1485f58e21")
            Log.d("TAG", status.toString())
  /files/{uuid}/metadata/:
    get:
      summary: Get file's metadata
      description: Get file's metadata keys and values.
      tags:
        - File metadata
      operationId: _fileMetadata
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: path
          name: uuid
          description: File UUID.
          required: true
          schema:
            type: string
            format: uuid
            example: 21975c81-7f57-4c7a-aef9-acfe28779f78
      responses:
        '200':
          $ref: '#/components/responses/fileMetadataResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              getMetadata,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await getMetadata(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->file();
            $fileInfo = $api->fileInfo('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf("File %s metadata:\n", $fileInfo->getUuid());
            foreach ($fileInfo->getMetadata() as $metaKey => $metaItem) {
                echo \sprintf("%s: %s\n", $metaKey, $metaItem);
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            value = uploadcare.metadata_api.get_all_metadata("1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(value)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            puts Uploadcare::FileMetadata.show(uuid, 'pet')
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let metadata = try await uploadcare.fileMetadata(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(metadata)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val metadata = uploadcare.getFileMetadata(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            Log.d("TAG", metadata.toString())
  /files/{uuid}/metadata/{key}/:
    get:
      summary: Get metadata key's value
      description: Get the value of a single metadata key.
      tags:
        - File metadata
      operationId: fileMetadataKey
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - $ref: '#/components/parameters/fileUUID'
        - $ref: '#/components/parameters/fileMetadataKey'
      responses:
        '200':
          description: Value of a file's metadata key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metadataItemValue'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              getMetadataValue,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await getMetadataValue(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                key: 'pet'
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->metadata();
            $metadata = $api->getMetadata('1bac376c-aa7e-4356-861b-dd2657b5bfd2');
            echo \sprintf('Value for key \'pet\' %s', $metadata['pet'] ?? 'does not exists');
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            value = uploadcare.metadata_api.get_key("1bac376c-aa7e-4356-861b-dd2657b5bfd2", "pet")
            print(value)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            puts Uploadcare::FileMetadata.index(uuid).inspect
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let value = try await uploadcare.fileMetadataValue(forKey: "pet", withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            print(value)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val value = uploadcare.getFileMetadataKeyValue(
                fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2",
                key = "pet"
            )
            Log.d("TAG", value)
    put:
      summary: Update metadata key's value
      description: Update the value of a single metadata key. If the key does not exist, it will be created.
      tags:
        - File metadata
      operationId: updateFileMetadataKey
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - $ref: '#/components/parameters/fileUUID'
        - $ref: '#/components/parameters/fileMetadataKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: string
              minLength: 1
              maxLength: 512
      responses:
        '200':
          description: Value of a file's metadata key successfully updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metadataItemValue'
        '201':
          description: Key of a file metadata successfully added.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/metadataItemValue'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              updateMetadata,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await updateMetadata(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                key: 'pet',
                value: 'dog',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->metadata();
            $result = $api->setKey('1bac376c-aa7e-4356-861b-dd2657b5bfd2', 'pet', 'dog');
            echo \sprintf('Metadata key \'pet\' is set to %s', $result['pet']);
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file_uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            key, value = "pet", "dog"
            uploadcare.metadata_api.update_or_create_key(file_uuid, key, value)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            key = 'pet'
            value = 'dog'
            Uploadcare::FileMetadata.update(uuid, key, value)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let response = try await uploadcare.updateFileMetadata(
              withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2", 
              key: "pet", 
              value: dog
            )
             print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val value = uploadcare.updateFileMetadataKeyValue(
                fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2",
                key = "pet",
                value = "dog"
            )
            Log.d("TAG", value)
    delete:
      summary: Delete metadata key
      description: Delete a file's metadata key.
      tags:
        - File metadata
      operationId: deleteFileMetadataKey
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - $ref: '#/components/parameters/fileUUID'
        - $ref: '#/components/parameters/fileMetadataKey'
      responses:
        '204':
          description: Key of a file metadata successfully deleted.
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              deleteMetadata,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await deleteMetadata(
              {
                uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
                key: 'delete_key',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $metadataApi = (new Uploadcare\Api($configuration))->metadata();
            try {
                $metadataApi->removeKey('1bac376c-aa7e-4356-861b-dd2657b5bfd2', 'pet');
            } catch (\Throwable $e) {
                echo \sprintf('Error while key removing: %s', $e->getMessage());
            }
            echo 'Key was successfully removed';
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file_uuid = '1bac376c-aa7e-4356-861b-dd2657b5bfd2'
            uploadcare.metadata_api.delete_key(file_uuid, mkey='pet')
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            puts Uploadcare::FileMetadata.delete('1bac376c-aa7e-4356-861b-dd2657b5bfd2', 'pet')
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            try await uploadcare.deleteFileMetadata(forKey: "pet",  withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            uploadcare.deleteFileMetadataKey(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2", key = "pet")
  /groups/:
    get:
      tags:
        - Group
      summary: List of groups
      description: Get a paginated list of groups.
      operationId: groupsList
      parameters:
        - in: header
          name: Accept
          description: Version header.
          schema:
            type: string
            nullable: true
            enum:
              - application/vnd.uploadcare-v0.7+json
            example: application/vnd.uploadcare-v0.7+json
          required: true
        - in: query
          name: limit
          description: |
            A preferred amount of groups in a list for a single response.
            Defaults to 100, while the maximum is 1000.
          schema:
            type: integer
            example: 150
        - in: query
          name: from
          description: |
            A starting point for filtering the list of groups.
            If passed, MUST be a date and time value in ISO-8601 format.
          schema:
            type: string
            format: date-time
            example: '2015-01-02T10:00:00.463352Z'
        - in: query
          name: ordering
          description: |
            Specifies the way groups should be sorted in the returned list.
            `datetime_created` for the ascending order (default),
            `-datetime_created` for the descending one.
          schema:
            type: string
            enum:
              - datetime_created
              - '-datetime_created'
            default: datetime_created
            example: '-datetime_created'
      responses:
        '200':
          $ref: '#/components/responses/paginatedGroupsResponse'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              listOfGroups,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await listOfGroups({}, { authSchema: uploadcareSimpleAuthSchema })
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->group();
            $list = $api->listGroups();
            foreach ($list->getResults() as $group) {
                \sprintf('Group URL: %s, ID: %s', $group->getUrl(), $group->getUuid());
            }
            while (($next = $api->nextPage($list)) !== null) {
                foreach ($next->getResults() as $group) {
                    \sprintf('Group URL: %s, ID: %s', $group->getUrl(), $group->getUuid());
                }
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            groups_list = uploadcare.list_file_groups()
            print('Number of groups is', groups_list.count())
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            groups = Uploadcare::GroupList.list(limit: 10)
            groups.each { |group| puts group.inspect }
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let query = GroupsListQuery()
              .limit(10)
              .ordering(.datetimeCreatedDESC)
              
            let groupsList = uploadcare.listOfGroups()

            let list = try await groupsList.get(withQuery: query)
            print(list)

            // Next page
            let next = try await groupsList.nextPage()
            print(list)

            // Previous page
            let previous = try await groupsList.previousPage()
            print(list)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val groupsQueryBuilder = uploadcare.getGroups()
            val groups = groupsQueryBuilder
                .ordering(Order.UPLOAD_TIME_DESC)
                .asList()
            Log.d("TAG", groups.toString())
  /groups/{uuid}/:
    get:
      summary: Group info
      description: |
        Get a file group by its ID.

        Groups are identified in a way similar to individual files. A group ID consists of a UUID
        followed by a “~” (tilde) character and a group size: integer number of the files in the group.
      operationId: groupInfo
      tags:
        - Group
      parameters:
        - in: header
          name: Accept
          description: Version header.
          schema:
            type: string
            nullable: true
            enum:
              - application/vnd.uploadcare-v0.7+json
            example: application/vnd.uploadcare-v0.7+json
          required: true
        - in: path
          name: uuid
          description: Group UUID.
          required: true
          schema:
            type: string
            example: badfc9f7-f88f-4921-9cc0-22e2c08aa2da~12
      responses:
        '200':
          description: Group's info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/groupWithFiles'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          $ref: '#/components/responses/groupNotFound'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              groupInfo,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await groupInfo(
              {
                uuid: 'c5bec8c7-d4b6-4921-9e55-6edb027546bc~1',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->group();
            $groupInfo = $api->groupInfo('c5bec8c7-d4b6-4921-9e55-6edb027546bc~1');
            echo \sprintf("Group: %s files:\n", $groupInfo->getUrl());
            foreach ($groupInfo->getFiles() as $file) {
                \sprintf('File: %s (%s)', $file->getUrl(), $file->getUuid());
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            group = uploadcare.file_group("c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
            print(group.info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = 'c5bec8c7-d4b6-4921-9e55-6edb027546bc~1'
            puts Uploadcare::Group.info(uuid).inspect
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let group = try await uploadcare.groupInfo(withUUID: "c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
            print(group)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val group = uploadcare.getGroup(groupId = "c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
            Log.d("TAG", group.toString())
    delete:
      summary: Delete group
      description: |
        Delete a file group by its ID.

        **Note**: The operation only removes the group object itself. **All the files that were part of the group are left as is.**
      operationId: deleteGroup
      tags:
        - Group
      parameters:
        - in: header
          name: Accept
          description: Version header.
          schema:
            type: string
            nullable: true
            enum:
              - application/vnd.uploadcare-v0.7+json
            example: application/vnd.uploadcare-v0.7+json
          required: true
        - in: path
          name: uuid
          description: Group UUID.
          required: true
          schema:
            type: string
            example: badfc9f7-f88f-4921-9cc0-22e2c08aa2da~12
      responses:
        '204':
          description: The group has been deleted successfully.
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          $ref: '#/components/responses/groupNotFound'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              deleteGroup,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await deleteGroup(
              {
                uuid: 'c5bec8c7-d4b6-4921-9e55-6edb027546bc~1',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->group();
            try {
                $api->removeGroup('c5bec8c7-d4b6-4921-9e55-6edb027546bc~1');
            } catch (\Throwable $e) {
                echo \sprintf('Error while group deletion: %s', $e->getMessage());
            }
            echo 'Group successfully deleted';
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file_group = uploadcare.file_group("c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
            file_group.delete()
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            puts Uploadcare::Group.delete('c5bec8c7-d4b6-4921-9e55-6edb027546bc~1')
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            try await uploadcare.deleteGroup(withUUID: "c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            uploadcare.deleteGroup(groupId = "c5bec8c7-d4b6-4921-9e55-6edb027546bc~1")
  /project/:
    get:
      tags:
        - Project
      summary: Project info
      description: Getting info about account project.
      operationId: projectInfo
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      responses:
        '200':
          description: Your project details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/project'
        '400':
          $ref: '#/components/responses/simpleAuthHTTPForbiddenResponse'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->project();
            $projectInfo = $api->getProjectInfo();
            echo \sprintf("Project %s info:\n", $projectInfo->getName());
            echo \sprintf("Public key: %s\n", $projectInfo->getPubKey());
            echo \sprintf("Auto-store enabled: %s\n", $projectInfo->isAutostoreEnabled() ? 'yes' : 'no');
            foreach ($projectInfo->getCollaborators() as $email => $name) {
                echo \sprintf("%s: %s\n", $name, $email);
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare, ProjectInfo
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            project_info = uploadcare.get_project_info()
            print(project_info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            project_info = Uploadcare::Project.show
            puts project_info.inspect
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let project = try await uploadcare.getProjectInfo()
            print(project)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val project = uploadcare.getProject()
            Log.d("TAG", project.toString())
  /webhooks/:
    get:
      summary: List of webhooks
      description: List of project webhooks.
      tags:
        - Webhook
      operationId: webhooksList
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      responses:
        '200':
          description: List of project webhooks.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/webhook_of_list_response'
        '400':
          description: Simple HTTP Auth or webhook permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseWebhooksError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseWebhooksError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              listOfWebhooks,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await listOfWebhooks({}, { authSchema: uploadcareSimpleAuthSchema })
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->webhook();
            foreach ($api->listWebhooks() as $webhook) {
                \sprintf("Webhook with url %s is %s\n", $webhook->getTargetUrl(), $webhook->isActive() ? 'active' : 'not active');
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare, Webhook
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            webhooks: list[Webhook] = list(uploadcare.list_webhooks(limit=10))
            for w in webhooks:
                print(w.id)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            webhooks = Uploadcare::Webhook.list
            webhooks.each { |webhook| puts webhook.inspect }
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let webhooks = try await uploadcare.getListOfWebhooks()
            for webhook in webhooks {
              print(webhook)
            }
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val webhooks = uploadcare.getWebhooks()
            Log.d("TAG", webhooks.toString())
    post:
      summary: Create webhook
      description: Create and subscribe to a webhook. You can use webhooks to receive notifications about your uploads. For instance, once a file gets uploaded to your project, we can notify you by sending a message to a target URL.
      operationId: webhookCreate
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      tags:
        - Webhook
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              required:
                - target_url
                - event
              type: object
              properties:
                target_url:
                  $ref: '#/components/schemas/webhook_target'
                event:
                  $ref: '#/components/schemas/webhook_event'
                is_active:
                  $ref: '#/components/schemas/webhook_is_active'
                signing_secret:
                  $ref: '#/components/schemas/webhook_signing_secret'
                version:
                  $ref: '#/components/schemas/webhook_version_of_request'
      callbacks:
        file-uploaded:
          '{$request.body#/target_url}':
            post:
              summary: file.uploaded event payload
              description: file.uploaded event payload
              parameters:
                - $ref: '#/components/parameters/webhookSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/webhookFilePayload'
              responses:
                2XX:
                  description: Webhook has been received successfully
        file-infected:
          '{$request.body#/target_url}':
            post:
              summary: file.infected event payload
              description: file.infected event payload
              parameters:
                - $ref: '#/components/parameters/webhookSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/webhookFilePayload'
              responses:
                2XX:
                  description: Webhook has been received successfully
        file-stored:
          '{$request.body#/target_url}':
            post:
              summary: file.stored event payload
              description: file.stored event payload
              parameters:
                - $ref: '#/components/parameters/webhookSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/webhookFilePayload'
              responses:
                2XX:
                  description: Webhook has been received successfully
        file-deleted:
          '{$request.body#/target_url}':
            post:
              summary: file.deleted event payload
              description: file.deleted event payload
              parameters:
                - $ref: '#/components/parameters/webhookSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/webhookFilePayload'
              responses:
                2XX:
                  description: Webhook has been received successfully
        file-info-updated:
          '{$request.body#/target_url}':
            post:
              summary: file.info_updated event payload
              description: file.info_updated event payload
              parameters:
                - $ref: '#/components/parameters/webhookSignature'
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/webhookFileInfoUpdatedPayload'
              responses:
                2XX:
                  description: Webhook has been received successfully
      responses:
        '201':
          description: Webhook successfully created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhook_of_list_response'
        '400':
          description: Simple HTTP Auth or webhook permission or endpoint errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseWebhooksError'
                  - $ref: '#/components/schemas/webhookTargetUrlError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseWebhooksError'
                Target URL Error:
                  $ref: '#/components/examples/webhookTargetUrlError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              createWebhook,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await createWebhook(
              {
                targetUrl: 'https://yourwebhook.com',
                event: 'file.uploaded',
                isActive: true,
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->webhook();
            $result = $api->createWebhook('https://yourwebhook.com', true, 'sign-secret', 'file.uploaded');
            echo \sprintf('Webhook %s created', $result->getId());
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare, Webhook
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            webhook = uploadcare.webhooks_api.create(
                {
                    "event": "file.uploaded",
                    "target_url": "https://yourwebhook.com",
                    "is_active": True,
                }
            )
            print(webhook)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            options = {
              target_url: 'https://yourwebhook.com',
              event: 'file.uploaded',
              is_active: true
            }
            Uploadcare::Webhook.create(**options)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let url = URL(string: "https://yourwebhook.com")!
            let webhook = try await uploadcare.createWebhook(targetUrl: url,  event: .fileUploaded, isActive: true, signingSecret: "sign-secret")
            print(webhook)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val url = URI("https://yourwebhook.com")
            val webhook = uploadcare.createWebhook(
                targetUrl = url,
                event = EventType.UPLOADED,
                isActive = true,
                signingSecret = "sign-secret"
            )
            Log.d("TAG", webhook.toString())
  /webhooks/{id}/:
    put:
      summary: Update webhook
      description: Update webhook attributes.
      operationId: updateWebhook
      tags:
        - Webhook
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - in: path
          name: id
          description: Webhook ID.
          schema:
            type: integer
            example: 143
          required: true
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                target_url:
                  $ref: '#/components/schemas/webhook_target'
                event:
                  $ref: '#/components/schemas/webhook_event'
                is_active:
                  $ref: '#/components/schemas/webhook_is_active'
                signing_secret:
                  $ref: '#/components/schemas/webhook_signing_secret'
      responses:
        '200':
          description: Webhook attributes successfully updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/webhook'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          description: Webhook with ID {id} not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Not found.
                    example: Not found.
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              updateWebhook,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await updateWebhook(
              {
                id: 1473151,
                targetUrl: 'https://yourwebhook.com',
                event: 'file.uploaded',
                isActive: true,
                signingSecret: 'webhook-secret',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->webhook();
            $webhook = $api->updateWebhook(1473151, [
                'target_url' => 'https://yourwebhook.com',
                'event' => 'file.uploaded',
                'is_active' => true,
                'signing_secret' => 'webhook-secret',
            ]);
            \sprintf("Webhook with url %s is %s\n", $webhook->getTargetUrl(), $webhook->isActive() ? 'active' : 'not active');
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare, Webhook
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            webhook_id = 1473151
            webhook = uploadcare.webhooks_api.update(webhook_id, {"is_active": False})
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            webhook_id = 1_473_151
            options = {
              target_url: 'https://yourwebhook.com',
              event: 'file.uploaded',
              is_active: true,
              signing_secret: 'webhook-secret'
            }
            Uploadcare::Webhook.update(webhook_id, options)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let url = URL(string: "https://yourwebhook.com")!
            let webhook = try await uploadcare.updateWebhook(id: 1473151, targetUrl: url, event: .fileInfoUpdated, isActive: true, signingSecret: "webhook-secret")
            print(webhook)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val url = URI("https://yourwebhook.com")
            val webhook = uploadcare.updateWebhook(
                webhookId = 1473151,
                targetUrl = url,
                event = EventType.UPLOADED,
                isActive = true,
                signingSecret = "",
            )
            Log.d("TAG", webhook.toString())
  /webhooks/unsubscribe/:
    delete:
      summary: Delete webhook
      description: Unsubscribe and delete a webhook.
      tags:
        - Webhook
      operationId: webhookUnsubscribe
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              required:
                - target_url
              type: object
              properties:
                target_url:
                  $ref: '#/components/schemas/webhook_target'
      responses:
        '204':
          description: Webhook successfully deleted.
        '400':
          description: Simple HTTP Auth or webhook permission or endpoint errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseWebhooksError'
                  - $ref: '#/components/schemas/webhookTargetUrlError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseWebhooksError'
                Target URL Error:
                  $ref: '#/components/examples/webhookTargetUrlError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              deleteWebhook,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await deleteWebhook(
              {
                targetUrl: 'https://yourwebhook.com',
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->webhook();
            $result = $api->deleteWebhook('https://yourwebhook.com');
            echo $result ? 'Webhook has been deleted' : 'Webhook is not deleted, something went wrong';
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare, Webhook
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            webhook_id = 1473151
            uploadcare.delete_webhook(webhook_id)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            puts Uploadcare::Webhook.delete('https://yourwebhook.com')
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let url = URL(string: "https://yourwebhook.com")!
            try await uploadcare.deleteWebhook(forTargetUrl: url)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val url = URI("https://yourwebhook.com")
            uploadcare.deleteWebhook(url)
  /convert/document/{uuid}/:
    get:
      tags:
        - Conversion
      summary: Document info
      description: The endpoint allows you to determine the document format and possible conversion formats.
      operationId: documentConvertInfo
      x-codeSamples:
        - lang: cURL
          label: cURL
          source: |
            curl -X GET "https://api.uploadcare.com/convert/document/UUID/" \
                 -H "Content-Type: application/json" \
                 -H "Accept: application/vnd.uploadcare-v0.7+json" \
                 -H "Authorization: Uploadcare.Simple YOUR_PUBLIC_KEY:YOUR_SECRET_KEY"
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            uuid = '740e1b8c-1ad8-4324-b7ec-112c79d8eac2'
            document_convert_info = uploadcare.document_convert_api.retrieve(uuid)
            print(document_convert_info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            uuid = '740e1b8c-1ad8-4324-b7ec-112c79d8eac2'
            puts Uploadcare::DocumentConverter.info(uuid)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let conversionToken = "YOUR_CONVERSION_TOKEN"
            let conversionStatus = try await uploadcare.documentConversionJobStatus(token: conversionToken)
            print(conversionStatus)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val documentInfo = uploadcare.getDocumentConversionInfo("YOUR_FILE_UUID")
            Log.d("TAG", status.toString())
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - name: uuid
          description: File uuid.
          in: path
          required: true
          schema:
            type: string
            example: 86c91c35-58e1-41f7-9b23-2d7652cfcd17
      responses:
        '200':
          $ref: '#/components/responses/documentInfoResponse'
        '400':
          description: Simple HTTP Auth or document conversion permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseDocsConversionError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseDocsConversionError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          description: Document with specified ID is not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
                    default: Not found.
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
        '503':
          description: Conversion service error.
          content:
            text/plain:
              schema:
                type: string
  /convert/document/:
    post:
      tags:
        - Conversion
      summary: Convert document
      description: Uploadcare allows you to convert files to different target formats. Check out the [conversion capabilities](https://uploadcare.com/docs/transformations/file-conversion/#document-file-formats) for each supported format.
      operationId: documentConvert
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/documentJobSubmitParameters'
      responses:
        '200':
          $ref: '#/components/responses/documentJobSubmitResponse'
        '400':
          description: Simple HTTP Auth or document conversion permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseDocsConversionError'
                  - $ref: '#/components/schemas/jsonObjectParseError'
                  - type: object
                    properties:
                      detail:
                        type: string
                        default: “paths” parameter is required.
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseDocsConversionError'
                json-parse-error:
                  $ref: '#/components/examples/jsonObjectParseError'
                path-error:
                  value:
                    detail: “paths” parameter is required.
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            use Uploadcare\Interfaces\Conversion\ConvertedItemInterface;
            use Uploadcare\Interfaces\Response\ResponseProblemInterface;
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->conversion();
            $request = new Uploadcare\Conversion\DocumentConversionRequest('pdf');
            $result = $api->convertDocument('1bac376c-aa7e-4356-861b-dd2657b5bfd2', $request);
            if ($result instanceof ConvertedItemInterface) {
                echo \sprintf('Conversion requested. Key is \'%s\'', $result->getToken());
            }
            if ($result instanceof ResponseProblemInterface) {
                echo \sprintf('Error in request: %s', $result->getReason());
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            file = uploadcare.file('1bac376c-aa7e-4356-861b-dd2657b5bfd2')
            transformation = DocumentTransformation().format(DocumentFormat.pdf)
            converted_file = file.convert(transformation)
            print(converted_file.info)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            document_params = { uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2', format: :pdf }
            options = { store: true }
            Uploadcare::DocumentConverter.convert(document_params, options)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let file = try await uploadcare.fileInfo(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            let settings = DocumentConversionJobSettings(forFile: file)
              .format(.pdf)
              
            let response = try await uploadcare.convertDocumentsWithSettings([settings])
            print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val conversionJob = DocumentConversionJob(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
                .apply { setFormat(DocumentFormat.PDF) }
            val converter = DocumentConverter(uploadcare, listOf(conversionJob))
            val response = converter.convertWithResultData()
            Log.d("TAG", response.toString())
  /convert/document/status/{token}/:
    get:
      tags:
        - Conversion
      summary: Document conversion job status
      description: Once you get a conversion job result, you can acquire a conversion job status via token. Just put it in your request URL as `:token`.
      operationId: documentConvertStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - name: token
          description: Job token.
          in: path
          schema:
            type: integer
          required: true
          example: 426339926
      responses:
        '200':
          $ref: '#/components/responses/documentJobStatusResponse'
        '400':
          description: Simple HTTP Auth or document conversion permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseDocsConversionError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseDocsConversionError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          description: Job with specified ID is not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
                    default: Not found.
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
        '503':
          description: Conversion service error.
          content:
            text/plain:
              schema:
                type: string
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              conversionJobStatus,
              ConversionType,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await conversionJobStatus(
              {
                type: ConversionType.DOCUMENT,
                token: 32921143
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->conversion();
            $status = $api->documentJobStatus(32921143);
            echo \sprintf('Conversion status: %s', $status->getError() ?? $status->getStatus());
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            token = 32921143
            document_convert_status = uploadcare.document_convert_api.status(token)
            print(document_convert_status.status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            token = 32_921_143
            puts Uploadcare::DocumentConverter.status(token)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let job = try await uploadcare.documentConversionJobStatus(token: 32921143)
            print(job.statusString)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val status = uploadcare.getDocumentConversionStatus(token = 32921143)
            Log.d("TAG", status.toString())
  /convert/video/:
    post:
      tags:
        - Conversion
      summary: Convert video
      description: Uploadcare video processing adjusts video quality, format (mp4, webm, ogg), and size, cuts it, and generates thumbnails. Processed video is instantly available over CDN.
      operationId: videoConvert
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/videoJobSubmitParameters'
      responses:
        '200':
          $ref: '#/components/responses/videoJobSubmitResponse'
        '400':
          description: Simple HTTP Auth or video conversion permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseVideoConversionError'
                  - $ref: '#/components/schemas/jsonObjectParseError'
                  - type: object
                    properties:
                      detail:
                        type: string
                        default: “paths” parameter is required.
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseVideoConversionError'
                json-parse-error:
                  $ref: '#/components/examples/jsonObjectParseError'
                path-error:
                  value:
                    detail: “paths” parameter is required.
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
      x-codeSamples:
        - lang: PHP
          label: PHP
          source: |
            <?php
            use Uploadcare\Interfaces\Conversion\ConvertedItemInterface;
            use Uploadcare\Interfaces\Response\ResponseProblemInterface;
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->conversion();
            $request = (new Uploadcare\Conversion\VideoEncodingRequest())
                ->setHorizontalSize(1024)
                ->setVerticalSize(768)
                ->setResizeMode('preserve_ratio')
                ->setTargetFormat('mp4');
            $result = $api->convertVideo('1bac376c-aa7e-4356-861b-dd2657b5bfd2', $request);
            if ($result instanceof ConvertedItemInterface) {
                echo \sprintf('Conversion requested. Key is \'%s\'', $result->getToken());
            }
            if ($result instanceof ResponseProblemInterface) {
                echo \sprintf('Error in request: %s', $result->getReason());
            }
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            transformation = (
                VideoTransformation()
                .format(VideoFormat.mp4)
                .size(width=640, height=480, resize_mode=ResizeMode.add_padding)
                .quality(Quality.lighter)
                .cut(start_time="0:1.535", length="0:10.0")
                .thumbs(10)
            )

            path = transformation.path('1bac376c-aa7e-4356-861b-dd2657b5bfd2')
            response = uploadcare.video_convert_api.convert([path])
            video_convert_info = response.result[0]
            converted_file = uploadcare.file(video_convert_info.uuid)
            video_convert_status = uploadcare.video_convert_api.status(video_convert_info.token)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            video_params = {
              uuid: '1bac376c-aa7e-4356-861b-dd2657b5bfd2',
              format: :mp4,
              quality: :lighter
            }
            options = { store: true }
            Uploadcare::VideoConverter.convert(video_params, options)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let file = try await uploadcare.fileInfo(withUUID: "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
            let settings = VideoConversionJobSettings(forFile: videoFile)
              .format(.mp4)
              .size(VideoSize(width: 640, height: 480))
              .resizeMode(.addPadding)
              .quality(.lighter)
              .cut( VideoCut(startTime: "0:0:5.000", length: "15") )
              .thumbs(10)

            let response = try await uploadcare.convertVideosWithSettings([settings])
            print(response)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val conversionJob = VideoConversionJob(fileId = "1bac376c-aa7e-4356-861b-dd2657b5bfd2")
                .apply {
                    setFormat(VideoFormat.MP4)
                    resize(width = 640, height = 480, resizeMode = VideoResizeMode.LETTERBOX)
                    quality(VideoQuality.LIGHTER)
                    cut(startTime = "0:0:5.000", length = "15")
                    thumbnails(10)
                }
            val converter = VideoConverter(uploadcare, listOf(conversionJob))
            val response = converter.convertWithResultData()
            Log.d("TAG", response.toString())
  /convert/video/status/{token}/:
    get:
      tags:
        - Conversion
      summary: Video conversion job status
      description: Once you get a processing job result, you can acquire a processing job status via token. Just put it in your request URL as `:token`.
      operationId: videoConvertStatus
      parameters:
        - $ref: '#/components/parameters/acceptHeader'
        - name: token
          description: Job token.
          in: path
          schema:
            type: integer
          required: true
          example: 426339926
      responses:
        '200':
          $ref: '#/components/responses/videoJobStatusResponse'
        '400':
          description: Simple HTTP Auth or video conversion permission errors.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
                  - $ref: '#/components/schemas/cantUseVideoConversionError'
              examples:
                Authentication Error:
                  $ref: '#/components/examples/simpleAuthHTTPForbidden'
                Permission Error:
                  $ref: '#/components/examples/cantUseVideoConversionError'
        '401':
          $ref: '#/components/responses/authorizationProblemsResponse'
        '404':
          description: Job with specified ID is not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
                    default: Not found.
        '406':
          $ref: '#/components/responses/invalidAcceptHeader'
        '429':
          $ref: '#/components/responses/requestWasThrottledError'
        '503':
          description: Conversion service error.
          content:
            text/plain:
              schema:
                type: string
      x-codeSamples:
        - lang: JavaScript
          label: JS
          source: |
            import {
              conversionJobStatus,
              ConversionType,
              UploadcareSimpleAuthSchema,
            } from '@uploadcare/rest-client';

            const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({
              publicKey: 'YOUR_PUBLIC_KEY',
              secretKey: 'YOUR_SECRET_KEY',
            });

            const result = await conversionJobStatus(
              {
                type: ConversionType.VIDEO,
                token: 1201016744
              },
              { authSchema: uploadcareSimpleAuthSchema }
            )
        - lang: PHP
          label: PHP
          source: |
            <?php
            $configuration = Uploadcare\Configuration::create((string) $_ENV['UPLOADCARE_PUBLIC_KEY'], (string) $_ENV['UPLOADCARE_SECRET_KEY']);

            $api = (new Uploadcare\Api($configuration))->conversion();
            $status = $api->videoJobStatus(1201016744);
            echo \sprintf('Conversion status: %s', $status->getError() ?? $status->getStatus());
        - lang: Python
          label: Python
          source: |
            from pyuploadcare import Uploadcare
            uploadcare = Uploadcare(public_key='YOUR_PUBLIC_KEY', secret_key='YOUR_SECRET_KEY')

            token = 1201016744
            video_convert_status = uploadcare.video_convert_api.status(token)
            print(video_convert_status.status)
        - lang: Ruby
          label: Ruby
          source: |
            require 'uploadcare'
            Uploadcare.config.public_key = 'YOUR_PUBLIC_KEY'
            Uploadcare.config.secret_key = 'YOUR_SECRET_KEY'

            token = 1_201_016_744
            puts Uploadcare::VideoConverter.status(token)
        - lang: Swift
          label: Swift
          source: |
            import Uploadcare

            let uploadcare = Uploadcare(withPublicKey: "YOUR_PUBLIC_KEY", secretKey: "YOUR_SECRET_KEY")

            let job = try await uploadcare.videoConversionJobStatus(token: 1201016744)
            print(job.statusString)
        - lang: Kotlin
          label: Kotlin
          source: |
            import com.uploadcare.android.library.api.UploadcareClient

            val uploadcare = UploadcareClient(publicKey = "YOUR_PUBLIC_KEY", secretKey = "YOUR_SECRET_KEY")

            val status = uploadcare.getVideoConversionStatus(token = 1201016744)
            Log.d("TAG", status.toString())
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |
        Every request made to `https://api.uploadcare.com/` MUST be signed. HTTPS SHOULD be used with any authorization scheme.

        Requests MUST contain the `Authorization` header defining `auth-scheme` and `auth-param`: `Authorization: auth-scheme auth-param`.

        Every request MUST contain the `Accept` header identifying the REST API version: `Accept: application/vnd.uploadcare-v0.7+json`.

        There are two available authorization schemes:
        * For production: `Uploadcare`, a scheme where a `signature`, not your Secret API Key MUST be specified. Signatures SHOULD be generated on backend.
        * For quick tests: `Uploadcare.Simple`, a simple scheme where your [Secret API Key](https://app.uploadcare.com/projects/-/api-keys/) MUST be specified in every request's `auth-param`.
    Uploadcare:
      type: apiKey
      in: header
      name: Uploadcare
      description: |
        With the `Uploadcare` authentication method:
        * `auth-param` is a `public_key:signature` pair, where your `secret_key` is used to derive `signature` but is _not included in every request_ itself.
        * You MUST also provide the `Date` header in [RFC2822](https://datatracker.ietf.org/doc/html/rfc2822#section-3.3) format with the time zone set to `GMT` (see the example below).
        * The date you provide MUST NOT exceed the 15-minute offset from the server time of the API endpoint.

        ```http
        Accept: application/vnd.uploadcare-v0.7+json
        Date: Fri, 30 Sep 2016 11:10:54 GMT
        Authorization: Uploadcare public_key:6ff75027649aadd4dc98c1f784444445d1e6ed82
        ```

        The `signature` part of the `Uploadcare` authentication method `auth-param` MUST be constructed from the following components:
        * Request type (`POST`, `GET`, `HEAD`, `OPTIONS`)
        * Hex md5 hash of the request body
        * `Content-Type` header value
        * `Date` header value
        * URI including path and parameters

        The parameters are then concatenated in textual order using LF: every value sits in a separate line. The result is then signed with [HMAC/SHA1](https://en.wikipedia.org/wiki/HMAC) using your project's `secret_key`.

        Take a look at the Python example of deriving `signature`; the example request is made to get a list of files:

        ```py
        import time
        import hashlib
        import hmac
        from email import utils

        # Specifying the project’s key
        SECRET_KEY = 'YOUR_SECRET_KEY'

        # Specifying request type
        verb = 'GET'

        # Calculate [md5](https://en.wikipedia.org/wiki/MD5) checksum for the request's HTTP body.
        # Note: Taking into account that in our example, we are sending an HTTP GET request,
        # and the request does not have anything in its HTTP body, we use an empty string as an input to the md5 hash function.
        # If we were to send an HTTP POST request with, for example, JSON in the request's body,
        # we would have to pass the JSON as the input to the md5 hash function.
        content_md5 = hashlib.md5(b'').hexdigest()

        # Content-Type header
        content_type = 'application/json'

        # Current time, e.g. 1541423681
        timestamp = int(time.time())
        # Date header ('Mon, 05 Nov 2018 13:14:41 GMT')
        date_header = utils.formatdate(timestamp, usegmt=True)

        # The request URI
        uri = '/files/?limit=1&stored=true'

        # Forming the final string: concatenating
        sign_string = '\n'.join([verb, content_md5, content_type, date_header, uri])

        # Calculating the signature,
        # the result may look like this: "3cbc4d2cf91f80c1ba162b926f8a975e8bec7995"
        signature = hmac.new(SECRET_KEY.encode(), sign_string.encode(), hashlib.sha1).hexdigest()
        ```

        Once `signature` is derived, it SHOULD be implemented into the request body:

        ```bash
        curl  \
            -H 'Content-Type: application/json' \
            -H 'Accept: application/vnd.uploadcare-v0.7+json' \
            -H 'Date: Mon, 05 Nov 2018 13:14:41 GMT' \
            -H 'Authorization: Uploadcare YOUR_PUBLIC_KEY:SIGNATURE' \
            'https://api.uploadcare.com/files/?limit=1&stored=true'
        ```
    Uploadcare.Simple:
      type: apiKey
      in: header
      name: Uploadcare.Simple
      description: |
        Note: We DO NOT recommend using this authentication method in production.

        With the `Uploadcare.Simple` authentication method, `auth-param` is your `public_key:secret_key` pair. Note that in this scheme, your Uploadcare project `secret_key` is  _included in every request as plain text_.

        ```http
        Accept: application/vnd.uploadcare-v0.7+json
        Authorization: Uploadcare.Simple public_key:secret_key
        ```
  responses:
    invalidAcceptHeader:
      description: Invalid version header `Accept` for this endpoint.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                example: Incorrect Accept header provided. Make sure to specify API version. Refer to REST API docs for details.
                default: Incorrect Accept header provided. Make sure to specify API version. Refer to REST API docs for details.
    authorizationProblemsResponse:
      description: Authorization errors.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                enum:
                  - Incorrect authentication credentials.
                  - Public key {public_key} not found.
                  - Secret key not found.
                  - Invalid signature. Please check your Secret key.
                example: Incorrect authentication credentials.
    simpleAuthHTTPForbiddenResponse:
      description: Simple authentication over HTTP is forbidden. Please, use HTTPS or signed requests instead.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/simpleAuthHTTPForbidden'
    requestWasThrottledError:
      description: Request was throttled.
      headers:
        Retry-After:
          description: Number of seconds to wait before the next request.
          schema:
            type: integer
            example: 10
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                example: Request was throttled. Expected available in 10 seconds.
    executeAddonResponse:
      description: Add-On execution response.
      content:
        application/json:
          schema:
            type: object
            properties:
              request_id:
                type: string
                format: uuid
                description: Request ID.
                example: 8db3c8b4-2dea-4146-bcdb-63387e2b33c1
    executeAddonConcurrentCallResponse:
      description: Add-On concurrent call attempt.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                example: Concurrent call attempted
                default: Concurrent call attempted
    addonExecutionStatusResponse:
      description: Add-On execution status response.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - in_progress
                  - error
                  - done
                  - unknown
                description: |-
                  Defines the status of an Add-On execution.
                  In most cases, once the status changes to `done`, [Application Data](#operation/fileInfo) of the file that had been specified as a `appdata`, will contain the result of the execution.
    fileMetadataResponse:
      description: File metadata in JSON.
      content:
        application/json:
          schema:
            type: object
            example:
              subsystem: uploader
              pet: cat
    paginatedFilesResponse:
      description: A list of files, paginated.
      content:
        application/json:
          schema:
            type: object
            properties:
              next:
                type: string
                format: uri
                description: Next page URL.
                nullable: true
                example: https://api.uploadcare.com/files/?from=2018-11-27T01%3A00%3A24.296613%2B00%3A00&limit=3&offset=0
              previous:
                type: string
                format: uri
                description: Previous page URL.
                nullable: true
                example: https://api.uploadcare.com/files/?limit=3&to=2018-11-27T01%3A00%3A36.436838%2B00%3A00&offset=0
              total:
                type: integer
                minimum: 0
                description: Total number of the files of the queried type. The queried type depends on the stored and removed query parameters.
                example: 26
              totals:
                type: object
                properties:
                  removed:
                    type: integer
                    minimum: 0
                    description: Total number of the files that are marked as removed.
                    default: 0
                    example: 0
                  stored:
                    type: integer
                    minimum: 0
                    description: Total number of the files that are marked as stored.
                    default: 0
                    example: 25
                  unstored:
                    type: integer
                    minimum: 0
                    description: Total number of the files that are not marked as stored.
                    default: 0
                    example: 1
                required:
                  - removed
                  - stored
                  - unstored
              per_page:
                type: integer
                description: Number of the files per page.
                example: 100
              results:
                type: array
                items:
                  $ref: '#/components/schemas/file'
          examples:
            With App Data:
              $ref: '#/components/examples/file_list_w_appdata'
            Without App Data:
              $ref: '#/components/examples/file_list'
    paginatedGroupsResponse:
      description: A list of groups, paginated.
      content:
        application/json:
          schema:
            type: object
            properties:
              next:
                type: string
                format: uri
                description: Next page URL.
                nullable: true
                example: https://api.uploadcare.com/groups/?limit=3&from=2018-11-27T01%3A00%3A24.296613%2B00%3A00&offset=0
              previous:
                type: string
                format: uri
                description: Previous page URL.
                nullable: true
                example: https://api.uploadcare.com/groups/?limit=3&to=2018-11-27T01%3A00%3A36.436838%2B00%3A00&offset=0
              total:
                type: integer
                minimum: 0
                description: Total number of groups in the project.
                example: 26
              per_page:
                type: integer
                description: Number of groups per page.
                example: 100
              results:
                type: array
                items:
                  $ref: '#/components/schemas/group'
          examples:
            List:
              $ref: '#/components/examples/group_list'
    filesStoreUUIDSError:
      description: File UUIDs list validation errors.
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/simpleAuthHTTPForbidden'
              - type: object
                description: File UUIDs list validation errors.
                properties:
                  detail:
                    type: string
                    enum:
                      - Expected list of UUIDs
                      - List of UUIDs can not be empty
                      - Maximum UUIDs per request is exceeded. The limit is 100
                    example: Expected list of UUIDs
    fileNotFoundError:
      description: File not found.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                description: Not found.
                example: Not found.
    filesStorageResponse:
      description: OK. See `problems` and `result` fields in the response. In case a file list provided in a request holds invalid UUIDs, they'll be included in the `problems` structure. Invalid UUIDs can be incomplete, associated with files that no longer exist, etc.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                example: ok
              problems:
                type: object
                description: Dictionary of passed files UUIDs and problems associated with these UUIDs.
                example:
                  21975c81-7f57-4c7a-aef9-acfe28779f78: Missing in the project
                  4j334o01-8bs3: Invalid
              result:
                description: List of file objects that have been stored/deleted.
                type: array
                items:
                  $ref: '#/components/schemas/file'
    fileCopyErrors:
      description: Possible errors for file copy endpoint.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                enum:
                  - Bad `source` parameter. Use UUID or CDN URL.
                  - '`source` parameter is required.'
                  - Project has no storage with provided name.
                  - '`store` parameter should be `true` or `false`.'
                  - 'Invalid pattern provided: `pattern_value`'
                  - 'Invalid pattern provided: Invalid character in a pattern.'
                  - File is not ready yet.
                  - Copying of large files is not supported at the moment.
                  - Not allowed on your current plan.
                example: File is not ready yet.
    groupNotFound:
      description: Group with `uuid` not found.
      content:
        application/json:
          schema:
            type: object
            properties:
              detail:
                type: string
                description: Group not found.
                example: Not found.
    documentJobSubmitResponse:
      description: Success.
      content:
        application/json:
          schema:
            type: object
            properties:
              problems:
                type: object
                description: Dictionary of problems related to your processing job, if any. A key is the `path` you requested.
                additionalProperties:
                  type: string
                  format: uuid
              result:
                type: array
                description: Result for each requested path, in case of no errors for that path.
                items:
                  type: object
                  properties:
                    original_source:
                      type: string
                      description: Source file identifier including a target format, if present.
                    uuid:
                      type: string
                      description: A UUID of your converted document.
                      format: uuid
                    token:
                      type: integer
                      description: A conversion job token that can be used to get a job status.
            example:
              problems:
                8ddbbb48-0927-4df7-afac-c6031668b01b: Bad path "8ddbbb48-0927-4df7-afac-c6031668b01b". Use UUID or CDN URL
              result:
                - original_source: https://cdn.uploadcare.com/5ffa2545-ea40-4e71-a9e4-3a8e49b7b737/document/-/format/jpg/-/page/1/
                  token: 445630631
                  uuid: d52d7136-a2e5-4338-9f45-affbf83b857d
                - original_source: 88a51210-bd69-4411-bc72-a9952d9512cd/document/-/format/pdf/
                  token: 445630637
                  uuid: 28843a09-dd3d-4b8a-ad4f-8aa5f8f60ff2
    documentJobStatusResponse:
      description: Success.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                description: 'Conversion job status, can have one of the following values: - `pending` — a source file is being prepared for conversion. - `processing` — conversion is in progress. - `finished` — the conversion is finished. - `failed` — failed to convert the source, see `error` for details. - `canceled` — the conversion was canceled.'
                enum:
                  - pending
                  - processing
                  - finished
                  - failed
                  - cancelled
              error:
                type: string
                nullable: true
                description: Holds a conversion error if your file can't be handled.
              result:
                type: object
                description: Repeats the contents of your processing output.
                properties:
                  uuid:
                    type: string
                    format: uuid
                    description: A UUID of a converted target file.
            example:
              status: processing
              error: null
              result:
                uuid: 500196bc-9da5-4aaf-8f3e-70a4ce86edae
    documentInfoResponse:
      description: Success.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                nullable: true
                description: Holds an error if your document can't be handled.
              format:
                type: object
                description: Document format details.
                properties:
                  name:
                    type: string
                    description: A detected document format.
                  conversion_formats:
                    type: array
                    description: The conversions that are supported for the document.
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Supported target document format.
              converted_groups:
                type: object
                description: Information about already converted groups.
                properties:
                  '{conversion_format}':
                    type: string
                    description: Converted group UUID.
            example:
              error: null
              format:
                name: txt
                conversion_formats:
                  - name: epub
                  - name: pdf
              converted_groups:
                pdf: 49732da8-1530-470c-8743-998c4c634718~5
    videoJobStatusResponse:
      description: Success.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                description: 'Processing job status, can have one of the following values: - `pending` — video file is being prepared for conversion. - `processing` — video file processing is in progress. - `finished` — the processing is finished. - `failed` — we failed to process the video, see `error` for details. - `canceled` — video processing was canceled.'
                enum:
                  - pending
                  - processing
                  - finished
                  - failed
                  - cancelled
              error:
                type: string
                nullable: true
                description: Holds a processing error if we failed to handle your video.
              result:
                type: object
                description: Repeats the contents of your processing output.
                properties:
                  uuid:
                    type: string
                    format: uuid
                    description: A UUID of your processed video file.
                  thumbnails_group_uuid:
                    type: string
                    format: uuid
                    description: A UUID of a file group with thumbnails for an output video, based on the `thumbs` operation parameters.
            example:
              status: processing
              error: null
              result:
                thumbnails_group_uuid: 575ed4e8-f4e8-4c14-a58b-1527b6d9ee46~1
                uuid: 500196bc-9da5-4aaf-8f3e-70a4ce86edae
    videoJobSubmitResponse:
      description: Success.
      content:
        application/json:
          schema:
            type: object
            properties:
              problems:
                type: object
                description: Dictionary of problems related to your processing job, if any. Key is the `path` you requested.
                additionalProperties:
                  type: string
                  format: uuid
              result:
                type: array
                description: Result for each requested path, in case of no errors for that path.
                items:
                  type: object
                  properties:
                    original_source:
                      type: string
                      description: Input file identifier including operations, if present.
                    uuid:
                      type: string
                      description: A UUID of your processed video file.
                      format: uuid
                    token:
                      type: integer
                      description: A processing job token that can be used to get a job status.
                    thumbnails_group_uuid:
                      description: UUID of a file group with thumbnails for an output video, based on the `thumbs` operation parameters.
                      type: string
                      format: uuid
            example:
              problems:
                13cd56e2-f6d7-4c66-ab1b-ffd13cd6646d: Bad path "13cd56e2-f6d7-4c66-ab1b-ffd13cd6646d". Use UUID or CDN URL
              result:
                - original_source: d52d7136-a2e5-4338-9f45-affbf83b857d/video/-/format/ogg/-/quality/best/
                  token: 445630631
                  thumbnails_group_uuid: 575ed4e8-f4e8-4c14-a58b-1527b6d9ee46~1
                  uuid: d52d7136-a2e5-4338-9f45-affbf83b857d
                - original_source: 500196bc-9da5-4aaf-8f3e-70a4ce86edae/video/
                  token: 445630637
                  thumbnails_group_uuid: be3b4d5e-179d-460e-8a5d-69112ac86cbb~1
                  uuid: 28843a09-dd3d-4b8a-ad4f-8aa5f8f60ff2
    remoteCopyResponse:
      description: Destination file with that name already exists. Check the `pattern` parameter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/copiedFileURL'
    remoteCopyResponse201:
      description: The file was copied successfully. HTTP response contains `result` field with the URL of the file on the remote storage.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/copiedFileURL'
  schemas:
    addonExecutionStatus:
      type: object
      properties:
        status:
          type: string
          enum:
            - in_progress
            - error
            - done
            - unknown
          description: |-
            Defines the status of an Add-On execution.
            In most cases, once the status changes to `done`, [Application Data](#operation/fileInfo) of the file that had been specified as a `appdata`, will contain the result of the execution.
    webhookFilePayload:
      type: object
      required:
        - initiator
        - hook
        - data
        - file
      properties:
        initiator:
          $ref: '#/components/schemas/webhookInitiator'
        hook:
          $ref: '#/components/schemas/webhookPublicInfo'
        data:
          $ref: '#/components/schemas/file'
        file:
          description: File CDN URL.
          type: string
          format: uri
    webhookFileInfoUpdatedPayload:
      type: object
      required:
        - initiator
        - hook
        - data
        - file
        - previous_values
      properties:
        initiator:
          $ref: '#/components/schemas/webhookInitiator'
        hook:
          $ref: '#/components/schemas/webhookPublicInfo'
        data:
          $ref: '#/components/schemas/file'
        file:
          description: File CDN URL.
          type: string
          format: uri
        previous_values:
          type: object
          description: Object containing the values of the updated file data attributes and their values prior to the event.
          properties:
            appdata:
              $ref: '#/components/schemas/applicationDataObject'
            metadata:
              $ref: '#/components/schemas/metadata'
    fileCopy:
      type: object
      required:
        - datetime_removed
        - datetime_stored
        - datetime_uploaded
        - is_image
        - is_ready
        - mime_type
        - original_file_url
        - original_filename
        - size
        - url
        - uuid
        - variations
        - content_info
        - metadata
      properties:
        datetime_removed:
          type: string
          format: date-time
          nullable: true
          description: Date and time when a file was removed, if any.
        datetime_stored:
          type: string
          format: date-time
          nullable: true
          description: Date and time of the last store request, if any.
        datetime_uploaded:
          type: string
          format: date-time
          description: Date and time when a file was uploaded.
        is_image:
          type: boolean
          description: Is file is image.
          example: true
        is_ready:
          type: boolean
          description: Is file is ready to be used after upload.
          example: true
        mime_type:
          type: string
          description: File MIME-type. In the immediate response after starting a local copy, it can be `application/octet-stream` until the copy completes.
          example: image/jpeg
        original_file_url:
          type: string
          format: uri
          description: Publicly available file CDN URL. Available if a file is not deleted.
          nullable: true
        original_filename:
          type: string
          description: Original file name taken from uploaded file.
          example: EU_4.jpg
        size:
          type: integer
          enum:
            - 0
          description: File size in bytes. In the immediate response after starting a local copy, it can be `0` until the copy completes.
          example: 0
        url:
          type: string
          format: uri
          description: API resource URL for a particular file.
        uuid:
          type: string
          format: uuid
          description: File UUID.
          example: 575ed4e8-f4e8-4c14-a58b-1527b6d9ee46
        variations:
          enum:
            - null
        content_info:
          enum:
            - null
        metadata:
          $ref: '#/components/schemas/metadata'
    file:
      type: object
      required:
        - datetime_removed
        - datetime_stored
        - datetime_uploaded
        - is_image
        - is_ready
        - mime_type
        - original_file_url
        - original_filename
        - size
        - url
        - uuid
        - variations
        - content_info
        - metadata
      properties:
        datetime_removed:
          type: string
          format: date-time
          nullable: true
          description: Date and time when a file was removed, if any.
        datetime_stored:
          type: string
          format: date-time
          nullable: true
          description: Date and time of the last store request, if any.
        datetime_uploaded:
          type: string
          format: date-time
          description: Date and time when a file was uploaded.
        is_image:
          type: boolean
          description: Is file is image.
          example: true
        is_ready:
          type: boolean
          description: Is file is ready to be used after upload.
          example: true
        mime_type:
          type: string
          description: File MIME-type.
          example: image/jpeg
        original_file_url:
          type: string
          format: uri
          description: Publicly available file CDN URL. Available if a file is not deleted.
          nullable: true
          example: https://ucarecdn.com/e575ed4e8-f4e8-4c14-a58b-1527b6d9ee46/EU_4.jpg
        original_filename:
          type: string
          description: Original file name taken from uploaded file.
          example: EU_4.jpg
        size:
          type: integer
          description: File size in bytes.
          example: 145212
        url:
          type: string
          format: uri
          description: API resource URL for a particular file.
          example: https://api.uploadcare.com/files/e10ce759-42c3-4185-bae5-e22a9143d68f/
        uuid:
          type: string
          format: uuid
          description: File UUID.
          example: 575ed4e8-f4e8-4c14-a58b-1527b6d9ee46
        appdata:
          $ref: '#/components/schemas/applicationDataObject'
        variations:
          type: object
          nullable: true
          description: 'Dictionary of other files that were created using this file as a source. It''s used for video processing and document conversion jobs. E.g., `<conversion_path>: <uuid>`.'
        content_info:
          $ref: '#/components/schemas/contentInfo'
        metadata:
          $ref: '#/components/schemas/metadata'
      example:
        datetime_removed: null
        datetime_stored: '2018-11-26T12:49:10.477888Z'
        datetime_uploaded: '2018-11-26T12:49:09.945335Z'
        variations: null
        is_image: true
        is_ready: true
        mime_type: image/jpeg
        original_file_url: https://ucarecdn.com/22240276-2f06-41f8-9411-755c8ce926ed/pineapple.jpg
        original_filename: pineapple.jpg
        size: 642
        url: https://api.uploadcare.com/files/22240276-2f06-41f8-9411-755c8ce926ed/
        uuid: 22240276-2f06-41f8-9411-755c8ce926ed
        content_info:
          mime:
            mime: image/jpeg
            type: image
            subtype: jpeg
          image:
            format: JPEG
            width: 500
            height: 500
            sequence: false
            color_mode: RGB
            orientation: 6
            geo_location:
              latitude: 55.62013611111111
              longitude: 37.66299166666666
            datetime_original: '2018-08-20T08:59:50'
            dpi:
              - 72
              - 72
        metadata:
          subsystem: uploader
          pet: cat
        appdata:
          aws_rekognition_detect_labels:
            data:
              LabelModelVersion: '2.0'
              Labels:
                - Confidence: 93.41645812988281
                  Instances: []
                  Name: Home Decor
                  Parents: []
                - Confidence: 70.75951385498047
                  Instances: []
                  Name: Linen
                  Parents:
                    - Name: Home Decor
                - Confidence: 64.7123794555664
                  Instances: []
                  Name: Sunlight
                  Parents: []
                - Confidence: 56.264793395996094
                  Instances: []
                  Name: Flare
                  Parents:
                    - Name: Light
                - Confidence: 50.47153854370117
                  Instances: []
                  Name: Tree
                  Parents:
                    - Name: Plant
            version: '2016-06-27'
            datetime_created: '2021-09-21T11:25:31.259763Z'
            datetime_updated: '2021-09-21T11:27:33.359763Z'
          aws_rekognition_detect_moderation_labels:
            data:
              ModerationModelVersion: '6.0'
              ModerationLabels:
                - Confidence: 93.41645812988281
                  Name: Weapons
                  ParentName: Violence
            version: '2016-06-27'
            datetime_created: '2023-02-21T11:25:31.259763Z'
            datetime_updated: '2023-02-21T11:27:33.359763Z'
          remove_bg:
            data:
              foreground_type: person
            version: '1.0'
            datetime_created: '2021-07-25T12:24:33.159663Z'
            datetime_updated: '2021-07-25T12:24:33.159663Z'
          uc_clamav_virus_scan:
            data:
              infected: true
              infected_with: Win.Test.EICAR_HDB-1
            version: 0.104.2
            datetime_created: '2021-09-21T11:24:33.159663Z'
            datetime_updated: '2021-09-21T11:24:33.159663Z'
    metadata:
      type: object
      nullable: true
      description: Arbitrary metadata associated with a file.
    metadataItemValue:
      type: string
      minLength: 1
      maxLength: 512
      description: Value of metadata key.
      example: uploader
    contentInfo:
      type: object
      nullable: true
      description: Information about file content.
      properties:
        mime:
          type: object
          description: MIME type.
          required:
            - mime
            - type
            - subtype
          properties:
            mime:
              type: string
              description: Full MIME type.
              example: image/jpeg
            type:
              type: string
              description: Type of MIME type.
              example: image
            subtype:
              type: string
              description: Subtype of MIME type.
              example: jpeg
        image:
          $ref: '#/components/schemas/imageInfo'
        video:
          $ref: '#/components/schemas/videoInfo'
    imageInfo:
      type: object
      description: Image metadata.
      required:
        - color_mode
        - orientation
        - format
        - height
        - width
        - geo_location
        - datetime_original
        - dpi
        - sequence
      properties:
        color_mode:
          type: string
          description: Image color mode.
          enum:
            - RGB
            - RGBA
            - RGBa
            - RGBX
            - L
            - LA
            - La
            - P
            - PA
            - CMYK
            - YCbCr
            - HSV
            - LAB
          example: RGBA
        orientation:
          type: integer
          description: Image orientation from EXIF.
          nullable: true
          minimum: 0
          maximum: 8
          example: 6
        format:
          type: string
          description: Image format.
          example: JPEG
        sequence:
          type: boolean
          description: Set to true if a file contains a sequence of images (GIF for example).
          example: false
        height:
          type: integer
          description: Image height in pixels.
          example: 2352
        width:
          type: integer
          description: Image width in pixels.
          example: 2935
        geo_location:
          description: Geo-location of image from EXIF.
          type: object
          nullable: true
          required:
            - latitude
            - longitude
          properties:
            latitude:
              type: number
              description: Location latitude.
              example: -1.1884555555555556
            longitude:
              type: number
              description: Location longitude.
              example: 52.66996666666667
        datetime_original:
          type: string
          description: Image date and time from EXIF. Please be aware that this data is not always formatted and displayed exactly as it appears in the EXIF.
          nullable: true
          format: date-time
          example: '2018-09-13T16:23:40'
        dpi:
          type: array
          description: Image DPI for two dimensions.
          nullable: true
          items:
            type: number
            example: 72
          minItems: 2
          maxItems: 2
          example:
            - 72
            - 72
    videoInfo:
      type: object
      description: Video metadata.
      required:
        - duration
        - format
        - bitrate
        - audio
        - video
      properties:
        duration:
          type: integer
          description: Video file's duration in milliseconds.
          nullable: true
          example: 261827
        format:
          type: string
          description: Video file's format.
          example: mp4
        bitrate:
          type: integer
          description: Video file's bitrate.
          nullable: true
          example: 393
        audio:
          type: array
          items:
            type: object
            description: Audio stream's metadata.
            required:
              - bitrate
              - codec
              - sample_rate
              - channels
            properties:
              bitrate:
                type: integer
                description: Audio stream's bitrate.
                nullable: true
                example: 78
              codec:
                type: string
                description: Audio stream's codec.
                nullable: true
                example: aac
              sample_rate:
                type: integer
                description: Audio stream's sample rate.
                nullable: true
                example: 44100
              channels:
                type: integer
                description: Audio stream's number of channels.
                nullable: true
                example: 2
        video:
          type: array
          items:
            type: object
            description: Video stream's metadata.
            required:
              - height
              - width
              - frame_rate
              - bitrate
              - codec
            properties:
              height:
                type: integer
                description: Video stream's image height.
                example: 360
              width:
                type: integer
                description: Video stream's image width.
                example: 640
              frame_rate:
                type: number
                description: Video stream's frame rate.
                example: 30
              bitrate:
                type: integer
                description: Video stream's bitrate.
                nullable: true
                example: 315
              codec:
                type: string
                description: Video stream's codec.
                nullable: true
                example: h264
    copiedFileURL:
      type: object
      properties:
        type:
          type: string
          default: url
          example: url
        result:
          type: string
          format: url
          description: URL with an s3 scheme. Your bucket name is put as a host, and an s3 object path follows.
          example: s3://mybucket/03ccf9ab-f266-43fb-973d-a6529c55c2ae/image.png
    group:
      type: object
      properties:
        id:
          type: string
          description: Group's identifier.
        datetime_created:
          type: string
          format: date-time
          description: ISO-8601 date and time when the group was created.
        files_count:
          type: integer
          minimum: 1
          description: Number of the files in the group.
        cdn_url:
          type: string
          format: uri
          description: Group's CDN URL.
        url:
          type: string
          format: uri
          description: Group's API resource URL.
      example:
        id: dd43982b-5447-44b2-86f6-1c3b52afa0ff~1
        datetime_created: '2018-11-27T14:14:37.583654Z'
        files_count: 1
        cdn_url: https://ucarecdn.com/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
        url: https://api.uploadcare.com/groups/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
    groupWithFiles:
      allOf:
        - $ref: '#/components/schemas/group'
        - type: object
          properties:
            files:
              type: array
              description: |
                The list of files in the group. An array may contain null values if a file has been removed.
              nullable: true
              allOf:
                - $ref: '#/components/schemas/file'
                - type: object
                  properties:
                    default_effects:
                      type: string
                      format: uri
                      description: The field contains a set of processing operations applied to the file when the group was created. This set is applied by default when the file is reffered via a group CDN URL and `/nth/N/` operator.
                      example: resize/x800/
          example:
            id: dd43982b-5447-44b2-86f6-1c3b52afa0ff~1
            datetime_created: '2018-11-27T14:14:37.583654Z'
            files_count: 1
            cdn_url: https://ucarecdn.com/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
            url: https://api.uploadcare.com/groups/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
            files:
              - datetime_removed: null
                datetime_stored: '2018-11-26T12:49:10.477888Z'
                datetime_uploaded: '2018-11-26T12:49:09.945335Z'
                variations: null
                is_image: true
                is_ready: true
                mime_type: image/jpeg
                original_file_url: https://ucarecdn.com/22240276-2f06-41f8-9411-755c8ce926ed/pineapple.jpg
                original_filename: pineapple.jpg
                size: 642
                url: https://api.uploadcare.com/files/22240276-2f06-41f8-9411-755c8ce926ed/
                uuid: 22240276-2f06-41f8-9411-755c8ce926ed
                content_info:
                  mime:
                    mime: image/jpeg
                    type: image
                    subtype: jpeg
                  image:
                    format: JPEG
                    width: 500
                    height: 500
                    sequence: false
                    color_mode: RGB
                    orientation: 6
                    geo_location:
                      latitude: 55.62013611111111
                      longitude: 37.66299166666666
                    datetime_original: '2018-08-20T08:59:50'
                    dpi:
                      - 72
                      - 72
                metadata:
                  subsystem: uploader
                  pet: cat
                default_effects: resize/x800/
    project:
      type: object
      properties:
        collaborators:
          type: array
          nullable: true
          items:
            type: object
            properties:
              email:
                type: string
                format: email
                description: Collaborator email.
              name:
                type: string
                description: Collaborator name.
        name:
          type: string
          description: Project login name.
        pub_key:
          type: string
          description: Project public key.
        autostore_enabled:
          type: boolean
          example: true
      example:
        collaborators: []
        name: demo
        pub_key: YOUR_PUBLIC_KEY
        autostore_enabled: true
    webhook_id:
      type: integer
      description: Webhook's ID.
      example: 1234
    webhook_project:
      type: integer
      description: Project ID the webhook belongs to.
      example: 39123
    webhook_project_pubkey:
      type: string
      description: Public project key the webhook belongs to.
      example: 2d199fbf3896699a2639
    webhook_created:
      type: string
      format: date-time
      description: date-time when a webhook was created.
      example: '2018-11-26T12:49:10.477888Z'
    webhook_updated:
      type: string
      format: date-time
      description: date-time when a webhook was updated.
      example: '2018-11-26T12:49:10.477888Z'
    webhook_target:
      type: string
      format: uri
      maxLength: 255
      description: A URL that is triggered by an event, for example, a file upload. A target URL MUST be unique for each `project` — `event type` combination.
      example: http://example.com/hooks/receiver
    webhook_event:
      type: string
      description: An event you subscribe to.
      enum:
        - file.uploaded
        - file.infected
        - file.stored
        - file.deleted
        - file.info_updated
      example: file.uploaded
    webhook_is_active:
      type: boolean
      description: Marks a subscription as either active or not, defaults to `true`, otherwise `false`.
      default: true
      example: false
    webhook_signing_secret:
      type: string
      format: password
      maxLength: 32
      example: 7kMVZivndx0ErgvhRKAr
      description: |
        Optional [HMAC/SHA-256](https://en.wikipedia.org/wiki/HMAC) secret that, if set, will be used to
        calculate signatures for the webhook payloads sent to the `target_url`.

        Calculated signature will be sent to the `target_url` as a value of the `X-Uc-Signature` HTTP
        header. The header will have the following format: `X-Uc-Signature: v1=<HMAC-SHA256-HEX-DIGEST>`.
        See [Secure Webhooks](https://uploadcare.com/docs/webhooks/#signed-webhooks) for details.
    webhook_version:
      type: string
      description: Webhook payload's version.
      enum:
        - '0.7'
      example: '0.7'
    webhook_version_of_request:
      type: string
      description: Webhook payload's version.
      enum:
        - '0.7'
      example: '0.7'
      default: '0.7'
    webhook_version_of_list_response:
      type: string
      description: Webhook payload's version.
      enum:
        - ''
        - '0.5'
        - '0.6'
        - '0.7'
      example: '0.7'
    webhook:
      description: Webhook.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/webhook_id'
        project:
          $ref: '#/components/schemas/webhook_project'
        created:
          $ref: '#/components/schemas/webhook_created'
        updated:
          $ref: '#/components/schemas/webhook_updated'
        event:
          $ref: '#/components/schemas/webhook_event'
        target_url:
          $ref: '#/components/schemas/webhook_target'
        is_active:
          $ref: '#/components/schemas/webhook_is_active'
        version:
          $ref: '#/components/schemas/webhook_version'
        signing_secret:
          $ref: '#/components/schemas/webhook_signing_secret'
      example:
        id: 1
        project: 13
        created: '2016-04-27T11:49:54.948615Z'
        updated: '2016-04-27T12:04:57.819933Z'
        event: file.infected
        target_url: http://example.com/hooks/receiver
        is_active: true
        signing_secret: 7kMVZivndx0ErgvhRKAr
        version: '0.7'
    webhook_of_list_response:
      description: Webhook.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/webhook_id'
        project:
          $ref: '#/components/schemas/webhook_project'
        created:
          $ref: '#/components/schemas/webhook_created'
        updated:
          $ref: '#/components/schemas/webhook_updated'
        event:
          $ref: '#/components/schemas/webhook_event'
        target_url:
          $ref: '#/components/schemas/webhook_target'
        is_active:
          $ref: '#/components/schemas/webhook_is_active'
        version:
          $ref: '#/components/schemas/webhook_version_of_list_response'
        signing_secret:
          $ref: '#/components/schemas/webhook_signing_secret'
      example:
        id: 1
        project: 13
        created: '2016-04-27T11:49:54.948615Z'
        updated: '2016-04-27T12:04:57.819933Z'
        event: file.infected
        target_url: http://example.com/hooks/receiver
        is_active: true
        signing_secret: 7kMVZivndx0ErgvhRKAr
        version: '0.7'
    webhookInitiator:
      description: Webhook event initiator.
      type: object
      required:
        - type
        - detail
      properties:
        type:
          type: string
          description: Initiator type name.
          enum:
            - api
            - system
            - addon
        detail:
          type: object
          required:
            - request_id
            - addon_name
          properties:
            request_id:
              type: string
              format: uuid
              description: Request ID.
              example: 972654bd-a2ad-485a-bd27-c86126c1ed8c
              nullable: true
            addon_name:
              type: string
              description: Add-On name.
              enum:
                - aws_rekognition_detect_labels
                - aws_rekognition_detect_moderation_labels
                - uc_clamav_virus_scan
                - remove_bg
                - zamzar_convert_document
                - zencoder_convert_video
              example: aws_rekognition_detect_labels
              nullable: true
            source_file_uuid:
              type: string
              format: uuid
              description: Source file UUID if the current is derivative.
              example: 972654bd-a2ad-485a-bd27-c86126c1ed8c
    webhookPublicInfo:
      description: Public Webhook information (does not include secret data like `signing_secret`)
      type: object
      required:
        - id
        - project_id
        - created_at
        - updated_at
        - event
        - target
        - is_active
        - version
      properties:
        id:
          $ref: '#/components/schemas/webhook_id'
        project:
          $ref: '#/components/schemas/webhook_project'
        project_pub_key:
          $ref: '#/components/schemas/webhook_project_pubkey'
        created_at:
          $ref: '#/components/schemas/webhook_created'
        updated_at:
          $ref: '#/components/schemas/webhook_updated'
        event:
          $ref: '#/components/schemas/webhook_event'
        target:
          $ref: '#/components/schemas/webhook_target'
        is_active:
          $ref: '#/components/schemas/webhook_is_active'
        version:
          $ref: '#/components/schemas/webhook_version'
      example:
        id: 1
        project_id: 13
        project_pub_key: 2d199fbf3896699a2639
        created_at: '2016-04-27T11:49:54.948615Z'
        updated_at: '2016-04-27T12:04:57.819933Z'
        event: file.uploaded
        target: http://example.com/hooks/receiver
        is_active: true
        version: '0.7'
    documentJobSubmitParameters:
      type: object
      properties:
        paths:
          description: An array of UUIDs of your source documents to convert together with the specified target format (see [documentation](https://uploadcare.com/docs/transformations/file-conversion/)).
          type: array
          items:
            type: string
          example:
            - https://cdn.uploadcare.com/5ffa2545-ea40-4e71-a9e4-3a8e49b7b737/document/-/format/jpg/-/page/1/
            - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/dpi/150/
            - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/quality/80/
            - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/dpi/200/-/quality/90/
            - 88a51210-bd69-4411-bc72-a9952d9512cd/document/-/format/pdf/
            - 8ddbbb48-0927-4df7-afac-c6031668b01b/document/
        store:
          type: string
          description: |
            When `store` is set to `"0"`, the converted files will only be available for 24 hours. `"1"` makes converted files available permanently. If the parameter is omitted, it checks the `Auto file storing` setting of your Uploadcare project identified by the `public_key` provided in the `auth-param`.
          enum:
            - '0'
            - 'false'
            - '1'
            - 'true'
          example: '1'
        save_in_group:
          type: string
          default: '0'
          description: |
            When `save_in_group` is set to `"1"`, multi-page documents additionally will be saved as a file group.
          enum:
            - '0'
            - 'false'
            - '1'
            - 'true'
          example: '1'
      example:
        paths:
          - https://cdn.uploadcare.com/5ffa2545-ea40-4e71-a9e4-3a8e49b7b737/document/-/format/jpg/-/page/1/
          - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/dpi/150/
          - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/quality/80/
          - 18574696-50b5-4d6a-84c2-48ffc3de1d40/document/-/format/jpg/-/dpi/200/-/quality/90/
          - 88a51210-bd69-4411-bc72-a9952d9512cd/document/-/format/pdf/
          - 8ddbbb48-0927-4df7-afac-c6031668b01b/document/
        store: 1
        save_in_group: '1'
    videoJobSubmitParameters:
      type: object
      properties:
        paths:
          description: An array of UUIDs of your video files to process together with a set of assigned operations (see [documentation](https://uploadcare.com/docs/transformations/video-encoding/)).
          type: array
          items:
            type: string
          example:
            - https://cdn.uploadcare.com/5ffa2545-ea40-4e71-a9e4-3a8e49b7b737/video/-/format/webm/
            - 88a51210-bd69-4411-bc72-a9952d9512cd/video/-/format/ogg/-/quality/best/
            - 8ddbbb48-0927-4df7-afac-c6031668b01b/video/
        store:
          type: string
          description: |
            When `store` is set to `"0"`, the converted files will only be available for 24 hours. `"1"` makes converted files available permanently. If the parameter is omitted, it checks the `Auto file storing` setting of your Uploadcare project identified by the `public_key` provided in the `auth-param`.
          enum:
            - '0'
            - 'false'
            - '1'
            - 'true'
          example: '1'
      example:
        paths:
          - d52d7136-a2e5-4338-9f45-affbf83b857d/video/
          - d52d7136-a2e5-4338-9f45-affbf83b857d/video/-/format/ogg/-/quality/best/
          - 28843a09-dd3d-4b8a-ad4f-8aa5f8f60ff2
        store: '1'
    cantUseDocsConversionError:
      type: object
      properties:
        detail:
          type: string
          default: Document conversion feature is not available for this project.
      example:
        detail: Document conversion feature is not available for this project.
    cantUseVideoConversionError:
      type: object
      properties:
        detail:
          type: string
          default: Video conversion feature is not available for this project.
      example:
        detail: Video conversion feature is not available for this project.
    cantUseWebhooksError:
      type: object
      properties:
        detail:
          type: string
          default: You can't use webhooks
      example:
        detail: You can't use webhooks
    jsonObjectParseError:
      type: object
      properties:
        detail:
          type: string
          description: Expected JSON object.
      example:
        detail: Expected JSON object.
    localCopyResponse:
      type: object
      properties:
        type:
          type: string
          default: file
          example: file
        result:
          $ref: '#/components/schemas/fileCopy'
    applicationData:
      type: object
      properties:
        version:
          type: string
          description: An application version.
        datetime_created:
          type: string
          format: date-time
          description: Date and time when an application data was created.
        datetime_updated:
          type: string
          format: date-time
          description: Date and time when an application data was updated.
        data:
          type: object
          description: Dictionary with a result of an application execution result.
      required:
        - version
        - datetime_created
        - datetime_updated
        - data
    removeBg_v1_0:
      allOf:
        - $ref: '#/components/schemas/applicationData'
        - type: object
          properties:
            version:
              type: string
              enum:
                - '1.0'
            data:
              type: object
              description: Dictionary with a result of an remove.bg information about an image.
              properties:
                foreground_type:
                  type: string
                  description: foreground classification type (present if type_level was set)
          example:
            value:
              remove_bg:
                data:
                  foreground_type: person
                version: '1.0'
                datetime_created: '2021-07-25T12:24:33.159663Z'
                datetime_updated: '2021-07-25T12:24:33.159663Z'
    awsRekognitionDetectLabels_v2016_06_27:
      allOf:
        - $ref: '#/components/schemas/applicationData'
        - type: object
          properties:
            version:
              type: string
              enum:
                - '2016-06-27'
            data:
              type: object
              description: Dictionary with a result of an aws rekognition detect labels execution result.
              properties:
                LabelModelVersion:
                  type: string
                Labels:
                  type: array
                  items:
                    type: object
                    properties:
                      Confidence:
                        type: number
                      Instances:
                        type: array
                        items:
                          type: object
                          properties:
                            BoundingBox:
                              type: object
                              properties:
                                Height:
                                  type: number
                                Left:
                                  type: number
                                Top:
                                  type: number
                                Width:
                                  type: number
                            Confidence:
                              type: number
                      Name:
                        type: string
                      Parents:
                        type: array
                        items:
                          type: object
                          properties:
                            Name:
                              type: string
                    required:
                      - Name
                      - Parents
                      - Instances
                      - Confidence
              required:
                - Labels
                - LabelModelVersion
              example:
                value:
                  aws_rekognition_detect_labels:
                    data:
                      LabelModelVersion: '2.0'
                      Labels:
                        - Confidence: 93.41645812988281
                          Instances: []
                          Name: Home Decor
                          Parents: []
                        - Confidence: 70.75951385498047
                          Instances: []
                          Name: Linen
                          Parents:
                            - Name: Home Decor
                        - Confidence: 64.7123794555664
                          Instances: []
                          Name: Sunlight
                          Parents: []
                        - Confidence: 56.264793395996094
                          Instances: []
                          Name: Flare
                          Parents:
                            - Name: Light
                        - Confidence: 50.47153854370117
                          Instances: []
                          Name: Tree
                          Parents:
                            - Name: Plant
                    version: '2016-06-27'
                    datetime_created: '2021-09-21T11:25:31.259763Z'
                    datetime_updated: '2021-09-21T11:27:33.359763Z'
    awsRekognitionDetectModerationLabels_v2016_06_27:
      allOf:
        - $ref: '#/components/schemas/applicationData'
        - type: object
          properties:
            version:
              type: string
              enum:
                - '2016-06-27'
            data:
              type: object
              description: Dictionary with a result of an aws rekognition detect moderation labels execution result.
              properties:
                ModerationModelVersion:
                  type: string
                ModerationLabels:
                  type: array
                  items:
                    type: object
                    properties:
                      Confidence:
                        type: number
                      Name:
                        type: string
                      ParentName:
                        type: string
                    required:
                      - Name
                      - ParentName
                      - Confidence
              required:
                - ModerationLabels
                - ModerationModelVersion
              example:
                value:
                  aws_rekognition_detect_moderation_labels:
                    data:
                      ModerationModelVersion: '6.0'
                      ModerationLabels:
                        - Confidence: 93.41645812988281
                          Name: Weapons
                          ParentName: Violence
                    version: '2016-06-27'
                    datetime_created: '2023-02-21T11:25:31.259763Z'
                    datetime_updated: '2023-02-21T11:27:33.359763Z'
    ucClamavVirusScan:
      allOf:
        - $ref: '#/components/schemas/applicationData'
        - type: object
          properties:
            version:
              type: string
              enum:
                - 0.104.2
                - 0.104.3
                - 0.105.0
                - 0.105.1
            data:
              type: object
              description: Dictionary with a result of ClamAV execution result.
              properties:
                infected:
                  type: boolean
                infected_with:
                  type: string
              required:
                - infected
          example:
            value:
              uc_clamav_virus_scan:
                data:
                  infected: true
                  infected_with: Win.Test.EICAR_HDB-1
                version: 0.104.2
                datetime_created: '2021-09-21T11:24:33.159663Z'
                datetime_updated: '2021-09-21T11:24:33.159663Z'
    applicationDataObject:
      type: object
      nullable: true
      description: Dictionary of application names and data associated with these applications.
      properties:
        aws_rekognition_detect_labels:
          $ref: '#/components/schemas/awsRekognitionDetectLabels_v2016_06_27'
        aws_rekognition_detect_moderation_labels:
          $ref: '#/components/schemas/awsRekognitionDetectModerationLabels_v2016_06_27'
        remove_bg:
          $ref: '#/components/schemas/removeBg_v1_0'
        uc_clamav_virus_scan:
          $ref: '#/components/schemas/ucClamavVirusScan'
    simpleAuthHTTPForbidden:
      type: object
      properties:
        detail:
          type: string
          default: Simple authentication over HTTP is forbidden. Please, use HTTPS or signed requests instead.
      example:
        detail: Simple authentication over HTTP is forbidden. Please, use HTTPS or signed requests instead.
    webhookTargetUrlError:
      type: object
      properties:
        detail:
          type: string
          description: '`target_url` is missing.'
          default: '`target_url` is missing.'
      example:
        detail: '`target_url` is missing.'
  examples:
    simpleAuthHTTPForbidden:
      value:
        detail: Simple authentication over HTTP is forbidden. Please, use HTTPS or signed requests instead.
    webhookTargetUrlError:
      value:
        detail: '`target_url` is missing.'
    cantUseDocsConversionError:
      value:
        detail: Document conversion feature is not available for this project.
    cantUseVideoConversionError:
      value:
        detail: Video conversion feature is not available for this project.
    cantUseWebhooksError:
      value:
        detail: You can't use webhooks
    jsonObjectParseError:
      value:
        detail: Expected JSON object.
    file_list_w_appdata:
      value:
        next: https://api.uploadcare.com/files/?limit=1&from=2018-11-27T01%3A00%3A43.001705%2B00%3A00&offset=0
        previous: https://api.uploadcare.com/files/?limit=1&to=2018-11-27T01%3A00%3A36.436838%2B00%3A00&offset=0
        total: 2484
        totals:
          removed: 0
          stored: 2480
          unstored: 4
        per_page: 1
        results:
          - datetime_removed: null
            datetime_stored: '2018-11-26T12:49:10.477888Z'
            datetime_uploaded: '2018-11-26T12:49:09.945335Z'
            variations: null
            is_image: true
            is_ready: true
            mime_type: image/jpeg
            original_file_url: https://ucarecdn.com/22240276-2f06-41f8-9411-755c8ce926ed/pineapple.jpg
            original_filename: pineapple.jpg
            size: 642
            url: https://api.uploadcare.com/files/22240276-2f06-41f8-9411-755c8ce926ed/
            uuid: 22240276-2f06-41f8-9411-755c8ce926ed
            content_info:
              mime:
                mime: image/jpeg
                type: image
                subtype: jpeg
              image:
                format: JPEG
                width: 500
                height: 500
                sequence: false
                color_mode: RGB
                orientation: 6
                geo_location:
                  latitude: 55.62013611111111
                  longitude: 37.66299166666666
                datetime_original: '2018-08-20T08:59:50'
                dpi:
                  - 72
                  - 72
            metadata:
              subsystem: uploader
              pet: cat
            appdata:
              uc_clamav_virus_scan:
                data:
                  infected: true
                  infected_with: Win.Test.EICAR_HDB-1
                version: 0.104.2
                datetime_created: '2021-09-21T11:24:33.159663Z'
                datetime_updated: '2021-09-21T11:24:33.159663Z'
    file_list:
      value:
        next: https://api.uploadcare.com/files/?limit=1&from=2018-11-27T01%3A00%3A43.001705%2B00%3A00&offset=0
        previous: https://api.uploadcare.com/files/?limit=1&to=2018-11-27T01%3A00%3A36.436838%2B00%3A00&offset=0
        total: 2484
        totals:
          removed: 0
          stored: 2480
          unstored: 4
        per_page: 1
        results:
          - datetime_removed: null
            datetime_stored: '2021-09-21T11:24:33.159663Z'
            datetime_uploaded: '2021-09-21T11:24:33.159663Z'
            is_image: false
            is_ready: true
            mime_type: video/mp4
            original_file_url: https://ucarecdn.com/7ed2aed0-0482-4c13-921b-0557b193edc2/16317390663260.mp4
            original_filename: 16317390663260.mp4
            size: 14479722
            url: https://api.uploadcare.com/files/7ed2aed0-0482-4c13-921b-0557b193edc2/
            uuid: 7ed2aed0-0482-4c13-921b-0557b193edc2
            variations: null
            content_info:
              mime:
                mime: video/mp4
                type: video
                subtype: mp4
              video:
                audio:
                  - codec: aac
                    bitrate: 129
                    channels: 2
                    sample_rate: 44100
                video:
                  - codec: h264
                    width: 640
                    height: 480
                    bitrate: 433
                    frame_rate: 30
                format: mp4
                bitrate: 579
                duration: 200044
            metadata:
              subsystem: tester
              pet: dog
    file_removed:
      value:
        datetime_removed: '2018-11-26T12:49:11.477888Z'
        datetime_stored: null
        datetime_uploaded: '2018-11-26T12:49:09.945335Z'
        variations: null
        is_image: true
        is_ready: true
        mime_type: image/jpeg
        original_file_url: https://ucarecdn.com/22240276-2f06-41f8-9411-755c8ce926ed/pineapple.jpg
        original_filename: pineapple.jpg
        size: 642
        url: https://api.uploadcare.com/files/22240276-2f06-41f8-9411-755c8ce926ed/
        uuid: 22240276-2f06-41f8-9411-755c8ce926ed
        content_info:
          mime:
            mime: image/jpeg
            type: image
            subtype: jpeg
          image:
            format: JPEG
            width: 500
            height: 500
            sequence: false
            color_mode: RGB
            orientation: 6
            geo_location:
              latitude: 55.62013611111111
              longitude: 37.66299166666666
            datetime_original: '2018-08-20T08:59:50'
            dpi:
              - 72
              - 72
        metadata:
          subsystem: uploader
          pet: cat
        appdata:
          uc_clamav_virus_scan:
            data:
              infected: true
              infected_with: Win.Test.EICAR_HDB-1
            version: 0.104.2
            datetime_created: '2021-09-21T11:24:33.159663Z'
            datetime_updated: '2021-09-21T11:24:33.159663Z'
    file:
      value:
        datetime_removed: null
        datetime_stored: '2018-11-26T12:49:10.477888Z'
        datetime_uploaded: '2018-11-26T12:49:09.945335Z'
        variations: null
        is_image: true
        is_ready: true
        mime_type: image/jpeg
        original_file_url: https://ucarecdn.com/22240276-2f06-41f8-9411-755c8ce926ed/pineapple.jpg
        original_filename: pineapple.jpg
        size: 642
        url: https://api.uploadcare.com/files/22240276-2f06-41f8-9411-755c8ce926ed/
        uuid: 22240276-2f06-41f8-9411-755c8ce926ed
        content_info:
          mime:
            mime: image/jpeg
            type: image
            subtype: jpeg
          image:
            format: JPEG
            width: 500
            height: 500
            sequence: false
            color_mode: RGB
            orientation: 6
            geo_location:
              latitude: 55.62013611111111
              longitude: 37.66299166666666
            datetime_original: '2018-08-20T08:59:50'
            dpi:
              - 72
              - 72
        metadata:
          subsystem: uploader
          pet: cat
        appdata:
          aws_rekognition_detect_labels:
            data:
              LabelModelVersion: '2.0'
              Labels:
                - Confidence: 93.41645812988281
                  Instances: []
                  Name: Home Decor
                  Parents: []
                - Confidence: 70.75951385498047
                  Instances: []
                  Name: Linen
                  Parents:
                    - Name: Home Decor
                - Confidence: 64.7123794555664
                  Instances: []
                  Name: Sunlight
                  Parents: []
                - Confidence: 56.264793395996094
                  Instances: []
                  Name: Flare
                  Parents:
                    - Name: Light
                - Confidence: 50.47153854370117
                  Instances: []
                  Name: Tree
                  Parents:
                    - Name: Plant
            version: '2016-06-27'
            datetime_created: '2021-09-21T11:25:31.259763Z'
            datetime_updated: '2021-09-21T11:27:33.359763Z'
          aws_rekognition_detect_moderation_labels:
            data:
              ModerationModelVersion: '6.0'
              ModerationLabels:
                - Confidence: 93.41645812988281
                  Name: Weapons
                  ParentName: Violence
            version: '2016-06-27'
            datetime_created: '2023-02-21T11:25:31.259763Z'
            datetime_updated: '2023-02-21T11:27:33.359763Z'
          remove_bg:
            data:
              foreground_type: person
            version: '1.0'
            datetime_created: '2021-07-25T12:24:33.159663Z'
            datetime_updated: '2021-07-25T12:24:33.159663Z'
          uc_clamav_virus_scan:
            data:
              infected: true
              infected_with: Win.Test.EICAR_HDB-1
            version: 0.104.2
            datetime_created: '2021-09-21T11:24:33.159663Z'
            datetime_updated: '2021-09-21T11:24:33.159663Z'
    file_video:
      value:
        datetime_removed: null
        datetime_stored: '2021-09-21T11:24:33.159663Z'
        datetime_uploaded: '2021-09-21T11:24:33.159663Z'
        is_image: false
        is_ready: true
        mime_type: video/mp4
        original_file_url: https://ucarecdn.com/7ed2aed0-0482-4c13-921b-0557b193edc2/16317390663260.mp4
        original_filename: 16317390663260.mp4
        size: 14479722
        url: https://api.uploadcare.com/files/7ed2aed0-0482-4c13-921b-0557b193edc2/
        uuid: 7ed2aed0-0482-4c13-921b-0557b193edc2
        variations: null
        content_info:
          mime:
            mime: video/mp4
            type: video
            subtype: mp4
          video:
            audio:
              - codec: aac
                bitrate: 129
                channels: 2
                sample_rate: 44100
            video:
              - codec: h264
                width: 640
                height: 480
                bitrate: 433
                frame_rate: 30
            format: mp4
            bitrate: 579
            duration: 200044
        metadata:
          subsystem: tester
          pet: dog
    group_list:
      value:
        next: https://api.uploadcare.com/groups/?limit=3&from=2016-11-09T14%3A30%3A22.421889%2B00%3A00&offset=0
        previous: null
        total: 100
        per_page: 2
        results:
          - id: dd43982b-5447-44b2-86f6-1c3b52afa0ff~1
            datetime_created: '2018-11-27T14:14:37.583654Z'
            files_count: 1
            cdn_url: https://ucarecdn.com/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
            url: https://api.uploadcare.com/groups/dd43982b-5447-44b2-86f6-1c3b52afa0ff~1/
          - id: fd59dbcb-40a1-4f3a-8062-cc7d23f66885~1
            datetime_created: '2018-11-27T15:14:39.586674Z'
            files_count: 1
            cdn_url: https://ucarecdn.com/fd59dbcb-40a1-4f3a-8062-cc7d23f66885~1/
            url: https://api.uploadcare.com/groups/fd59dbcb-40a1-4f3a-8062-cc7d23f66885~1/
  parameters:
    webhookSignature:
      in: header
      name: X-Uc-Signature
      description: |
        Optional header with an HMAC-SHA256 signature that is sent to the `target_url`,
        if the webhook has a `signing_secret` associated with it.
      schema:
        type: string
        example: v1=01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
    acceptHeader:
      in: header
      name: Accept
      description: Version header.
      schema:
        type: string
        nullable: true
        example: application/vnd.uploadcare-v0.7+json
      required: true
    fileUUID:
      in: path
      name: uuid
      description: File UUID.
      required: true
      schema:
        type: string
        format: uuid
        example: 21975c81-7f57-4c7a-aef9-acfe28779f78
    fileMetadataKey:
      in: path
      name: key
      description: |
        Key of file metadata.
        List of allowed characters for the key:
          - Latin letters in lower or upper case (a-z,A-Z)
          - digits (0-9)
          - underscore `_`
          - a hyphen `-`
          - dot `.`
          - colon `:`
      required: true
      schema:
        type: string
        minLength: 1
        maxLength: 64
        pattern: '[\w\-\.\:]+'
        example: subsystem
