> ## 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 - Referencia completa de parámetros

> - GPT-6 Luna Decisions (`gpt-6-luna-decisions`) evalúa texto, imágenes o ambos y devuelve tres tipos de respuestas estructuradas: `predicate` devuelve la probabilidad de «sí», `choice` selecciona una de las opciones indicadas y `score` calcula una puntuación ponderada por las probabilidades de niveles ordenados
- API síncrona: una sola solicitud devuelve todas las respuestas; no hay streaming ni es necesario consultar el estado de una tarea
- El cuerpo de la solicitud coincide con la API Decisions de OpenAI: con el SDK de OpenAI, apunta `base_url` a EvoLink. Este endpoint también acepta el ID de modelo de OpenAI `gpt-6-luna`
- Solo se facturan los tokens de entrada: la salida, las lecturas de caché y las escrituras de caché son gratuitas. Cada solicitud tiene un cargo mínimo; cuando una entrada supera los 272.000 tokens, el precio de entrada de toda la solicitud es 2 veces la tarifa normal. Consulta los [Precios de los modelos](https://evolink.ai/pricing) para conocer las tarifas actuales
- Las imágenes deben ser URL de datos base64 integradas (`data:image/...;base64,...`); no se admiten URL de imágenes ni `file_id`. Máximo de 128 imágenes por solicitud
- Este endpoint rechaza campos desconocidos: no envíes parámetros de Chat Completions como `stream`, `temperature` o `max_tokens`
- Adecuado para clasificar contenido, asignar tickets, comprobar relevancia y puntuar según reglas. Para generar texto o estructuras JSON personalizadas, usa la [API Responses](/es/api-manual/language-series/gpt/responses/responses-reference)

<Note>
  **BaseURL**: La BaseURL predeterminada es `https://direct.evolink.ai`, que ofrece mejor compatibilidad con modelos de texto y admite conexiones persistentes. `https://api.evolink.ai` es el endpoint principal para servicios multimodales y actúa como dirección de respaldo para los modelos de texto.
</Note>

<Note>
  **ID de modelo exclusivo de este endpoint**: `gpt-6-luna-decisions` solo puede usarse en `/v1/decisions`. En Chat Completions, Responses u otros endpoints devuelve `400 model_endpoint_mismatch`. Para conversaciones o generación de texto, usa `gpt-6-luna` con [Chat Completions](/docs/es/api-manual/language-series/gpt/chat-completions/chat-completions-reference) o la [API Responses](/docs/es/api-manual/language-series/gpt/responses/responses-reference).
</Note>

<Note>
  **Cómo elegir el tipo de pregunta**

  | Tipo | Preguntas adecuadas | Cómo usar el resultado |
  | - | - | - |
  | `predicate` | Preguntas de sí/no, por ejemplo si un mensaje es una queja o si una imagen muestra daños | `probability` es la probabilidad de «sí»; define tu propio umbral y considera las probabilidades superiores como coincidencias |
  | `choice` | Seleccionar entre categorías mutuamente excluyentes, por ejemplo el departamento al que asignar un ticket | `choice` es la opción seleccionada; considera una revisión humana cuando `confidence` sea baja |
  | `score` | Evaluar en niveles de menor a mayor, por ejemplo la gravedad de un problema | `score` es la puntuación de nivel ponderada por probabilidades (índices a partir de 0) y puede ser decimal |

  Puedes incluir varias preguntas independientes en una solicitud; comparten el mismo `input`. Si una pregunta posterior depende de una respuesta anterior, divídelas en dos solicitudes.
</Note>

<Note>
  **Diferencias con Chat Completions / Responses**: Este endpoint solo acepta `model`, `input`, `questions` y `safety_identifier`. Cualquier campo adicional devuelve `400 unknown_parameter`; las imágenes deben ser URL de datos base64; no se admite streaming.
</Note>


## OpenAPI

````yaml es/api-manual/language-series/gpt/decisions/decisions-reference.json POST /v1/decisions
openapi: 3.1.0
info:
  title: GPT Decisions - Referencia completa de parámetros
  description: >-
    Usa la API Decisions compatible con OpenAI para que GPT-6 Luna tome
    decisiones estructuradas sobre texto e imágenes: probabilidades de sí/no,
    selección de una opción o puntuación en niveles ordenados.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://direct.evolink.ai
    description: Producción (recomendado)
  - url: https://api.evolink.ai
    description: Dirección de respaldo
security:
  - bearerAuth: []
tags:
  - name: Decisions
    description: 'Decisiones estructuradas: clasificación, asignación y puntuación'
paths:
  /v1/decisions:
    post:
      tags:
        - Decisions
      summary: GPT-6 Luna Decisions (decisiones estructuradas)
      description: >-
        - GPT-6 Luna Decisions (`gpt-6-luna-decisions`) evalúa texto, imágenes o
        ambos y devuelve tres tipos de respuestas estructuradas: `predicate`
        devuelve la probabilidad de «sí», `choice` selecciona una de las
        opciones indicadas y `score` calcula una puntuación ponderada por las
        probabilidades de niveles ordenados

        - API síncrona: una sola solicitud devuelve todas las respuestas; no hay
        streaming ni es necesario consultar el estado de una tarea

        - El cuerpo de la solicitud coincide con la API Decisions de OpenAI: con
        el SDK de OpenAI, apunta `base_url` a EvoLink. Este endpoint también
        acepta el ID de modelo de OpenAI `gpt-6-luna`

        - Solo se facturan los tokens de entrada: la salida, las lecturas de
        caché y las escrituras de caché son gratuitas. Cada solicitud tiene un
        cargo mínimo; cuando una entrada supera los 272.000 tokens, el precio de
        entrada de toda la solicitud es 2 veces la tarifa normal. Consulta los
        [Precios de los modelos](https://evolink.ai/pricing) para conocer las
        tarifas actuales

        - Las imágenes deben ser URL de datos base64 integradas
        (`data:image/...;base64,...`); no se admiten URL de imágenes ni
        `file_id`. Máximo de 128 imágenes por solicitud

        - Este endpoint rechaza campos desconocidos: no envíes parámetros de
        Chat Completions como `stream`, `temperature` o `max_tokens`

        - Adecuado para clasificar contenido, asignar tickets, comprobar
        relevancia y puntuar según reglas. Para generar texto o estructuras JSON
        personalizadas, usa la [API
        Responses](/es/api-manual/language-series/gpt/responses/responses-reference)
      operationId: createDecision
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
            examples:
              predicate:
                summary: Decisión de sí/no
                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: Selección única (asignación)
                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: Puntuación en niveles ordenados
                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: Varias preguntas en una solicitud
                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: Evaluar una imagen
                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: >-
            Una respuesta por pregunta, en el mismo orden que las preguntas de
            la solicitud
          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: >-
            Parámetros de solicitud no válidos. `param` indica el campo con el
            error. Causas habituales: falta de `questions`, campos desconocidos,
            imágenes que no son URL de datos base64, un `role` de mensaje
            distinto de `user` o valores `name` de pregunta duplicados. Usar
            este ID de modelo en otros endpoints también devuelve 400
            (`model_endpoint_mismatch`). Las solicitudes que no superan la
            validación no se facturan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unknown_parameter:
                  summary: Campo desconocido enviado
                  value:
                    error:
                      message: >-
                        Unknown parameter: 'stream'. (request id:
                        20261007223656995142218QgCDR3TF)
                      type: invalid_request_error
                      param: stream
                      code: unknown_parameter
                image_not_data_url:
                  summary: Imagen enviada como 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: Falta questions
                  value:
                    error:
                      message: >-
                        Missing required parameter: 'questions'. (request id:
                        20261007223656416678385UfxZWwZD)
                      type: invalid_request_error
                      param: questions
                      code: missing_required_parameter
        '401':
          description: 'No autorizado: API Key ausente o no válido'
          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: Saldo insuficiente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Este API Key tiene una lista de modelos permitidos que no incluye ni
            `gpt-6-luna-decisions` ni `gpt-6-luna`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            Este modelo no tiene habilitada la API Decisions. Actualmente solo
            se admite `gpt-6-luna-decisions` (o `gpt-6-luna`)
          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: Límite de frecuencia excedido; inténtalo de nuevo más tarde
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Error interno del servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Servicio temporalmente no disponible; inténtalo de nuevo más tarde
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    DecisionRequest:
      type: object
      additionalProperties: false
      required:
        - model
        - input
        - questions
      properties:
        model:
          type: string
          description: >-
            ID de modelo. Usa `gpt-6-luna-decisions`; este endpoint también
            acepta el ID de modelo de OpenAI `gpt-6-luna`. El comportamiento y
            la facturación son idénticos; los registros de uso y facturación se
            atribuyen a `gpt-6-luna-decisions`.


            `gpt-6-luna-decisions` solo puede utilizarse en este endpoint.
            Usarlo en Chat Completions, Responses u otros endpoints devuelve
            `400 model_endpoint_mismatch`.
          enum:
            - gpt-6-luna-decisions
            - gpt-6-luna
          example: gpt-6-luna-decisions
        input:
          description: >-
            La base común de todas las decisiones: un texto o un array de
            mensajes de usuario, que pueden contener texto e imágenes
            integradas.
          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: >-
            Preguntas que se deben evaluar; se requiere al menos 1. Las
            preguntas son independientes y pueden combinar distintos tipos; los
            valores `name` de las preguntas deben ser únicos dentro de una
            solicitud.


            | Tipo | Finalidad | Resultado principal |

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

            | `predicate` | Comprobar si se cumple una condición |
            `probability`: probabilidad de que se cumpla (de 0 a 1) |

            | `choice` | Seleccionar una de las opciones indicadas | `choice`:
            la opción seleccionada |

            | `score` | Puntuar en niveles ordenados | `score`: puntuación de
            nivel ponderada por probabilidades |


            Si una pregunta posterior depende de una respuesta anterior,
            divídelas en dos solicitudes.
          items:
            oneOf:
              - $ref: '#/components/schemas/PredicateQuestion'
              - $ref: '#/components/schemas/ChoiceQuestion'
              - $ref: '#/components/schemas/ScoreQuestion'
        safety_identifier:
          type: string
          description: >-
            Opcional. Tu propio identificador de usuario final (una cadena
            opaca), que se envía sin cambios al proveedor del modelo para
            detectar abusos
    DecisionResponse:
      type: object
      properties:
        model:
          type: string
          description: El modelo que realizó las decisiones
          example: gpt-6-luna
        answers:
          type: array
          description: >-
            Una respuesta por pregunta, en el mismo orden que en la solicitud.
            Usa `name` para identificar la pregunta y `type` para distinguir los
            tipos de respuesta
          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: >-
                Descripción del error, terminada en `(request id: ...)`.
                Proporciona este ID al investigar problemas
            type:
              type: string
              description: Tipo de error
            param:
              type:
                - string
                - 'null'
              description: Ruta del parámetro con el error
            code:
              type:
                - string
                - 'null'
              description: Código de error
    DecisionInputMessage:
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - user
          description: Solo se acepta `user`
        content:
          description: Un texto o un array de bloques de texto e imagen
          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: >-
            El nombre de la pregunta, devuelto sin cambios en la respuesta
            correspondiente
        instructions:
          type: string
          description: >-
            La condición que se debe evaluar, formulada como una pregunta de
            sí/no
    ChoiceQuestion:
      type: object
      required:
        - type
        - instructions
        - choices
      properties:
        type:
          type: string
          enum:
            - choice
        name:
          type: string
          description: >-
            El nombre de la pregunta, devuelto sin cambios en la respuesta
            correspondiente
        instructions:
          type: string
          description: La pregunta que se debe responder
        choices:
          type: array
          minItems: 1
          description: >-
            Opciones disponibles. Sus significados deben ser mutuamente
            excluyentes; si las categorías no cubren todos los casos, añade una
            opción de respaldo como `other`
          items:
            type: object
            required:
              - value
            properties:
              value:
                description: >-
                  El valor devuelto al seleccionar esta opción. Las cadenas y
                  los booleanos son tipos diferentes: `true` y `"true"` cuentan
                  como dos opciones
                oneOf:
                  - type: string
                  - type: boolean
              description:
                type: string
                description: Cuándo seleccionar esta opción
    ScoreQuestion:
      type: object
      required:
        - type
        - instructions
        - levels
      properties:
        type:
          type: string
          enum:
            - score
        name:
          type: string
          description: >-
            El nombre de la pregunta, devuelto sin cambios en la respuesta
            correspondiente
        instructions:
          type: string
          description: La pregunta que se debe responder
        levels:
          type: array
          minItems: 1
          description: Niveles ordenados de menor a mayor; los índices comienzan en 0
          items:
            type: object
            required:
              - label
            properties:
              label:
                type: string
                description: Nombre del nivel
              description:
                type: string
                description: Criterios para alcanzar este nivel
    PredicateAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - predicate
        name:
          type:
            - string
            - 'null'
          description: >-
            El nombre asignado a esta pregunta en la solicitud; `null` si no se
            proporcionó un nombre
        probability:
          type: number
          description: >-
            Probabilidad estimada de que se cumpla la condición, de 0 a 1.
            Define el umbral de decisión a partir de tus propios datos de
            negocio
    ChoiceAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - choice
        name:
          type:
            - string
            - 'null'
          description: >-
            El nombre asignado a esta pregunta en la solicitud; `null` si no se
            proporcionó un nombre
        choice:
          description: La opción seleccionada, del mismo tipo que `value` en la solicitud
          oneOf:
            - type: string
            - type: boolean
        probabilities:
          type: array
          description: Probabilidad de cada opción
          items:
            type: object
            properties:
              value:
                oneOf:
                  - type: string
                  - type: boolean
              probability:
                type: number
        confidence:
          type: number
          description: Confianza en esta elección, de 0 a 1
    ScoreAnswer:
      type: object
      properties:
        type:
          type: string
          enum:
            - score
        name:
          type:
            - string
            - 'null'
          description: >-
            El nombre asignado a esta pregunta en la solicitud; `null` si no se
            proporcionó un nombre
        score:
          type: number
          description: >-
            La media de los índices de nivel ponderada por probabilidades, por
            lo que puede quedar entre dos niveles. Por ejemplo, las
            probabilidades 0,04 / 0,58 / 0,38 en tres niveles dan una puntuación
            de 1,34
        probabilities:
          type: array
          description: Probabilidad de cada nivel
          items:
            type: object
            properties:
              value:
                type: integer
                description: Índice de nivel, a partir de 0
              label:
                type: string
              probability:
                type: number
        confidence:
          type: number
          description: Confianza en esta puntuación, de 0 a 1
    RefusalAnswer:
      type: object
      description: >-
        El modelo se negó a responder esta pregunta. Las demás respuestas no se
        ven afectadas; la solicitud sigue devolviendo 200 y se factura
        normalmente
      properties:
        type:
          type: string
          enum:
            - refusal
        name:
          type:
            - string
            - 'null'
          description: >-
            El nombre asignado a esta pregunta en la solicitud; `null` si no se
            proporcionó un nombre
    DecisionUsage:
      type: object
      description: >-
        Uso de tokens. Este endpoint solo factura los tokens de entrada: la
        salida, las lecturas de caché y las escrituras de caché son gratuitas.
        Cada solicitud tiene un cargo mínimo; cuando una entrada supera los
        272.000 tokens, el precio de entrada de toda la solicitud es 2 veces la
        tarifa normal. Consulta los [Precios de los
        modelos](https://evolink.ai/pricing) para conocer las tarifas actuales.
      properties:
        input_tokens:
          type: integer
          description: >-
            Tokens de entrada facturables, incluidos texto, imágenes y la carga
            fija de tokens por solicitud y por pregunta. Valores de referencia:
            una frase con una pregunta `predicate` usa unos 160 tokens; una
            imagen de 1536×1024 usa unos 1.540 tokens
          example: 426
        input_tokens_details:
          type: object
          description: >-
            Detalle de tokens de entrada. La caché no se factura por separado en
            este endpoint
          properties:
            cached_tokens:
              type: integer
              example: 0
            cache_write_tokens:
              type: integer
              example: 0
        output_tokens:
          type: integer
          description: La salida no se factura en este endpoint
          example: 0
        output_tokens_details:
          type: object
          properties:
            reasoning_tokens:
              type: integer
              example: 0
        total_tokens:
          type: integer
          description: Total de tokens
          example: 426
    InputTextPart:
      type: object
      required:
        - type
        - text
      properties:
        type:
          type: string
          enum:
            - input_text
        text:
          type: string
          description: Contenido de texto
    InputImagePart:
      type: object
      required:
        - type
        - image_url
      properties:
        type:
          type: string
          enum:
            - input_image
        image_url:
          type: string
          pattern: '^data:'
          description: >-
            Una URL de datos base64 integrada, como `data:image/png;base64,...`.
            Se rechazan las URL de imágenes `http(s)`; máximo de 128 imágenes
            por solicitud
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Todos los endpoints requieren autenticación Bearer Token##


        **Obtener un API Key:**


        Visita la [página de gestión de API
        Keys](https://evolink.ai/dashboard/keys) para obtener tu API Key


        **Añadir a la cabecera de la solicitud:**

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````

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