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

# Respuesta del modelo

> Genera una respuesta del modelo en formato OpenAI Chat Completions, como JSON o en streaming.



## OpenAPI

````yaml es/openapi/es-openai-api-openapi.yaml POST /v1/chat/completions
openapi: 3.1.0
info:
  title: ER:LC Rusia - API compatible con OpenAI
  version: 1.0.0
  description: >-
    Métodos compatibles con OpenAI de Chat Completions, consulta de modelos y
    síntesis de voz de ER:LC Russia. Consulta los parámetros admitidos en cada
    método.
servers:
  - url: https://api.erlcrussia.com
    description: servidor principal
  - url: https://api.erlcrussia.xyz
    description: Servidor de respaldo
security: []
tags:
  - name: Audio
  - name: Chat Completions
  - name: Models
paths:
  /v1/chat/completions:
    post:
      tags:
        - Chat Completions
      summary: Respuesta del modelo
      description: >-
        Genera una respuesta del modelo en formato OpenAI Chat Completions, como
        JSON o en streaming.
      parameters:
        - name: X-Session-ID
          in: header
          required: false
          schema:
            type: string
          description: >-
            ID de la sesión de conversación (alternativa al campo session_id del
            cuerpo).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatCompletionRequest'
            example:
              model: niya-1
              messages:
                - role: system
                  content: Ты — Ния, официальный ассистент сервера ER:LC Россия.
                - role: user
                  content: Как получить лицензию на оружие в игре?
              stream: false
      responses:
        '200':
          description: Respuesta de modelo exitosa o secuencia de fragmentos (SSE).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatCompletionResponse'
              example:
                id: chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c
                session_id: session_1726838400000_a1b2c3
                object: chat.completion
                created: 1726838400
                model: niya-1
                choices:
                  - index: 0
                    message:
                      role: assistant
                      content: >-
                        Для получения лицензии на оружие вам необходимо прибыть
                        в полицейский департамент...
                    finish_reason: stop
                usage:
                  prompt_tokens: 812
                  completion_tokens: 96
                  total_tokens: 908
                  completion_tokens_details:
                    reasoning_tokens: 0
                  prompt_tokens_details:
                    cached_tokens: 512
                  cost_credits: 0.42
            text/event-stream:
              schema:
                type: string
                description: >-
                  Un flujo Server-Sent Events en formato OpenAI. Cada evento es
                  una línea `data: {...}` con un objeto `chat.completion.chunk`.
                  El primer chunk lleva `delta.role` igual a `assistant` y cada
                  chunk tiene `finish_reason`: `null` mientras llega la
                  respuesta y `stop` o `tool_calls` en el último. Con
                  `stream_options.include_usage: true` llega antes del final un
                  chunk con `choices: []` y `usage`. El flujo termina con `data:
                  [DONE]`. Si la generación falla, llega un evento `{"error":
                  {...}}` seguido de `data: [DONE]`.
              example: >+
                data:
                {"id":"chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c","object":"chat.completion.chunk","created":1726838400,"model":"niya-1","choices":[{"index":0,"delta":{"role":"assistant","content":"Для
                получения "},"finish_reason":null}]}


                data:
                {"id":"chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c","object":"chat.completion.chunk","created":1726838400,"model":"niya-1","choices":[{"index":0,"delta":{"content":"лицензии..."},"finish_reason":null}]}


                data:
                {"id":"chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c","object":"chat.completion.chunk","created":1726838400,"model":"niya-1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}


                data:
                {"id":"chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c","object":"chat.completion.chunk","created":1726838400,"model":"niya-1","choices":[],"usage":{"prompt_tokens":812,"completion_tokens":96,"total_tokens":908}}


                data: [DONE]

          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
            openai-processing-ms:
              $ref: '#/components/headers/ProcessingMs'
            x-ratelimit-limit-requests:
              $ref: '#/components/headers/RateLimitRequests'
            x-ratelimit-remaining-requests:
              $ref: '#/components/headers/RateLimitRemainingRequests'
            x-ratelimit-reset-requests:
              $ref: '#/components/headers/RateLimitResetRequests'
        '400':
          description: Cuerpo de la solicitud no válido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: >-
                    We could not parse the JSON body of your request. Make sure
                    it is valid JSON.
                  type: invalid_request_error
                  param: null
                  code: null
                  erlc_code: '5034'
        '401':
          description: Falta la clave o no es válida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: >-
                    Incorrect API key provided. Check the key or create a new
                    one in the dashboard.
                  type: invalid_request_error
                  param: null
                  code: invalid_api_key
                  erlc_code: '5008'
        '429':
          description: >-
            Límite de solicitudes superado (`type: requests`) o se agotaron los
            créditos de IA (`type: insufficient_quota`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                rate_limit:
                  value:
                    error:
                      message: Rate limit reached. Please slow down and retry later.
                      type: requests
                      param: null
                      code: rate_limit_exceeded
                      erlc_code: '5016'
                insufficient_quota:
                  value:
                    error:
                      message: >-
                        You exceeded your current quota, please check your plan
                        and billing details.
                      type: insufficient_quota
                      param: null
                      code: insufficient_quota
                      erlc_code: '5038'
        '503':
          description: El modelo no está disponible temporalmente, inténtalo más tarde.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  message: AI model temporarily unavailable
                  type: server_error
                  param: null
                  code: '5141'
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  schemas:
    ChatCompletionRequest:
      type: object
      required:
        - messages
      properties:
        model:
          type: string
          enum:
            - niya-1
            - emmy-1
            - hubert-1
            - default
          default: niya-1
          description: >-
            Identificación del modelo:

            - `niya-1` - Niya (modelo principal para tareas generales y
            moderación, contexto de 1M)

            - `emmy-1` - Emmy (modelo intelectual con razonamiento paso a paso,
            contexto 1M)

            - `hubert-1` - Hubert (modelo personalizado, contexto de 1M)
          example: niya-1
        messages:
          type: array
          minItems: 1
          description: Una lista de mensajes anteriores de la conversación.
          items:
            $ref: '#/components/schemas/ChatMessage'
        files:
          type: array
          description: Lista adicional de archivos o imágenes adjuntas a la solicitud.
          items:
            $ref: '#/components/schemas/FilePart'
        stream:
          type: boolean
          default: false
          description: >-
            Habilite la transmisión de respuestas de eventos enviados por el
            servidor (SSE).
        stream_options:
          type: object
          properties:
            include_usage:
              type: boolean
              default: false
              description: >-
                Si es `true`, justo antes de `data: [DONE]` llega un chunk
                aparte con `choices` vacío y el campo `usage`. Sin él, el flujo
                no incluye `usage`.
        thinking:
          type: boolean
          description: >-
            Habilitar el modo de pensamiento paso a paso (cadena de
            razonamiento).
          example: true
        surzhyk:
          type: boolean
          default: false
          description: >-
            Para el modelo hubert-1 incluye un surzhik patentado. De forma
            predeterminada, Hubert responde en el idioma del último mensaje del
            usuario.
        effort:
          type: string
          enum:
            - low
            - medium
            - high
            - extra
            - max
          description: |-
            Grado de detalle del razonamiento (nivel de reflexión):
            - `low` - verificación de hechos básicos;
            - `medium` — análisis equilibrado (predeterminado);
            - `high` - análisis completo paso a paso;
            - `extra` / `max`: el nivel máximo de análisis.
          example: medium
        session_id:
          type: string
          description: >-
            Identificador de sesión de chat público (UUIDv4). Le permite guardar
            contexto entre solicitudes.
          example: f47ac10b-58cc-4372-a567-0e02b2c3d479
        regenerate:
          type: boolean
          description: Bandera para regeneración forzada de la última respuesta.
        tools:
          type: array
          items:
            type: object
          description: >-
            Herramientas en formato OpenAI. Solo funcionan con una clave de
            agente (`sk-agent-…`); con una clave de chat se ignoran.
        tool_choice:
          description: Elección de herramienta en formato OpenAI.
          oneOf:
            - type: string
            - type: object
        reasoning_effort:
          type: string
          description: Nivel de razonamiento en formato OpenAI. Igual que `effort`.
        web_search:
          type: boolean
          description: Permite al modelo buscar en internet.
      description: >-
        Los campos estándar de OpenAI `temperature`, `top_p`, `max_tokens`,
        `max_completion_tokens`, `stop`, `n` y `response_format` se aceptan pero
        no se aplican.
    ChatCompletionResponse:
      type: object
      properties:
        id:
          type: string
          example: chatcmpl-9b2f6c1e4a7d4c0e9f1a2b3c
        session_id:
          type: string
          example: f47ac10b-58cc-4372-a567-0e02b2c3d479
        object:
          type: string
          example: chat.completion
        created:
          type: integer
          example: 1726838400
        model:
          type: string
          example: niya-1
        choices:
          type: array
          items:
            type: object
            properties:
              index:
                type: integer
                example: 0
              message:
                type: object
                properties:
                  role:
                    type: string
                    example: assistant
                  content:
                    type: string
                    example: Здравствуйте! Чем я могу вам помочь?
                  reasoning:
                    type: string
                    description: >-
                      Texto de la cadena de razonamiento del modelo (si el
                      pensamiento está habilitado).
                  reasoning_content:
                    type: string
                    description: >-
                      Campo de razonamiento duplicado para compatibilidad con
                      diferentes clientes (formato DeepSeek/vLLM).
              finish_reason:
                type: string
                example: stop
        usage:
          type: object
          description: >-
            Consumo de tokens. `prompt_tokens` incluye los tokens en caché;
            `total_tokens = prompt_tokens + completion_tokens`. `cost_credits`
            son los créditos de IA cobrados.
          properties:
            prompt_tokens:
              type: integer
              example: 812
            completion_tokens:
              type: integer
              example: 96
            total_tokens:
              type: integer
              example: 908
            completion_tokens_details:
              type: object
              properties:
                reasoning_tokens:
                  type: integer
                  example: 0
            prompt_tokens_details:
              type: object
              properties:
                cached_tokens:
                  type: integer
                  example: 512
            cost_credits:
              type: number
              description: Créditos de IA cobrados.
              example: 0.42
    ErrorResponse:
      type: object
      description: >-
        Un error en formato OpenAI. `code` es un código de texto de OpenAI
        (`invalid_api_key`, `model_not_found`, `insufficient_quota`,
        `rate_limit_exceeded`) o `null`. El código numérico de ER:LC Rusia va en
        `erlc_code`, consulta los [códigos de
        error](/es/documentation/error-codes).
      properties:
        error:
          type: object
          properties:
            message:
              type: string
              example: Insufficient AI Credits
            type:
              type: string
              enum:
                - invalid_request_error
                - insufficient_quota
                - requests
                - server_error
              example: insufficient_quota
            param:
              type:
                - string
                - 'null'
              example: null
            code:
              type:
                - string
                - 'null'
              example: insufficient_quota
            erlc_code:
              type: string
              description: ER:LC Russia numeric error code.
              example: '5038'
    ChatMessage:
      type: object
      required:
        - role
        - content
      properties:
        role:
          type: string
          enum:
            - system
            - user
            - assistant
          description: >-
            Función del autor de la publicación:

            - `system` - instrucciones del sistema y reglas de comportamiento
            del modelo;

            - `user` — solicitud o respuesta del usuario;

            - `assistant`: respuesta del modelo anterior para guardar contexto.
          example: user
        content:
          oneOf:
            - type: string
              description: Contenido textual del mensaje.
              example: Привет! Чем ты можешь помочь?
            - type: array
              description: Matriz multimodal de bloques (texto, imágenes, archivos).
              items:
                type: object
                properties:
                  type:
                    type: string
                    enum:
                      - text
                      - image_url
                      - file
                  text:
                    type: string
                  image_url:
                    type: object
                    properties:
                      url:
                        type: string
                        example: https://cdn.erlcrussia.com/images/screenshot.png
                  file:
                    type: object
                    properties:
                      url:
                        type: string
                      mime:
                        type: string
                      filename:
                        type: string
    FilePart:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - file
          example: file
        mime:
          type: string
          example: image/png
        filename:
          type: string
          example: screenshot.png
        url:
          type: string
          example: https://cdn.erlcrussia.com/images/screenshot.png
  headers:
    RequestId:
      description: ID de la solicitud para soporte.
      schema:
        type: string
        example: req_8f2c1e9b4a7d4c0e9f1a2b3c4d5e6f70
    ProcessingMs:
      description: Tiempo de procesamiento en milisegundos.
      schema:
        type: integer
        example: 412
    RateLimitRequests:
      description: Límite de solicitudes en la ventana actual.
      schema:
        type: integer
        example: 120
    RateLimitRemainingRequests:
      description: Solicitudes restantes en la ventana actual.
      schema:
        type: integer
        example: 119
    RateLimitResetRequests:
      description: Tiempo hasta que se reinicia el límite, por ejemplo `1s` o `6m0s`.
      schema:
        type: string
        example: 1s
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Pasando el token de autorización en el encabezado Autorización: Portador
        <token>.
    ApiKeyAuth:
      type: apiKey
      in: header
      name: erlcrussia-api-ai-key
      description: La clave en la cabecera erlcrussia-api-ai-key.

````

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