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

# Classify a video

> Submit a video for classification

🔁 Response format varies based on the `Accept` header:

`Accept: application/json` → `{ "identifier": "..." }`

 Other values (e.g. `text/plain`) → plain text with just the identifier string.



## OpenAPI

````yaml post /api/classification_video
openapi: 3.0.0
info:
  title: identifAI API
  version: 1.0.0
  description: >-
    API for integrating identifAI's image and video classification
    capabilities.<br><details><summary>**How to obtain your API
    Key**</summary>To obtain your API key, follow these simple steps:  
    <ol><li><p>**Create a user profile and log in to the platform**</p>If you
    don't have an account yet, visit our platform and create a user profile.
    Once you've completed registration and verified your email, log in with your
    credentials.</li><li><p>**Access the user menu**</p>After logging in, click
    on your name or the user icon in the top-right corner of the
    screen.</li><li><p>**Select the API Key option**</p>In the dropdown menu
    that appears, select the "API Key" option. From there, you can view or
    generate your API key.</li></ol>Now you are ready to use your API key in our
    API!</details><details><summary>**How to use the API**</summary>To use the
    API, first make a **POST** request to start the classification. Then, use
    the provided ***identifier*** from the **POST** request to retrieve the
    results.

    <details>

    <summary>**1. Image Classification**</summary>
      * To classify an image, you need to make a **POST** request to `/api/classification` with the required parameters (for details on the parameters, refer to the *"Classification"* section below).
      * In the response, you will receive the ***identifier*** of the classified image.
      * Use the provided ***identifier*** to retrieve the classification results by making a **GET** request to `/api/classification/{identifier}` (for details on how to structure this request, see the *"Classification"* section below).
      * The response will contain the classification results for the image in JSON format.<br>In the response, you will find a ***results*** array, which includes the classification results for each model used, and a ***verdicts*** array, which contains the results for each heuristic applied.<br>If the classification is not yet complete, continue sending the **GET** request until the result is available.</details><details><summary>**2. Video Classification**</summary>
        * To classify a video, you need to make a **POST** request to `/api/classification_video` with the required parameters (for details on the parameters, refer to the *"Classification"* section below).
        * In the response, you will receive the ***identifier*** of the classified video.
        * Use the provided ***identifier*** to retrieve the classification results by making a **GET** request to `/api/classification_video/{identifier}` (for details on how to structure this request, see the *"Classification"* section below).
        * The response will provide the classification results for the video in JSON format. For video classification, the video is divided into *frames*.<br> In the response, you will find a ***results*** array that includes the classification outcomes for each model applied to each analyzed frame, and a ***verdicts*** array containing the results for each heuristic used.<br> If the classification is not complete, continue sending the **GET** request until the final results are returned.</details><details><summary>**3. All Classifications**</summary>The `/api/classifications` endpoint will return all the image classifications made by a user. This will list the results of all past image classification requests.</details><details><summary>**4. User Management**</summary>  The **POST** `/api/user` endpoint allows you to create a user, while the **DELETE** `/api/user` endpoint is used to delete a user (For the structure of the requests, see more in the user section below).</details></details>
servers:
  - url: https://backend.identifai.net
security: []
tags:
  - name: Classification
    description: Classification routes
  - name: User
    description: User actions
  - name: Partner
    description: Partner actions
