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

# EvoLink Moderation 1.0 - Référence API complète

> - Endpoint synchrone qui effectue une détection de contenu nuisible sur 13 dimensions à partir des **textes** et/ou **images** fournis en entrée
- La réponse contient le champ `evolink_summary` qui regroupe cinq indicateurs unifiés : `risk_level` / `flagged` / `violations` / `max_score` / `max_category`

**Capacités principales** :
- **Modération multimodale** : prend en charge les entrées texte seul, image seule et combinaisons texte + image
- **13 catégories** : harassment, hate, sexual, violence, self-harm, illicit, sexual/minors, etc.
- **Classement par niveau de risque** : chaque catégorie possède ses propres seuils medium / high, calibrés selon sa sensibilité (la catégorie sensible sexual/minors applique les seuils les plus stricts)
- **Explicabilité** : la réponse renvoie à la fois les `category_scores` détaillés par catégorie et le résumé `evolink_summary` simplifié — l'application peut utiliser l'un ou l'autre selon son besoin

**Limites des entrées** :
- Une seule image par requête (pour modérer plusieurs images, lancez des requêtes en parallèle)
- Les images doivent être fournies sous forme d'URL HTTPS

**Cas d'usage typiques** : voir les exemples ci-dessous, qui couvrent les trois scénarios courants (texte seul, texte + image, image seule).

<Note>
  **BaseURL** : La BaseURL par défaut est `https://direct.evolink.ai`, qui offre une meilleure prise en charge des modèles de texte et des connexions persistantes. `https://api.evolink.ai` est le point d'accès principal pour les services multimodaux et sert d'adresse de secours pour les modèles de texte.
</Note>


## OpenAPI

````yaml fr/api-manual/language-series/evolink-moderation-1.0/evolink-moderation-1.0-api.json POST /v1/moderations
openapi: 3.1.0
info:
  title: EvoLink Moderation 1.0 - Référence API complète
  description: >-
    API de modération de contenu EvoLink : détecte les contenus nuisibles dans
    le texte et les images, et renvoie un résumé de risque unifié via le champ
    `evolink_summary`, permettant aux applications d'évaluer le niveau de risque
    en un coup d'œil.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://direct.evolink.ai
    description: Production (recommandé)
  - url: https://api.evolink.ai
    description: Endpoint de secours
security:
  - bearerAuth: []
tags:
  - name: Modération de contenu
    description: API de modération de contenu EvoLink (texte + image)
