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

# Usa Chat Completions con Comfy Router

> Llama a openrouter/chat-completions mediante Comfy Router: endpoint, forma de la solicitud y respuesta que devuelve Router.

Referencia de API para `openrouter/chat-completions`, servida por Comfy Router desde Openrouter.

**Entrada:** Texto, Imagen · **Salida:** Texto

## Configurar la solicitud

Crea una clave en [tu espacio de trabajo de Comfy](https://platform.comfy.org/profile/api-keys?onboarding=router) y expórtala como `COMFY_API_KEY`. Para Python, ejecuta `pip install comfy-sdk`. Para TypeScript, ejecuta `npm install @comfyorg/sdk`. cURL usa HTTP sin procesar.

**ID del modelo:** `openrouter/chat-completions`

**Endpoint:** `POST https://api.comfy.org/v2/models/openrouter/chat-completions`

> [!NOTE]
>
> Este modelo no tiene un ejemplo de solicitud ejecutable. Construye el cuerpo a partir de la documentación de entrada que aparece abajo y luego úsalo con la [guía de inicio rápido del Router](https://docs.comfy.org/es/development/comfy-router/quickstart.md).

## Esquema

### Entrada

**cache\_control** `object`

Habilita el almacenamiento en caché automático de prompts. Cuando se define en el nivel superior, el sistema aplica automáticamente puntos de interrupción de caché al último bloque que se puede almacenar en caché en la solicitud. Actualmente es compatible con modelos de Anthropic Claude.

**cache\_control.ttl** `string`

Valores posibles: `5m`, `1h`

**cache\_control.type** `string` *required*

Valores posibles: `ephemeral`

**debug** `object`

Opciones de depuración para inspeccionar las transformaciones de la solicitud (solo streaming)

**debug.echo\_upstream\_body** `boolean`

Si es verdadero, incluye el cuerpo de la solicitud upstream transformado en un fragmento de depuración al inicio del stream. Solo funciona en modo streaming.

**frequency\_penalty** `number`

Penalización por frecuencia (-2.0 a 2.0)

Formato: `double`

**image\_config** `object | string | number | object[]`

**logit\_bias** `object`

Ajustes de sesgo de logit de tokens

**logprobs** `boolean`

Devuelve las probabilidades logarítmicas

**max\_completion\_tokens** `integer`

Máximo de tokens en la respuesta

**max\_tokens** `integer`

Máximo de tokens (obsoleto, usa max\_completion\_tokens). Nota: algunos proveedores exigen un mínimo de 16.

**messages** `object[]` *required*

Lista de mensajes de la conversación

**metadata** `object`

Pares clave-valor con información adicional del objeto (máximo 16 pares, claves de 64 caracteres y valores de 512 caracteres)

**modalities** \`\`text`, `image`, `audio`[]`

Modalidades de salida de la respuesta. Los valores admitidos son "text", "image" y "audio".

**model** `string`

Modelo a usar para la respuesta

**models** `string[]`

Modelos a usar para la respuesta

**parallel\_tool\_calls** `boolean`

Indica si se habilita el llamado paralelo de funciones durante el uso de herramientas. Cuando es verdadero, el modelo puede generar varias llamadas a herramientas en una sola respuesta.

**plugins** `object[]`

Plugins que quieres habilitar para esta solicitud, incluidos sus ajustes.

**presence\_penalty** `number`

Penalización por presencia (-2.0 a 2.0)

Formato: `double`

**provider** `object`

Cuando hay varios proveedores de modelos disponibles, puedes indicar opcionalmente tu preferencia de enrutamiento.

**provider.allow\_fallbacks** `boolean`

Indica si se permite que proveedores de respaldo atiendan las solicitudes

* true: (predeterminado) cuando el proveedor principal (o tus proveedores personalizados en "order") no está disponible, usa el siguiente mejor proveedor.
* false: usa solo el proveedor principal/personalizado y devuelve el error del upstream si no está disponible.

**provider.data\_collection** ``deny`, `allow``

Configuración de recopilación de datos. Si ningún proveedor de modelos disponible cumple el requisito, tu solicitud devolverá un error.

* allow: (predeterminado) permite proveedores que almacenan datos de usuario de forma no transitoria y que pueden entrenar con ellos

* deny: usa solo proveedores que no recopilan datos de usuario.

**provider.enforce\_distillable\_text** `boolean`

Indica si se restringe el enrutamiento solo a modelos que permiten la destilación de texto. Cuando es verdadero, solo se usarán los modelos en los que el autor haya permitido la destilación.

**provider.ignore** \`\`AkashML`, `AI21`, `AionLabs`, `Alibaba`, `Ambient`, `Baidu`, `Amazon Bedrock`, `Amazon Nova`, `Anthropic`, `Arcee AI`, `AtlasCloud`, `Avian`, `Azure`, `BaseTen`, `BytePlus`, `Black Forest Labs`, `Cerebras`, `Chutes`, `Cirrascale`, `Clarifai`, `Cloudflare`, `Cohere`, `Crucible`, `Crusoe`, `DeepInfra`, `DeepSeek`, `DekaLLM`, `Featherless`, `Fireworks`, `Friendli`, `GMICloud`, `Google`, `Google AI Studio`, `Groq`, `Hyperbolic`, `Inception`, `Inceptron`, `InferenceNet`, `Ionstream`, `Infermatic`, `Io Net`, `Inflection`, `Liquid`, `Mara`, `Mancer 2`, `Minimax`, `ModelRun`, `Mistral`, `Modular`, `Moonshot AI`, `Morph`, `NCompass`, `Nebius`, `Nex AGI`, `NextBit`, `Novita`, `Nvidia`, `OpenAI`, `OpenInference`, `Parasail`, `Poolside`, `Perceptron`, `Perplexity`, `Phala`, `Recraft`, `Reka`, `Relace`, `SambaNova`, `Seed`, `SiliconFlow`, `Sourceful`, `StepFun`, `Stealth`, `StreamLake`, `Switchpoint`, `Together`, `Upstage`, `Venice`, `WandB`, `Xiaomi`, `xAI`, `Z.AI`, `FakeProvider` | string[]`

Lista de slugs de proveedores que se deben ignorar. Si se proporciona, esta lista se combina con la configuración de proveedores ignorados de toda tu cuenta para esta solicitud.

**provider.max\_price** `object`

El objeto que especifica el precio máximo que quieres pagar por esta solicitud. Precio en USD por millón de tokens, para prompt y respuesta.

**provider.max\_price.audio** `string`

Precio por millón de tokens de prompt

**provider.max\_price.completion** `string`

Precio por millón de tokens de prompt

**provider.max\_price.image** `string`

Precio por millón de tokens de prompt

**provider.max\_price.prompt** `string`

Precio por millón de tokens de prompt

**provider.max\_price.request** `string`

Precio por millón de tokens de prompt

**provider.only** \`\`AkashML`, `AI21`, `AionLabs`, `Alibaba`, `Ambient`, `Baidu`, `Amazon Bedrock`, `Amazon Nova`, `Anthropic`, `Arcee AI`, `AtlasCloud`, `Avian`, `Azure`, `BaseTen`, `BytePlus`, `Black Forest Labs`, `Cerebras`, `Chutes`, `Cirrascale`, `Clarifai`, `Cloudflare`, `Cohere`, `Crucible`, `Crusoe`, `DeepInfra`, `DeepSeek`, `DekaLLM`, `Featherless`, `Fireworks`, `Friendli`, `GMICloud`, `Google`, `Google AI Studio`, `Groq`, `Hyperbolic`, `Inception`, `Inceptron`, `InferenceNet`, `Ionstream`, `Infermatic`, `Io Net`, `Inflection`, `Liquid`, `Mara`, `Mancer 2`, `Minimax`, `ModelRun`, `Mistral`, `Modular`, `Moonshot AI`, `Morph`, `NCompass`, `Nebius`, `Nex AGI`, `NextBit`, `Novita`, `Nvidia`, `OpenAI`, `OpenInference`, `Parasail`, `Poolside`, `Perceptron`, `Perplexity`, `Phala`, `Recraft`, `Reka`, `Relace`, `SambaNova`, `Seed`, `SiliconFlow`, `Sourceful`, `StepFun`, `Stealth`, `StreamLake`, `Switchpoint`, `Together`, `Upstage`, `Venice`, `WandB`, `Xiaomi`, `xAI`, `Z.AI`, `FakeProvider` | string[]`

Lista de slugs de proveedor permitidos. Si se proporciona, esta lista se combina con las configuraciones de proveedores permitidos de tu cuenta para esta solicitud.

**provider.order** \`\`AkashML`, `AI21`, `AionLabs`, `Alibaba`, `Ambient`, `Baidu`, `Amazon Bedrock`, `Amazon Nova`, `Anthropic`, `Arcee AI`, `AtlasCloud`, `Avian`, `Azure`, `BaseTen`, `BytePlus`, `Black Forest Labs`, `Cerebras`, `Chutes`, `Cirrascale`, `Clarifai`, `Cloudflare`, `Cohere`, `Crucible`, `Crusoe`, `DeepInfra`, `DeepSeek`, `DekaLLM`, `Featherless`, `Fireworks`, `Friendli`, `GMICloud`, `Google`, `Google AI Studio`, `Groq`, `Hyperbolic`, `Inception`, `Inceptron`, `InferenceNet`, `Ionstream`, `Infermatic`, `Io Net`, `Inflection`, `Liquid`, `Mara`, `Mancer 2`, `Minimax`, `ModelRun`, `Mistral`, `Modular`, `Moonshot AI`, `Morph`, `NCompass`, `Nebius`, `Nex AGI`, `NextBit`, `Novita`, `Nvidia`, `OpenAI`, `OpenInference`, `Parasail`, `Poolside`, `Perceptron`, `Perplexity`, `Phala`, `Recraft`, `Reka`, `Relace`, `SambaNova`, `Seed`, `SiliconFlow`, `Sourceful`, `StepFun`, `Stealth`, `StreamLake`, `Switchpoint`, `Together`, `Upstage`, `Venice`, `WandB`, `Xiaomi`, `xAI`, `Z.AI`, `FakeProvider` | string[]`

Una lista ordenada de slugs de proveedor. El enrutador intentará usar el primer proveedor del subconjunto de esta lista que admita el modelo que solicitaste y recurrirá al siguiente si no está disponible. Si no hay proveedores disponibles, la solicitud fallará con un mensaje de error.

**provider.preferred\_max\_latency** `number | object`

Latencia máxima preferida (en segundos). Puede ser un número (se aplica a p50) o un objeto con umbrales específicos por percentil. Los endpoints por encima de los umbrales aún pueden usarse, pero tienen menor prioridad en el enrutamiento. Al usar modelos de respaldo, esto puede provocar que se use un modelo de respaldo en lugar del modelo principal si cumple con el umbral.

**provider.preferred\_min\_throughput** `number | object`

Rendimiento mínimo preferido (en tokens por segundo). Puede ser un número (se aplica a p50) o un objeto con umbrales específicos por percentil. Los endpoints por debajo de los umbrales aún pueden usarse, pero tienen menor prioridad en el enrutamiento. Al usar modelos de respaldo, esto puede provocar que se use un modelo de respaldo en lugar del modelo principal si cumple con el umbral.

**provider.quantizations** \`\`int4`, `int8`, `fp4`, `fp6`, `fp8`, `fp16`, `bf16`, `fp32`, `unknown`[]`

Una lista de niveles de cuantización para filtrar los proveedores.

**provider.require\_parameters** `boolean`

Indica si se deben filtrar los proveedores para dejar solo aquellos que admitan los parámetros que proporcionaste. Si se omite esta configuración o se establece en false, los proveedores recibirán solo los parámetros que admitan e ignorarán el resto.

**provider.sort** \`\`price`, `throughput`, `latency`, `exacto` | object`

La estrategia de ordenamiento que se usará para esta solicitud si no se especifica "order". Cuando se establece, no se realiza balanceo de carga.

**provider.zdr** `boolean`

Indica si se debe restringir el enrutamiento solo a endpoints ZDR (Zero Data Retention). Cuando es true, solo se usarán los endpoints que no retienen prompts.

**reasoning** `object`

Opciones de configuración para modelos de razonamiento

**reasoning.effort** ``xhigh`, `high`, `medium`, `low`, `minimal`, `none``

Restringe el esfuerzo de razonamiento en los modelos de razonamiento

**reasoning.summary** `string`

Valores posibles: `auto`, `concise`, `detailed`

**response\_format** `object`

Configuración del formato de respuesta

**route** `object`

Cualquier tipo

**seed** `integer`

Semilla aleatoria para salidas deterministas

**service\_tier** ``auto`, `default`, `flex`, `priority`, `scale``

El nivel de servicio que se usará para procesar esta solicitud.

**session\_id** `string`

Un identificador único para agrupar solicitudes relacionadas (por ejemplo, una conversación o un flujo de trabajo de agente) para observabilidad. Si se proporciona tanto en el cuerpo de la solicitud como en el encabezado x-session-id, el valor del cuerpo tiene prioridad. Máximo de 256 caracteres.

**stop** `string | string[] | object`

Secuencias de parada (hasta 4)

**stop\_server\_tools\_when** `object[]`

Condiciones de parada para el bucle del agente de herramientas del servidor. Si se activa cualquier condición, se detiene el bucle (lógica OR). Cuando se establece, anula `max_tool_calls`.

**stream** `boolean` (default: false)

Habilitar la respuesta en streaming

**stream\_options** `object`

Opciones de configuración de streaming

**stream\_options.include\_usage** `boolean`

Obsoleto: este campo no tiene efecto. Los detalles de uso completo siempre se incluyen.

**temperature** `number`

Temperatura de muestreo (0-2)

Formato: `double`

**tool\_choice** \`\`none`|`auto`|`required` | object`

Configuración de elección de herramienta

**tools** `object[]`

Herramientas disponibles para llamadas a funciones

**top\_logprobs** `integer`

Número de log probabilidades principales a devolver (0-20)

**top\_p** `number`

Parámetro de muestreo de núcleo (0-1)

Formato: `double`

**trace** `object`

Metadatos para observabilidad y trazabilidad. Las claves conocidas (trace\_id, trace\_name, span\_name, generation\_name, parent\_span\_id) tienen un manejo especial. Las claves adicionales se pasan como metadatos personalizados a los destinos de difusión configurados.

**trace.generation\_name** `string`

**trace.parent\_span\_id** `string`

**trace.span\_name** `string`

**trace.trace\_id** `string`

**trace.trace\_name** `string`

**user** `string`

Identificador único de usuario

Generado a partir del esquema que Router sirve en `GET /v2/models/openrouter/chat-completions/openapi.json`, el mismo documento contra el que valida una llamada antes de que la solicitud llegue al proveedor.

### Salida

**choices** `object[]` *required*

Lista de opciones de completado

**choices\[].finish\_reason** `string` *required*

Valores posibles: `tool_calls`, `stop`, `length`, `content_filter`, `error`

**choices\[].index** `integer` *required*

Índice de la opción

**choices\[].logprobs** `object`

Logaritmos de probabilidad del completado

**choices\[].logprobs.content** `object[]` *required*

Logaritmos de probabilidad de los tokens de contenido

**choices\[].logprobs.content\[].bytes** `integer[]` *required*

Bytes UTF-8 del token

**choices\[].logprobs.content\[].logprob** `number` *required*

Logaritmo de probabilidad del token

Formato: `double`

**choices\[].logprobs.content\[].token** `string` *required*

El token

**choices\[].logprobs.content\[].top\_logprobs** `object[]` *required*

Tokens alternativos principales con sus probabilidades

**choices\[].logprobs.content\[].top\_logprobs\[].bytes** `integer[]` *required*

**choices\[].logprobs.content\[].top\_logprobs\[].logprob** `number` *required*

Formato: `double`

**choices\[].logprobs.content\[].top\_logprobs\[].token** `string` *required*

**choices\[].logprobs.refusal** `object[]`

Logaritmos de probabilidad de los tokens de rechazo

**choices\[].logprobs.refusal\[].bytes** `integer[]` *required*

Bytes UTF-8 del token

**choices\[].logprobs.refusal\[].logprob** `number` *required*

Logaritmo de probabilidad del token

Formato: `double`

**choices\[].logprobs.refusal\[].token** `string` *required*

El token

**choices\[].logprobs.refusal\[].top\_logprobs** `object[]` *required*

Tokens alternativos principales con sus probabilidades

**choices\[].logprobs.refusal\[].top\_logprobs\[].bytes** `integer[]` *required*

**choices\[].logprobs.refusal\[].top\_logprobs\[].logprob** `number` *required*

Formato: `double`

**choices\[].logprobs.refusal\[].top\_logprobs\[].token** `string` *required*

**choices\[].message** `object` *required*

Mensaje del asistente para solicitudes y respuestas

**choices\[].message.audio** `object`

Datos o referencia de salida de audio

**choices\[].message.audio.data** `string`

Datos de audio codificados en Base64

**choices\[].message.audio.expires\_at** `integer`

Marca de tiempo de expiración del audio

**choices\[].message.audio.id** `string`

Identificador de la salida de audio

**choices\[].message.audio.transcript** `string`

Transcripción del audio

**choices\[].message.content** `string | object[] | object`

Contenido del mensaje del asistente

**choices\[].message.images** `object[]`

Imágenes generadas por modelos de generación de imágenes

**choices\[].message.images\[].image\_url** `object` *required*

**choices\[].message.images\[].image\_url.url** `string` *required*

URL o datos codificados en base64 de la imagen generada

**choices\[].message.name** `string`

Nombre opcional para el asistente

**choices\[].message.reasoning** `string`

Salida de razonamiento

**choices\[].message.reasoning\_details** `object[]`

Detalles de razonamiento para modelos de pensamiento extendido

**choices\[].message.refusal** `string`

Mensaje de rechazo si se rechazó el contenido

**choices\[].message.tool\_calls** `object[]`

Llamadas a herramientas realizadas por el asistente

**choices\[].message.tool\_calls\[].function** `object` *required*

**choices\[].message.tool\_calls\[].function.arguments** `string` *required*

Argumentos de la función como cadena JSON

**choices\[].message.tool\_calls\[].function.name** `string` *required*

Nombre de la función a llamar

**choices\[].message.tool\_calls\[].id** `string` *required*

Identificador de la llamada a la herramienta

**choices\[].message.tool\_calls\[].type** `string` *required*

Valores posibles: `function`

**created** `integer` *required*

Marca de tiempo Unix de creación

**id** `string` *required*

Identificador único del completado

**model** `string` *required*

Modelo usado para el completado

**object** `string` *required*

Valores posibles: `chat.completion`

**openrouter\_metadata** `object`

**openrouter\_metadata.attempt** `integer` *required*

**openrouter\_metadata.attempts** `object[]`

**openrouter\_metadata.attempts\[].model** `string` *required*

**openrouter\_metadata.attempts\[].provider** `string` *required*

**openrouter\_metadata.attempts\[].status** `integer` *required*

**openrouter\_metadata.endpoints** `object` *required*

**openrouter\_metadata.endpoints.available** `object[]` *required*

**openrouter\_metadata.endpoints.available\[].model** `string` *required*

**openrouter\_metadata.endpoints.available\[].provider** `string` *required*

**openrouter\_metadata.endpoints.available\[].selected** `boolean` *required*

**openrouter\_metadata.endpoints.total** `integer` *required*

**openrouter\_metadata.is\_byok** `boolean` *required*

**openrouter\_metadata.params** `object`

**openrouter\_metadata.params.quality\_floor** `number`

Formato: `double`

**openrouter\_metadata.params.throughput\_floor** `number`

Formato: `double`

**openrouter\_metadata.params.version\_group** `string`

**openrouter\_metadata.pipeline** `object[]`

**openrouter\_metadata.pipeline\[].cost\_usd** `number`

Formato: `double`

**openrouter\_metadata.pipeline\[].data** `object`

**openrouter\_metadata.pipeline\[].guardrail\_id** `string`

**openrouter\_metadata.pipeline\[].guardrail\_scope** `string`

**openrouter\_metadata.pipeline\[].name** `string` *required*

**openrouter\_metadata.pipeline\[].summary** `string`

**openrouter\_metadata.pipeline\[].type** `string` *required*

Tipo categórico de una etapa de pipeline. Varios plugins pueden compartir un tipo (por ejemplo, todos los plugins de nivel guardrail emiten `guardrail`); el campo `name` distingue qué plugin lo emitió.

Valores posibles: `guardrail`, `plugin`, `server_tools`, `response_healing`, `context_compression`

**openrouter\_metadata.region** `string` *required*

**openrouter\_metadata.requested** `string` *required*

**openrouter\_metadata.strategy** `string` *required*

Valores posibles: `direct`, `auto`, `free`, `latest`, `alias`, `fallback`, `pareto`, `bodybuilder`, `fusion`

**openrouter\_metadata.summary** `string` *required*

**service\_tier** `string`

El nivel de servicio que utiliza el proveedor upstream para esta solicitud

**system\_fingerprint** `string` *required*

Huella del sistema

**usage** `object`

Estadísticas de uso de tokens

**usage.completion\_tokens** `integer` *required*

Número de tokens de la finalización

**usage.completion\_tokens\_details** `object`

Uso detallado de tokens de finalización

**usage.cost** `number`

Costo de la finalización

Formato: `double`

**usage.cost\_details** `object`

Desglose de los costos de inferencia upstream

**usage.cost\_details.upstream\_inference\_completions\_cost** `number` *required*

Formato: `double`

**usage.cost\_details.upstream\_inference\_cost** `number`

Formato: `double`

**usage.cost\_details.upstream\_inference\_prompt\_cost** `number` *required*

Formato: `double`

**usage.is\_byok** `boolean`

Indica si una solicitud se realizó con una configuración Bring Your Own Key

**usage.prompt\_tokens** `integer` *required*

Número de tokens del prompt

**usage.prompt\_tokens\_details** `object`

Uso detallado de tokens del prompt

**usage.total\_tokens** `integer` *required*

Número total de tokens

## Ejemplos

### Salida

```json theme={null}
{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "ok"
      }
    }
  ],
  "created": 1750000000,
  "id": "gen-0000000000-examplecompletion",
  "model": "anthropic/claude-sonnet-4.5",
  "object": "chat.completion",
  "system_fingerprint": null,
  "usage": {
    "completion_tokens": 128,
    "cost": 0.00123,
    "prompt_tokens": 42,
    "total_tokens": 170
  }
}
```

## Antes de lanzar

Los SDK crean una `Idempotency-Key` y la reutilizan para los reintentos automáticos. Para los reintentos manuales, reutiliza la clave original. Router puede mantener la conexión abierta hasta 10 minutos.

Cuando una solicitud falla, Router envía un encabezado de respuesta `X-Comfy-Error-Type` que explica el motivo. Un `422` significa que Router rechazó la entrada antes de llamar al proveedor, y un `413` significa que el cuerpo de la solicitud era más grande de lo que Router acepta. Descarga los recursos generados de inmediato, porque [las URL de resultados pueden caducar](https://docs.comfy.org/es/development/comfy-router/reference.md#recursos-del-resultado).

Cualquier límite de tamaño mencionado en la descripción de un campo más arriba es el límite propio del proveedor para ese campo, citado de la especificación del proveedor. Router aplica un tope aparte al cuerpo completo de la solicitud, con el que cuentan los medios codificados en base64: consulta [tamaño del cuerpo de la solicitud](https://docs.comfy.org/es/development/comfy-router/limitations.md#los-cuerpos-de-las-solicitudes-tienen-un-límite).

Esta página documenta un modelo socio al que se llama a través de Comfy Router. El mismo paquete `comfy-sdk` / `@comfyorg/sdk` también incluye un segundo cliente, para ejecutar todo un gráfico de flujo de trabajo de ComfyUI en Comfy Cloud: `Comfy(api_key=...)` / `new Comfy({ apiKey })`, con `client.workflows`, `client.assets` y `client.jobs`. Consulta [SDK de Comfy](https://docs.comfy.org/es/development/api-development/sdks.md).

> **[Encabezados](https://docs.comfy.org/es/development/comfy-router/headers.md)**
>
> Autenticación, idempotencia, IDs de solicitud, agrupaciones de errores, ritmo de reintentos y límites de gasto.

> **[Uso de la API de Router](https://docs.comfy.org/es/development/comfy-router/api.md)**
>
> Descubrimiento de modelos, errores de validación, reintentos y facturación.

> **[Limitaciones](https://docs.comfy.org/es/development/comfy-router/limitations.md)**
>
> Lo que Router no hace hoy y qué usar en su lugar.


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