> ## 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.

# GPT Decisions - Référence complète des paramètres

> - GPT-6 Luna Decisions (`gpt-6-luna-decisions`) évalue du texte, des images ou les deux et renvoie trois types de réponses structurées : `predicate` fournit la probabilité de « oui », `choice` sélectionne une option proposée et `score` calcule une note pondérée par les probabilités sur des niveaux ordonnés
- API synchrone : une seule requête renvoie toutes les réponses ; aucun streaming ni suivi de tâche par interrogation périodique
- Le corps de la requête correspond à l’API Decisions d’OpenAI : avec le SDK OpenAI, pointez `base_url` vers EvoLink. Ce point de terminaison accepte aussi l’identifiant de modèle OpenAI `gpt-6-luna`
- Seuls les tokens d’entrée sont facturés : la sortie, les lectures du cache et les écritures dans le cache sont gratuites. Un montant minimum s’applique à chaque requête ; si une entrée dépasse 272 000 tokens, le tarif d’entrée de toute la requête est 2 fois le tarif normal. Consultez les [Tarifs des modèles](https://evolink.ai/pricing) pour les prix actuels
- Les images doivent être des URL de données base64 intégrées (`data:image/...;base64,...`) ; les URL d’images et `file_id` ne sont pas pris en charge. Maximum 128 images par requête
- Ce point de terminaison rejette les champs inconnus : n’envoyez pas de paramètres Chat Completions tels que `stream`, `temperature` ou `max_tokens`
- Adapté à la classification de contenu, à l’affectation de tickets, aux contrôles de pertinence et à la notation selon des règles. Pour générer du texte ou des structures JSON personnalisées, utilisez l’[API Responses](/fr/api-manual/language-series/gpt/responses/responses-reference)

<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>

<Note>
  **Identifiant de modèle réservé à ce point de terminaison** : `gpt-6-luna-decisions` s’utilise uniquement sur `/v1/decisions`. Sur Chat Completions, Responses ou d’autres points de terminaison, il renvoie `400 model_endpoint_mismatch`. Pour les conversations ou la génération de texte, utilisez `gpt-6-luna` avec [Chat Completions](/docs/fr/api-manual/language-series/gpt/chat-completions/chat-completions-reference) ou l’[API Responses](/docs/fr/api-manual/language-series/gpt/responses/responses-reference).
</Note>

<Note>
  **Choisir un type de question**

  | Type | Questions adaptées | Utiliser le résultat |
  | - | - | - |
  | `predicate` | Questions oui/non, par exemple si un message est une réclamation ou si une image montre un dommage | `probability` est la probabilité de « oui » ; définissez votre seuil et considérez les valeurs supérieures comme positives |
  | `choice` | Choisir parmi des catégories mutuellement exclusives, par exemple le service auquel affecter un ticket | `choice` est l’option sélectionnée ; envisagez une vérification humaine si `confidence` est faible |
  | `score` | Évaluer selon des niveaux croissants, par exemple la gravité d’un problème | `score` est la note des niveaux pondérée par les probabilités (indices à partir de 0) et peut être décimale |

  Une requête peut contenir plusieurs questions indépendantes, qui partagent le même `input`. Si une question ultérieure dépend d’une réponse précédente, répartissez-les en deux requêtes.
</Note>

<Note>
  **Différence avec Chat Completions / Responses** : Ce point de terminaison accepte uniquement `model`, `input`, `questions` et `safety_identifier`. Tout champ supplémentaire renvoie `400 unknown_parameter` ; les images doivent être des URL de données base64 ; le streaming n’est pas pris en charge.
</Note>


## OpenAPI

````yaml fr/api-manual/language-series/gpt/decisions/decisions-reference.json POST /v1/decisions
openapi: 3.1.0
info:
  title: GPT Decisions - Référence complète des paramètres
  description: >-
    Utilisez l’API Decisions compatible avec OpenAI pour que GPT-6 Luna prenne
    des décisions structurées sur du texte et des images : probabilités oui/non,
    sélection d’une option ou notation selon des niveaux ordonnés.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://direct.evolink.ai
    description: Production (recommandée)
  - url: https://api.evolink.ai
    description: Adresse de secours
security:
  - bearerAuth: []
tags:
  - name: Decisions
    description: 'Décisions structurées : classification, affectation et notation'
paths:
  /v1/decisions:
    post:
      tags:
        - Decisions
      summary: GPT-6 Luna Decisions (décisions structurées)
      description: >-
        - GPT-6 Luna Decisions (`gpt-6-luna-decisions`) évalue du texte, des
        images ou les deux et renvoie trois types de réponses structurées :
        `predicate` fournit la probabilité de « oui », `choice` sélectionne une
        option proposée et `score` calcule une note pondérée par les
        probabilités sur des niveaux ordonnés

        - API synchrone : une seule requête renvoie toutes les réponses ; aucun
        streaming ni suivi de tâche par interrogation périodique

        - Le corps de la requête correspond à l’API Decisions d’OpenAI : avec le
        SDK OpenAI, pointez `base_url` vers EvoLink. Ce point de terminaison
        accepte aussi l’identifiant de modèle OpenAI `gpt-6-luna`

        - Seuls les tokens d’entrée sont facturés : la sortie, les lectures du
        cache et les écritures dans le cache sont gratuites. Un montant minimum
        s’applique à chaque requête ; si une entrée dépasse 272 000 tokens, le
        tarif d’entrée de toute la requête est 2 fois le tarif normal. Consultez
        les [Tarifs des modèles](https://evolink.ai/pricing) pour les prix
        actuels

        - Les images doivent être des URL de données base64 intégrées
        (`data:image/...;base64,...`) ; les URL d’images et `file_id` ne sont
        pas pris en charge. Maximum 128 images par requête

        - Ce point de terminaison rejette les champs inconnus : n’envoyez pas de
        paramètres Chat Completions tels que `stream`, `temperature` ou
        `max_tokens`

        - Adapté à la classification de contenu, à l’affectation de tickets, aux
        contrôles de pertinence et à la notation selon des règles. Pour générer
        du texte ou des structures JSON personnalisées, utilisez l’[API
        Responses](/fr/api-manual/language-series/gpt/responses/responses-reference)
      operationId: createDecision
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
            examples:
              predicate:
                summary: Décision oui/non
                value:
                  model: gpt-6-luna-decisions
                  input: The package arrived with a broken screen.
                  questions:
                    - type: predicate
                      name: damaged
                      instructions: Does the customer report a damaged item?
              choice:
                summary: Choix unique (affectation)
                value:
                  model: gpt-6-luna-decisions
                  input: I was charged twice for my order.
                  questions:
                    - type: choice
                      name: department
                      instructions: Which department should handle this complaint?
                      choices:
                        - value: billing
                          description: Payments, invoices, and refunds.
                        - value: technical
                          description: Problems using the product.
                        - value: other
                          description: Requests outside these categories.
              score:
                summary: Notation selon des niveaux ordonnés
                value:
                  model: gpt-6-luna-decisions
                  input: Export fails in Safari but works in Chrome.
                  questions:
                    - type: score
                      name: severity
                      instructions: How severe is this issue?
                      levels:
                        - label: Cosmetic
                          description: Appearance only; no lost functionality.
                        - label: Workaround available
                          description: A task fails, but another way works.
                        - label: Fully blocked
                          description: A task fails with no workaround.
              multiple:
                summary: Plusieurs questions dans une requête
                value:
                  model: gpt-6-luna-decisions
                  input: >-
                    I was charged twice for my order and the app crashes when I
                    open the invoice.
                  questions:
                    - type: predicate
                      name: is_billing
                      instructions: Is this about a billing problem?
                    - type: choice
                      name: department
                      instructions: Which department should handle this complaint?
                      choices:
                        - value: billing
                          description: Payments, invoices, and refunds.
                        - value: technical
                          description: Problems using the product.
                        - value: other
                          description: Requests outside these categories.
                    - type: score
                      name: severity
                      instructions: How severe is this issue?
                      levels:
                        - label: Cosmetic
                          description: Appearance only.
                        - label: Workaround available
                          description: A task fails, but another way works.
                        - label: Fully blocked
                          description: A task fails with no workaround.
              image:
                summary: Évaluer une image
                value:
                  model: gpt-6-luna-decisions
                  input:
                    - role: user
                      content:
                        - type: input_text
                          text: Look at the image.
                        - type: input_image
                          image_url: >-
                            data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAKklEQVR42mM4ISdHU8QwasGoBaMWjFowasGoBaMWjFowasGoBaMWDBULACXLED1gHZEpAAAAAElFTkSuQmCC
                  questions:
                    - type: predicate
                      name: is_red
                      instructions: Is the image mostly red?
      responses:
        '200':
          description: >-
            Une réponse par question, dans le même ordre que les questions de la
            requête
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionResponse'
              example:
                model: gpt-6-luna
                answers:
                  - type: predicate
                    name: is_billing
                    probability: 1
                  - type: choice
                    name: department
                    choice: billing
                    probabilities:
                      - value: billing
                        probability: 0.98
                      - value: technical
                        probability: 0.01
                      - value: other
                        probability: 0.01
                    confidence: 0.97
                  - type: score
                    name: severity
                    score: 1.34
                    probabilities:
                      - value: 0
                        label: Cosmetic
                        probability: 0.04
                      - value: 1
                        label: Workaround available
                        probability: 0.58
                      - value: 2
                        label: Fully blocked
                        probability: 0.38
                    confidence: 0.37
                usage:
                  input_tokens: 426
                  input_tokens_details:
                    cached_tokens: 0
                    cache_write_tokens: 0
                  output_tokens: 0
                  output_tokens_details:
                    reasoning_tokens: 0
                  total_tokens: 426
        '400':
          description: >-
            Paramètres de requête invalides. `param` indique le champ en erreur.
            Causes fréquentes : absence de `questions`, champs inconnus, images
            qui ne sont pas des URL de données base64, `role` de message
            différent de `user` ou valeurs `name` de question en double.
            Utiliser cet identifiant de modèle sur un autre point de terminaison
            renvoie aussi 400 (`model_endpoint_mismatch`). Les requêtes qui
            échouent à la validation ne sont pas facturées
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unknown_parameter:
                  summary: Champ inconnu fourni
                  value:
                    error:
                      message: >-
                        Unknown parameter: 'stream'. (request id:
                        20261007223656995142218QgCDR3TF)
                      type: invalid_request_error
                      param: stream
                      code: unknown_parameter
                image_not_data_url:
                  summary: Image fournie sous forme d’URL
                  value:
                    error:
                      message: >-
                        Invalid 'input[0].content[1].image_url': string does not
                        match pattern. Expected a string that matches the
                        pattern '^data:'. (request id:
                        2026100722365642880926evUSStdF)
                      type: invalid_request_error
                      param: input[0].content[1].image_url
                      code: invalid_value
                missing_questions:
                  summary: questions manquant
                  value:
                    error:
                      message: >-
                        Missing required parameter: 'questions'. (request id:
                        20261007223656416678385UfxZWwZD)
                      type: invalid_request_error
                      param: questions
                      code: missing_required_parameter
        '401':
          description: 'Non autorisé : API Key absent ou invalide'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unauthorized
                  message: >-
                    API key is required (request id:
                    202610072235193122631737Nn7cfZ5)
                  param: null
                  type: authentication_error
        '402':
          description: Solde insuffisant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Cet API Key possède une liste de modèles autorisés qui ne contient
            ni `gpt-6-luna-decisions` ni `gpt-6-luna`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            Ce modèle n’est pas activé pour l’API Decisions. Seul
            `gpt-6-luna-decisions` (ou `gpt-6-luna`) est actuellement pris en
            charge
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: model_not_found
                  message: >-
                    Model 'gpt-5.5' is not available for the Decisions API (POST
                    /v1/decisions) with this API key. This error is permanent —
                    do not retry with the same model id. Call GET /v1/models:
                    models that support this endpoint are listed with the
                    '-decisions' suffix. (request id:
                    20261007223657322725427OrY2GeLp)
                  param: null
                  retryable: false
                  type: invalid_request_error
        '429':
          description: Limite de fréquence dépassée ; réessayez plus tard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Erreur interne du serveur
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service temporairement indisponible ; réessayez plus tard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    DecisionRequest:
      type: object
      additionalProperties: false
      required:
        - model
        - input
        - questions
      properties:
        model:
          type: string
          description: >-
            Identifiant du modèle. Utilisez `gpt-6-luna-decisions` ; ce point de
            terminaison accepte aussi l’identifiant de modèle OpenAI
            `gpt-6-luna`. Le comportement et la facturation sont identiques ;
            les enregistrements d’utilisation et de facturation sont attribués à
            `gpt-6-luna-decisions`.


            `gpt-6-luna-decisions` ne peut être utilisé que sur ce point de
            terminaison. Sur Chat Completions, Responses ou d’autres points de
            terminaison, il renvoie `400 model_endpoint_mismatch`.
          enum:
            - gpt-6-luna-decisions
            - gpt-6-luna
          example: gpt-6-luna-decisions
        input:
          description: >-
            La base commune à toutes les décisions : un texte ou un tableau de
            messages utilisateur, qui peuvent contenir du texte et des images
            intégrées.
          oneOf:
            - type: string
              example: I was charged twice for my order.
            - type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/DecisionInputMessage'
        questions:
          type: array
          minItems: 1
          description: >-
            Questions à évaluer ; au moins 1 est requise. Les questions sont
            indépendantes et peuvent combiner différents types ; les valeurs
            `name` des questions doivent être uniques dans une même requête.


            | Type | Utilisation | Résultat principal |

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

            | `predicate` | Vérifier si une condition est remplie |
            `probability` : probabilité qu’elle soit remplie (de 0 à 1) |

            | `choice` | Sélectionner une option proposée | `choice` : l’option
            sélectionnée |

            | `score` | Noter selon des niveaux ordonnés | `score` : note des
            niveaux pondérée par les probabilités |


            Si une question ultérieure dépend d’une réponse précédente,
            répartissez-les en deux requêtes.
          items:
            oneOf:
              - $ref: '#/components/schemas/PredicateQuestion'
              - $ref: '#/components/schemas/ChoiceQuestion'
              - $ref: '#/components/schemas/ScoreQuestion'
        safety_identifier:
          type: string
          description: >-
            Facultatif. Votre propre identifiant d’utilisateur final (une chaîne
            opaque), transmis sans modification au fournisseur du modèle pour
            détecter les abus
    DecisionResponse:
      type: object
      properties:
        model:
          type: string
          description: Le modèle qui a effectivement pris les décisions
          example: gpt-6-luna
        answers:
          type: array
          description: >-
            Une réponse par question, dans le même ordre que dans la requête.
            Utilisez `name` pour retrouver la question et `type` pour distinguer
            les types de réponse
          items:
            oneOf:
              - $ref: '#/components/schemas/PredicateAnswer'
              - $ref: '#/components/schemas/ChoiceAnswer'
              - $ref: '#/components/schemas/ScoreAnswer'
              - $ref: '#/components/schemas/RefusalAnswer'
        usage:
          $ref: '#/components/schemas/DecisionUsage'
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
              description: >-
                Description de l’erreur, terminée par `(request id: ...)`.
                Fournissez cet identifiant pour le diagnostic
            type:
              type: string
              description: Type d’erreur
            param:
              type:
                - string
                - 'null'
              description: Chemin du paramètre en erreur
            code:
              type:
                - string
                - 'null'
              description: Code d’erreur
    DecisionInputMessage:
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - user
          description: Seul `user` est accepté
        content:
          description: Un texte ou un tableau de blocs de texte et d’image
          oneOf:
            - type: string
            - type: array
              items:
                oneOf:
                  - $ref: '#/components/schemas/InputTextPart'
                  - $ref: '#/components/schemas/InputImagePart'
    PredicateQuestion:
      type: object
      required:
        - type
        - instructions
      properties:
        type:
          type: string
          enum:
            - predicate
        name:
          type: string
          description: >-
            Le nom de la question, renvoyé sans modification dans la réponse
            correspondante
        instructions:
          type: string
          description: La condition à évaluer, formulée comme une question oui/non
    ChoiceQuestion:
      type: object
      required:
        - type
        - instructions
        - choices
      properties:
        type:
          type: string
          enum:
            - choice
        name:
          type: string
          description: >-
            Le nom de la question, renvoyé sans modification dans la réponse
            correspondante
        instructions:
          type: string
          description: La question à laquelle répondre
        choices:
          type: array
          minItems: 1
          description: >-
            Options disponibles. Leurs significations doivent s’exclure
            mutuellement ; si les catégories ne couvrent pas tous les cas,
            ajoutez une option de secours comme `other`
          items:
            type: object
            required:
              - value
            properties:
              value:
                description: >-
                  La valeur renvoyée lorsque cette option est sélectionnée. Les
                  chaînes et les booléens sont des types différents : `true` et
                  `"true"` comptent comme deux options
                oneOf:
                  - type: string
                  - type: boolean
              description:
                type: string
                description: Dans quel cas sélectionner cette option
    ScoreQuestion:
      type: object
      required:
        - type
        - instructions
        - levels
      properties:
        type:
          type: string
          enum:
            - score
        name:
          type: string
          description: >-
            Le nom de la question, renvoyé sans modification dans la réponse
            correspondante
        instructions:
          type: string
          description: La question à laquelle répondre
        levels:
          type: array
          minItems: 1
          description: >-
            Niveaux classés du plus bas au plus élevé ; les indices commencent à
            0
          items:
            type: object
            required:
              - label
            properties:
              label:
                type: string
                description: Nom du niveau
              description:
                type: string
                description: Critères pour atteindre ce niveau
    PredicateAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - predicate
        name:
          type:
            - string
            - 'null'
          description: >-
            Le nom donné à cette question dans la requête ; `null` si aucun nom
            n’a été fourni
        probability:
          type: number
          description: >-
            Probabilité estimée que la condition soit remplie, de 0 à 1.
            Définissez un seuil de décision à partir de vos propres données
            métier
    ChoiceAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - choice
        name:
          type:
            - string
            - 'null'
          description: >-
            Le nom donné à cette question dans la requête ; `null` si aucun nom
            n’a été fourni
        choice:
          description: L’option sélectionnée, du même type que `value` dans la requête
          oneOf:
            - type: string
            - type: boolean
        probabilities:
          type: array
          description: Probabilité de chaque option
          items:
            type: object
            properties:
              value:
                oneOf:
                  - type: string
                  - type: boolean
              probability:
                type: number
        confidence:
          type: number
          description: Confiance dans ce choix, de 0 à 1
    ScoreAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - score
        name:
          type:
            - string
            - 'null'
          description: >-
            Le nom donné à cette question dans la requête ; `null` si aucun nom
            n’a été fourni
        score:
          type: number
          description: >-
            La moyenne des indices des niveaux pondérée par les probabilités ;
            elle peut se situer entre deux niveaux. Par exemple, des
            probabilités de 0,04 / 0,58 / 0,38 sur trois niveaux donnent une
            note de 1,34
        probabilities:
          type: array
          description: Probabilité de chaque niveau
          items:
            type: object
            properties:
              value:
                type: integer
                description: Indice du niveau, à partir de 0
              label:
                type: string
              probability:
                type: number
        confidence:
          type: number
          description: Confiance dans cette note, de 0 à 1
    RefusalAnswer:
      type: object
      description: >-
        Le modèle a refusé de répondre à cette question. Les autres réponses ne
        sont pas affectées ; la requête renvoie toujours 200 et est facturée
        normalement
      properties:
        type:
          type: string
          enum:
            - refusal
        name:
          type:
            - string
            - 'null'
          description: >-
            Le nom donné à cette question dans la requête ; `null` si aucun nom
            n’a été fourni
    DecisionUsage:
      type: object
      description: >-
        Utilisation des tokens. Ce point de terminaison facture uniquement les
        tokens d’entrée : la sortie, les lectures du cache et les écritures dans
        le cache sont gratuites. Un montant minimum s’applique à chaque requête
        ; si une entrée dépasse 272 000 tokens, le tarif d’entrée de toute la
        requête est 2 fois le tarif normal. Consultez les [Tarifs des
        modèles](https://evolink.ai/pricing) pour les prix actuels.
      properties:
        input_tokens:
          type: integer
          description: >-
            Tokens d’entrée facturables, comprenant le texte, les images et un
            coût fixe en tokens par requête et par question. Valeurs indicatives
            : une phrase avec une question `predicate` utilise environ 160
            tokens ; une image de 1536×1024 utilise environ 1 540 tokens
          example: 426
        input_tokens_details:
          type: object
          description: >-
            Détail des tokens d’entrée. Le cache n’est pas facturé séparément
            sur ce point de terminaison
          properties:
            cached_tokens:
              type: integer
              example: 0
            cache_write_tokens:
              type: integer
              example: 0
        output_tokens:
          type: integer
          description: La sortie n’est pas facturée sur ce point de terminaison
          example: 0
        output_tokens_details:
          type: object
          properties:
            reasoning_tokens:
              type: integer
              example: 0
        total_tokens:
          type: integer
          description: Nombre total de tokens
          example: 426
    InputTextPart:
      type: object
      required:
        - type
        - text
      properties:
        type:
          type: string
          enum:
            - input_text
        text:
          type: string
          description: Contenu textuel
    InputImagePart:
      type: object
      required:
        - type
        - image_url
      properties:
        type:
          type: string
          enum:
            - input_image
        image_url:
          type: string
          pattern: '^data:'
          description: >-
            Une URL de données base64 intégrée, par exemple
            `data:image/png;base64,...`. Les URL d’images `http(s)` sont
            rejetées ; maximum 128 images par requête
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Tous les points de terminaison exigent une authentification Bearer
        Token##


        **Obtenir un API Key :**


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


        **Ajouter à l’en-tête de la requête :**

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.