paths:
  /v1/moderations:
    post:
      tags:
        - Modération de contenu
      summary: Endpoint de modération de contenu EvoLink Moderation
      description: >-
        - Endpoint synchrone qui effectue une détection de contenu nuisible sur
        13 dimensions à partir des **textes** et/ou **images** fournis en entrée

        - La réponse contient le champ `evolink_summary` qui regroupe cinq
        indicateurs unifiés : `risk_level` / `flagged` / `violations` /
        `max_score` / `max_category`


        **Capacités principales** :

        - **Modération multimodale** : prend en charge les entrées texte seul,
        image seule et combinaisons texte + image

        - **13 catégories** : harassment, hate, sexual, violence, self-harm,
        illicit, sexual/minors, etc.

        - **Classement par niveau de risque** : chaque catégorie possède ses
        propres seuils medium / high, calibrés selon sa sensibilité (la
        catégorie sensible sexual/minors applique les seuils les plus stricts)

        - **Explicabilité** : la réponse renvoie à la fois les `category_scores`
        détaillés par catégorie et le résumé `evolink_summary` simplifié —
        l'application peut utiliser l'un ou l'autre selon son besoin


        **Limites des entrées** :

        - Une seule image par requête (pour modérer plusieurs images, lancez des
        requêtes en parallèle)

        - Les images doivent être fournies sous forme d'URL HTTPS


        **Cas d'usage typiques** : voir les exemples ci-dessous, qui couvrent
        les trois scénarios courants (texte seul, texte + image, image seule).
      operationId: createModeration
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ModerationRequest'
            examples:
              moderate_text:
                summary: Modération de texte seul
                value:
                  model: evolink-moderation-1.0
                  input:
                    - type: text
                      text: I want to kill them.
              moderate_image_url:
                summary: Modération d'image seule
                value:
                  model: evolink-moderation-1.0
                  input:
                    - type: image_url
                      image_url:
                        url: https://example.com/image.png
              moderate_text_and_image:
                summary: Modération combinée texte + image (recommandé)
                value:
                  model: evolink-moderation-1.0
                  input:
                    - type: text
                      text: Décrivez ce qui apparaît sur cette image.
                    - type: image_url
                      image_url:
                        url: https://example.com/image.png
      responses:
        '200':
          description: Modération effectuée avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ModerationResponse'
              example:
                evolink_summary:
                  risk_level: medium
                  flagged: false
                  violations: []
                  max_score: 0.597383272
                  max_category: sexual
                id: modr-0d9740456c391e43c445bf0f010940c7
                model: evolink-moderation-1.0
                results:
                  - flagged: false
                    categories:
                      harassment: false
                      harassment/threatening: false
                      hate: false
                      hate/threatening: false
                      illicit: false
                      illicit/violent: false
                      self-harm: false
                      self-harm/intent: false
                      self-harm/instructions: false
                      sexual: false
                      sexual/minors: false
                      violence: false
                      violence/graphic: false
                    category_scores:
                      harassment: 0.0006
                      harassment/threatening: 0.0007
                      hate: 0.00003
                      hate/threatening: 0.0000025
                      illicit: 0.000013
                      illicit/violent: 0.0000096
                      self-harm: 0.0000166
                      self-harm/intent: 0.000004
                      self-harm/instructions: 0.0000031
                      sexual: 0.597383272
                      sexual/minors: 0.000004
                      violence: 0.0231
                      violence/graphic: 0.0089
                    category_applied_input_types:
                      harassment:
                        - text
                      harassment/threatening:
                        - text
                      hate:
                        - text
                      hate/threatening:
                        - text
                      illicit:
                        - text
                      illicit/violent:
                        - text
                      self-harm:
                        - text
                      self-harm/intent:
                        - text
                      self-harm/instructions:
                        - text
                      sexual:
                        - text
                      sexual/minors:
                        - text
                      violence:
                        - text
                      violence/graphic:
                        - text
        '400':
          description: Paramètres de requête invalides
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 400
                  message: field input is required
                  type: invalid_request_error
                  param: input
        '401':
          description: Authentification absente, jeton invalide ou expiré
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 401
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: Quota insuffisant, recharge nécessaire
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 402
                  message: Insufficient quota
                  type: insufficient_quota_error
                  fallback_suggestion: https://evolink.ai/dashboard/billing
        '403':
          description: Accès au modèle non autorisé
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 403
                  message: Access denied for this model
                  type: permission_error
                  param: model
        '404':
          description: Ressource introuvable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 404
                  message: Specified model not found
                  type: not_found_error
                  param: model
                  fallback_suggestion: evolink-moderation-1.0
        '413':
          description: Corps de requête trop volumineux (image dépassant la limite)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 413
                  message: Image file too large
                  type: request_too_large_error
                  param: input
                  fallback_suggestion: compress image to under 20MB
        '429':
          description: Limite de fréquence des requêtes dépassée
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 429
                  message: Rate limit exceeded
                  type: rate_limit_error
                  fallback_suggestion: retry after 60 seconds
        '500':
          description: Erreur interne du serveur
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 500
                  message: Internal server error
                  type: internal_server_error
                  fallback_suggestion: try again later
        '502':
          description: Erreur de passerelle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 502
                  message: Bad gateway
                  type: bad_gateway_error
                  fallback_suggestion: try again later
        '503':
          description: Service temporairement indisponible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: 503
                  message: Service temporarily unavailable
                  type: service_unavailable_error
                  fallback_suggestion: retry after 30 seconds
