> ## 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 an image from URL

> Submit an image to be classified as human or artificial.

🔁 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/image_fromurl
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/image_fromurl:
    post:
      tags:
        - Classification
      summary: Classify an image from URL
      description: |-
        Submit an image to be classified as human or artificial.

        🔁 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:
                file_url:
                  type: string
                  description: The URL of the image to be classified.
                ref_id:
                  type: string
                  description: >-
                    An optional reference ID to associate with the
                    classification request.
                with_morphing:
                  type: boolean
                  description: >-
                    Set it to true if you also want to analyze people's faces in
                    the image using morphing.
                with_tampering:
                  type: boolean
                  description: >-
                    Set it to true if you also want to analyze signs of
                    tampering or manipulation without the aid of a Generative AI
                with_heatmap:
                  type: boolean
                  description: >-
                    Set it to true if you also want to get an AI content
                    heatmap.
                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). 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).
                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.
              required:
                - file_url
      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, the URL validation has failed or the
            download failed or the file type is not supported.
          content:
            application/json:
              examples:
                validation_error:
                  summary: Validation Error Example
                  value:
                    error: The file_url 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
                      50Mb.
        '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.

````