paths:
  /api/classification_video:
    post:
      tags:
        - Classification
      summary: Classify a video
      description: |-
        Submit a video for classification

        🔁 Response format varies based on the `Accept` header:

        `Accept: application/json` → `{ "identifier": "..." }`

         Other values (e.g. `text/plain`) → plain text with just the identifier string.
      parameters:
        - name: Accept
          in: header
          description: 'Response content type. Supported: application/json, text/plain.'
          required: false
          schema:
            type: string
            enum:
              - application/json
              - text/plain
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                video:
                  type: string
                  format: binary
                  description: >-
                    The video to be classified. **Supported formats:** Any video
                    format (MP4, AVI, MOV, etc.). **MIME types:** Any mimetype
                    starting with 'video/' (e.g., video/mp4, video/avi,
                    video/quicktime). **Maximum file size:** 50MB.
                ref_id:
                  type: string
                  description: >-
                    An optional reference ID to associate with the
                    classification request.
                frames:
                  type: integer
                  enum:
                    - 5
                    - 10
                    - 30
                  description: Choose to classify a maximum of 5, 10 or 30 frames.
                key_frames:
                  type: boolean
                  description: >-
                    If set to true extracts key frames and uses those for
                    classification instead of fixed-time distance images. The
                    extracted key frames may be less than the requested
                    `frames`.
                key_frames_method:
                  type: string
                  enum:
                    - iframes
                    - flow
                    - color
                  description: >-
                    Key frames identification algorithm. Possible values are
                    **iframes** (default), **flow** and **color**.
                     - `iframes` : extracts the iframes of the video; 
                     - `color` : returns the average frame, based on color, of every shot sequence. *Shot sequences* are group of frames that start with an iframe; 
                     - `flow` : returns the most still frame with respect of the previous frame of every shot sequence.
                with_tampering:
                  type: boolean
                  description: >-
                    Set it to true if you also want to analyze the image for
                    signs of tampering or manipulation, without the aid of a
                    Generative AI.
                with_morphing:
                  type: boolean
                  description: >-
                    Set it to true if you also want to analyze people's faces in
                    the image using morphing.
                with_audio:
                  type: boolean
                  description: >-
                    **[BETA]** Set it to true if you also want to analyze the
                    audio track of the video. **You must be enabled in your
                    pricing plan** to use this option.
                webhook_url:
                  type: string
                  description: >-
                    If specified, the classification result will also be
                    automatically sent to the entered URL. Otherwise, the result
                    can be obtained by polling the [relative
                    endpoint](./get-classification-result-video). Please note
                    that in order to use a webhook callback URL **you need to
                    request a specific enablement**, otherwise the parameter is
                    ignored. Moreover, the system may cache the analysis results
                    of repeated submissions, i.e. submissions of the same file
                    with the same options: in this case the webhook won't be
                    called and the results would be accessible only by polling
                    the [relative endpoint](./get-classification-result-video).
                no_cache:
                  type: boolean
                  description: >-
                    Set it to true to force the system to reprocess the image
                    even if it has been previously submitted with the same
                    options. This may result in additional charges.
                prevent_c2pa_forces:
                  type: boolean
                  description: >-
                    If true, C2PA signature does not force the origin to
                    artificial. If false or undefined, C2PA signature will force
                    the origin to artificial (current behaviour).
                with_nsfw:
                  type: boolean
                  description: >-
                    Set it to true if you also want to enable NSFW (Not Safe For
                    Work) content detection.
                ensure_face_per_frame:
                  type: boolean
                  description: >-
                    Set it to true to ensure that at least a face is detected in
                    each frame used for classification. Use it in combination
                    with `with_morphing` option to detect potential face swaps
                    or morphing occurring in the video. This option **may
                    increase processing** time.
              required:
                - video
            encoding:
              video:
                contentType: video/*
      responses:
        '200':
          description: >-
            The classification identifier. The format depends on the Accept
            header.
          content:
            application/json:
              schema:
                type: object
                properties:
                  identifier:
                    type: string
                    example: >-
                      8d64370a87b820cc1cf620338f5c898bab37439c9a405f32d9eaffc50c4f27b0
              example:
                identifier: >-
                  8d64370a87b820cc1cf620338f5c898bab37439c9a405f32d9eaffc50c4f27b0
            text/plain:
              schema:
                type: string
                example: >-
                  8d64370a87b820cc1cf620338f5c898bab37439c9a405f32d9eaffc50c4f27b0
              example: 8d64370a87b820cc1cf620338f5c898bab37439c9a405f32d9eaffc50c4f27b0
        '400':
          description: >-
            The user has no enough credits to perform the operation, the request
            contains the wrong parameters or the media did not pass validation
            steps.
          content:
            application/json:
              examples:
                validation_error:
                  summary: Validation Error Example
                  value:
                    video:
                      - The video field is required.
                unsupported_format:
                  summary: Unsupported File Format
                  value:
                    error: The uploaded file format is not supported.
                file_too_large:
                  summary: File Too Large
                  value:
                    error: The uploaded file exceeds the maximum allowed size of 5GB.
        '401':
          description: Invalid or missing API key.
          content:
            application/json:
              example:
                error: Unauthorized
        '403':
          description: >-
            The user is not authorized to access this API or did not accept the
            terms of service.
          content:
            application/json:
              example:
                error: Forbidden
        '429':
          description: Too many requests.
          content:
            application/json:
              example:
                message: Too Many Attempts.
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      name: X-Api-Key
      in: header
      description: Your API key.

````