components:
  schemas:
    ModerationRequest:
      type: object
      required:
        - model
        - input
      properties:
        model:
          type: string
          description: Nom du modèle de modération, fixé à `evolink-moderation-1.0`
          enum:
            - evolink-moderation-1.0
          example: evolink-moderation-1.0
        input:
          type: array
          description: >-
            Contenu à modérer, sous forme d'un tableau d'objets unifié. Chaque
            élément est un objet `text` ou `image_url`.


            ```json

            "input": [
              {"type": "text", "text": "texte à modérer"},
              {"type": "image_url", "image_url": {"url": "https://..."}}
            ]

            ```


            **Limites** :

            - Le tableau ne peut contenir **qu'un seul** objet `type=image_url`
            ; pour modérer plusieurs images, lancez des requêtes en parallèle

            - Le nombre d'objets `type=text` n'est pas limité
          items:
            $ref: '#/components/schemas/ModerationContentItem'
    ModerationResponse:
      type: object
      description: >-
        Réponse de modération. Le champ `evolink_summary` au plus haut niveau
        est le résumé de risque unifié recommandé pour les applications ;
        `results` fournit le détail des scores par catégorie.
      properties:
        evolink_summary:
          $ref: '#/components/schemas/EvolinkSummary'
        id:
          type: string
          description: Identifiant unique de cette requête de modération
          example: modr-0d9740456c391e43c445bf0f010940c7
        model:
          type: string
          description: Nom du modèle effectivement utilisé, fixé à `evolink-moderation-1.0`
          example: evolink-moderation-1.0
        results:
          type: array
          description: >-
            Liste des résultats de modération. Renvoie toujours **1 seul**
            result (un tableau d'entrées est consolidé en un seul score).


            ## Portée d'évaluation multimodale


            Parmi les 13 catégories, certaines sont **évaluées uniquement sur le
            texte** et ne sont pas évaluées sur l'image :


            | Catégorie | Portée d'évaluation |

            |------|----------|

            | `harassment` / `harassment/threatening` | Texte uniquement |

            | `hate` / `hate/threatening` | Texte uniquement |

            | `illicit` / `illicit/violent` | Texte uniquement |

            | `sexual/minors` | **Texte uniquement (catégorie sensible —
            attention)** |

            | `self-harm` / `self-harm/intent` / `self-harm/instructions` |
            Texte + image |

            | `sexual` | Texte + image |

            | `violence` / `violence/graphic` | Texte + image |


            **Points clés** :

            - Lorsque seule une image est envoyée, les scores des 7 catégories
            texte uniquement ci-dessus restent à `0` et
            `category_applied_input_types` est un tableau vide — **cela ne
            signifie pas que le contenu est sûr, mais simplement qu'il n'a pas
            été évalué**

            - Si votre cas d'usage implique un risque concernant des mineurs
            (catégorie sensible `sexual/minors`), il **faut impérativement
            soumettre le contexte textuel en même temps** ; ne vous reposez pas
            uniquement sur le score image
          items:
            $ref: '#/components/schemas/ModerationResult'
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
              description: Code d'erreur HTTP
            message:
              type: string
              description: Message décrivant l'erreur
            type:
              type: string
              description: Type d'erreur
            param:
              type: string
              description: Nom du paramètre concerné
            fallback_suggestion:
              type: string
              description: Suggestion en cas d'erreur
    ModerationContentItem:
      oneOf:
        - $ref: '#/components/schemas/TextInputItem'
        - $ref: '#/components/schemas/ImageInputItem'
    EvolinkSummary:
      type: object
      description: >-
        **Résumé de risque EvoLink** : résumé unifié calculé à partir des
        `category_scores` des 13 catégories, en appliquant à chacune des seuils
        différenciés selon sa sensibilité. L'application peut s'en servir
        directement pour autoriser, refuser ou mettre en revue.


        ## Tableau des seuils par niveau de risque


        | Catégorie | Seuil medium | Seuil high | Notes |

        |------|-----------|----------|------|

        | `sexual/minors` | 0.05 | 0.20 | **Catégorie sensible**, seuils les
        plus stricts |

        | `self-harm` / `self-harm/intent` / `self-harm/instructions` | 0.30 |
        0.60 | Vies humaines en jeu, traitement strict |

        | `violence/graphic` | 0.40 | 0.70 | Violence graphique |

        | `illicit/violent` | 0.40 | 0.70 | Illicite et violent |

        | `sexual` | 0.50 | 0.80 | Sexuel courant |

        | `violence` | 0.50 | 0.80 | Violence courante |

        | `harassment/threatening` | 0.50 | 0.80 | Harcèlement avec menace |

        | `hate/threatening` | 0.50 | 0.80 | Haine avec menace |

        | `harassment` | 0.60 | 0.85 | Harcèlement courant |

        | `hate` | 0.60 | 0.85 | Haine courante |

        | `illicit` | 0.60 | 0.85 | Indications illicites courantes |


        ## Règles de décision


        ```

        Une catégorie au moins avec score >= seuil high   → risk_level =
        "high",   flagged = true,  ajoutée à violations

        Une catégorie au moins avec score >= seuil medium → risk_level =
        "medium", flagged = false

        Sinon                                              → risk_level =
        "low",    flagged = false

        ```


        ## Recommandations d'utilisation


        ```python

        summary = response["evolink_summary"]


        if summary["flagged"]:                         # high → refus immédiat
            reject(reason=summary["violations"])
        elif summary["risk_level"] == "medium":        # zone grise
            log_for_review(summary)                    # journaliser, contrôle manuel ponctuel
            proceed()
        else:                                          # low → autoriser
            proceed()
        ```
      properties:
        risk_level:
          type: string
          description: >-
            Niveau de risque


            - `low` : toutes les catégories sont sous le seuil medium

            - `medium` : au moins une catégorie a franchi le seuil medium, mais
            aucune n'a franchi le seuil high

            - `high` : au moins une catégorie a franchi le seuil high (ligne
            rouge)
          enum:
            - low
            - medium
            - high
          example: medium
        flagged:
          type: boolean
          description: >-
            Indique si une recommandation de refus est déclenchée.


            Équivalent à `risk_level == "high"`. **Côté application, il est
            recommandé de s'appuyer directement sur ce champ pour autoriser ou
            refuser**.


            Attention : ce champ diffère de `results[].flagged` —
            `results[].flagged` est un booléen global qui se déclenche dès
            qu'une catégorie franchit le seuil, tandis que ce champ-ci s'appuie
            sur les seuils gradués EvoLink, calibrés par sensibilité, et reste
            donc plus contrôlable.
          example: false
        violations:
          type: array
          description: >-
            **Liste des catégories qui ont franchi le seuil high**.


            - Lorsque `risk_level == "high"`, ce tableau liste tous les noms de
            catégories qui ont dépassé le seuil high (par ex. `["sexual/minors",
            "violence"]`)

            - Lorsque `risk_level == "medium"` ou `"low"`, ce tableau est vide
            `[]`
          items:
            type: string
          example:
            - sexual/minors
        max_score:
          type: number
          description: >-
            Score maximal parmi les 13 catégories (entre 0 et 1). Utile pour la
            supervision et le calibrage des seuils côté application.
          minimum: 0
          maximum: 1
          example: 0.597383272
        max_category:
          type: string
          description: >-
            Nom de la catégorie correspondant au score maximal (l'une des 13
            catégories)
          example: sexual
    ModerationResult:
      type: object
      description: Résultat de modération pour une entrée donnée
      properties:
        flagged:
          type: boolean
          description: >-
            Indicateur global de violation : ce champ vaut true dès qu'au moins
            une catégorie de `categories` vaut true.


            **Côté application, il est recommandé d'utiliser en priorité
            `evolink_summary.flagged`** — ce dernier est calculé à partir des
            seuils gradués de la plateforme EvoLink, sa logique est plus fine et
            plus contrôlable. Le présent champ convient mieux comme indicateur
            de secours.
          example: false
        categories:
          $ref: '#/components/schemas/ModerationCategories'
        category_scores:
          $ref: '#/components/schemas/ModerationCategoryScores'
        category_applied_input_types:
          $ref: '#/components/schemas/ModerationCategoryAppliedInputTypes'
    TextInputItem:
      title: Élément d'entrée texte
      type: object
      required:
        - type
        - text
      properties:
        type:
          type: string
          enum:
            - text
          description: Type de contenu fixé à `text`
        text:
          type: string
          description: Texte à modérer
          example: Décrivez ce qui apparaît sur cette image.
    ImageInputItem:
      title: Élément d'entrée image
      type: object
      required:
        - type
        - image_url
      properties:
        type:
          type: string
          enum:
            - image_url
          description: Type de contenu fixé à `image_url`
        image_url:
          type: object
          required:
            - url
          properties:
            url:
              type: string
              format: uri
              description: >-
                URL HTTPS de l'image, par exemple :
                `https://example.com/image.png`


                **Formats pris en charge** : `.jpeg` / `.jpg` / `.png` / `.webp`


                **Taille maximale** : il est recommandé que chaque image fasse ≤
                20 Mo (au-delà, une erreur 413 peut être déclenchée)


                **Remarque** : une seule image par requête ; pour plusieurs
                images, répartissez-les sur des requêtes parallèles
              example: https://example.com/image.png
    ModerationCategories:
      type: object
      description: Indicateurs booléens de violation pour les 13 catégories
      properties:
        harassment:
          type: boolean
          description: >-
            Harcèlement : propos qui expriment, incitent ou favorisent un
            harcèlement à l'encontre d'une cible quelconque
        harassment/threatening:
          type: boolean
          description: >-
            Harcèlement avec menace : contenu de harcèlement comportant de la
            violence ou des menaces de préjudice grave
        hate:
          type: boolean
          description: >-
            Haine : contenu haineux fondé sur la race, le genre, l'ethnie, la
            religion, la nationalité, l'orientation sexuelle, le handicap ou la
            caste
        hate/threatening:
          type: boolean
          description: >-
            Haine avec menace : contenu haineux assorti de violence ou de
            préjudice grave envers le groupe ciblé
        illicit:
          type: boolean
          description: >-
            Activités illicites : contenu fournissant des instructions ou des
            conseils pour commettre des actes illégaux (par exemple « comment
            cambrioler »)
        illicit/violent:
          type: boolean
          description: >-
            Illicite et violent : contenu illicite incluant de la violence ou
            des conseils pour se procurer des armes
        self-harm:
          type: boolean
          description: >-
            Automutilation : contenu qui promeut, encourage ou décrit des
            comportements d'automutilation (suicide, scarification, troubles
            alimentaires, etc.)
        self-harm/instructions:
          type: boolean
          description: >-
            Instructions d'automutilation : contenu qui encourage ou explique
            comment se faire du mal
        self-harm/intent:
          type: boolean
          description: >-
            Intention d'automutilation : contenu exprimant que la personne est
            en train de se faire du mal ou en a l'intention
        sexual:
          type: boolean
          description: >-
            Sexuel : contenu à visée d'excitation sexuelle (en dehors des cas
            d'éducation et de santé sexuelles)
        sexual/minors:
          type: boolean
          description: >-
            Sexuel impliquant des mineurs (**catégorie sensible**) : contenu
            sexuel impliquant des personnes de moins de 18 ans
        violence:
          type: boolean
          description: >-
            Violence : représentation de la mort, de violences ou de blessures
            physiques
        violence/graphic:
          type: boolean
          description: >-
            Violence graphique : représentation visuellement explicite de la
            mort, de violences ou de blessures physiques
    ModerationCategoryScores:
      type: object
      description: >-
        Scores de confiance pour les 13 catégories (entre 0 et 1, plus la valeur
        est élevée, plus la violation est probable)
      properties:
        harassment:
          type: number
          description: Score de confiance pour harassment
          example: 0.0006
        harassment/threatening:
          type: number
          description: Score de confiance pour harassment/threatening
          example: 0.0007
        hate:
          type: number
          description: Score de confiance pour hate
          example: 0.00003
        hate/threatening:
          type: number
          description: Score de confiance pour hate/threatening
          example: 0.0000025
        illicit:
          type: number
          description: Score de confiance pour illicit
          example: 0.000013
        illicit/violent:
          type: number
          description: Score de confiance pour illicit/violent
          example: 0.0000096
        self-harm:
          type: number
          description: Score de confiance pour self-harm
          example: 0.0000166
        self-harm/instructions:
          type: number
          description: Score de confiance pour self-harm/instructions
          example: 0.0000031
        self-harm/intent:
          type: number
          description: Score de confiance pour self-harm/intent
          example: 0.000004
        sexual:
          type: number
          description: Score de confiance pour sexual
          example: 0.5973
        sexual/minors:
          type: number
          description: Score de confiance pour sexual/minors
          example: 0.000004
        violence:
          type: number
          description: Score de confiance pour violence
          example: 0.0231
        violence/graphic:
          type: number
          description: Score de confiance pour violence/graphic
          example: 0.0089
    ModerationCategoryAppliedInputTypes:
      type: object
      description: >-
        Indique pour chaque catégorie **quels types d'entrée ont effectivement
        été évalués**. La valeur est un tableau dont les éléments sont `text` ou
        `image`.


        La portée d'évaluation de chaque catégorie (texte uniquement / texte +
        image) est récapitulée dans la description du champ `results` ; le
        tableau présent ici reflète les types d'entrée **réellement utilisés**
        pour la requête en cours.
      properties:
        harassment:
          type: array
          description: Types d'entrée évalués pour harassment (text uniquement)
          items:
            type: string
            enum:
              - text
        harassment/threatening:
          type: array
          items:
            type: string
            enum:
              - text
        hate:
          type: array
          items:
            type: string
            enum:
              - text
        hate/threatening:
          type: array
          items:
            type: string
            enum:
              - text
        illicit:
          type: array
          items:
            type: string
            enum:
              - text
        illicit/violent:
          type: array
          items:
            type: string
            enum:
              - text
        self-harm:
          type: array
          items:
            type: string
            enum:
              - text
              - image
        self-harm/instructions:
          type: array
          items:
            type: string
            enum:
              - text
              - image
        self-harm/intent:
          type: array
          items:
            type: string
            enum:
              - text
              - image
        sexual:
          type: array
          items:
            type: string
            enum:
              - text
              - image
        sexual/minors:
          type: array
          description: sexual/minors prend en charge uniquement text
          items:
            type: string
            enum:
              - text
        violence:
          type: array
          items:
            type: string
            enum:
              - text
              - image
        violence/graphic:
          type: array
          items:
            type: string
            enum:
              - text
              - image
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Tous les endpoints requièrent une authentification par jeton Bearer##


        **Obtenir votre clé API :**


        Consultez la [page de gestion des clés
        API](https://evolink.ai/dashboard/keys) pour obtenir votre clé API.


        **Ajoutez-la dans l'en-tête de la requête :**

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````