For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal

Migrar a la API Responses

La API Responses es nuestra nueva primitiva de API, una evolución de Chat Completions que aporta mayor simplicidad y potentes primitivas para agentes a tus integraciones.

Chat Completions sigue contando con soporte, pero recomendamos Responses para todos los proyectos nuevos.

Acerca de la API Responses

La API Responses es una interfaz unificada para crear aplicaciones potentes que funcionan como agentes. Incluye:

Ventajas de Responses

La API Responses ofrece varias ventajas frente a Chat Completions:

  • Mejor rendimiento: usar modelos de razonamiento, como GPT-5, con Responses mejora la inteligencia del modelo en comparación con Chat Completions. Nuestras evaluaciones internas muestran una mejora del 3 % en SWE-bench con el mismo prompt y la misma configuración.
  • Funcionamiento como agente de forma predeterminada: la API Responses funciona como un bucle de agente y permite que el modelo llame a varias herramientas, como web_search, image_generation, file_search, code_interpreter y servidores MCP remotos, además de tus propias funciones personalizadas, dentro de una sola solicitud a la API.
  • Menores costos: reduce los costos gracias a un mejor aprovechamiento de la caché (una mejora del 40 % al 80 % en comparación con Chat Completions en pruebas internas).
  • Contexto con estado: usa store: true para mantener el estado entre turnos y conservar el contexto de razonamiento y de las herramientas.
  • Entradas flexibles: pasa una cadena mediante input o una lista de mensajes; usa instructions para proporcionar directrices a nivel de sistema.
  • Razonamiento cifrado: desactiva la conservación del estado y sigue aprovechando el razonamiento avanzado.
  • Preparada para el futuro: preparada para los próximos modelos.
CapacidadesAPI para completar chatsAPI Responses
Generación de texto
AudioPróximamente
Visión
Resultados estructurados
Llamada a funciones
Búsqueda web
Búsqueda de archivos
Uso de la computadora
Intérprete de código
MCP
Generación de imágenes
Resúmenes de razonamiento

Ejemplos

Compara la API Responses con la API para completar chats en situaciones específicas.

Mensajes y elementos

Ambas API facilitan la generación de resultados con nuestros modelos. Tanto la entrada como el resultado de una llamada a Chat Completions son un arreglo de mensajes, mientras que la API Responses usa elementos. Un elemento es una unión de varios tipos que representa las distintas posibilidades de acción del modelo. Un message es un tipo de elemento, al igual que un function_call o un function_call_output. A diferencia de un mensaje de Chat Completions, donde se agrupan muchos aspectos en un solo objeto, los elementos están separados entre sí y representan mejor la unidad básica del contexto del modelo.

Además, Chat Completions puede devolver varias generaciones en paralelo como choices, mediante el parámetro n. En Responses, eliminamos este parámetro y dejamos una sola generación.

API para completar chats
from openai import OpenAI

client = OpenAI()

completion = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[
        {
            "role": "user",
            "content": "Write a one-sentence bedtime story about a unicorn.",
        }
    ],
)

print(completion.choices[0].message.content)
API Responses
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",
    input="Write a one-sentence bedtime story about a unicorn.",
)

print(response.output_text)

Cuando recibes una respuesta de la API Responses, los campos difieren ligeramente. En lugar de un message, recibes un objeto response tipado con su propio id. Las respuestas de Responses se almacenan de forma predeterminada. Las de Chat Completions se almacenan de forma predeterminada para las cuentas nuevas. Para desactivar el almacenamiento al usar cualquiera de las dos API, establece store: false.

Los objetos que recibes de estas API difieren ligeramente. En Chat Completions, recibes un arreglo de choices, cada uno de los cuales contiene un message. En Responses, recibes un arreglo de elementos denominado output.

API para completar chats
{
  "id": "chatcmpl-C9EDpkjH60VPPIB86j2zIhiR8kWiC",
  "object": "chat.completion",
  "created": 1756315657,
  "model": "gpt-5.5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Under a blanket of starlight, a sleepy unicorn tiptoed through moonlit meadows, gathering dreams like dew to tuck beneath its silver mane until morning.",
        "refusal": null,
        "annotations": []
      },
      "finish_reason": "stop"
    }
  ],
  ...
}
API Responses
{
  "id": "resp_68af4030592c81938ec0a5fbab4a3e9f05438e46b5f69a3b",
  "object": "response",
  "created_at": 1756315696,
  "model": "gpt-5.5",
  "output": [
    {
      "id": "rs_68af4030baa48193b0b43b4c2a176a1a05438e46b5f69a3b",
      "type": "reasoning",
      "content": [],
      "summary": []
    },
    {
      "id": "msg_68af40337e58819392e935fb404414d005438e46b5f69a3b",
      "type": "message",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "annotations": [],
          "logprobs": [],
          "text": "Under a quilt of moonlight, a drowsy unicorn wandered through quiet meadows, brushing blossoms with her glowing horn so they sighed soft lullabies that carried every dreamer gently to sleep."
        }
      ],
      "role": "assistant"
    }
  ],
  ...
}

Diferencias adicionales

  • Las respuestas de Responses se almacenan de forma predeterminada. Las de Chat Completions se almacenan de forma predeterminada para las cuentas nuevas. Para desactivar el almacenamiento en cualquiera de las dos API, establece store: false.
  • Los modelos de razonamiento ofrecen una experiencia más completa en la API Responses con mejoras en el uso de herramientas. A partir de GPT-5.4, Chat Completions no admite llamadas a herramientas con valores de reasoning_effort distintos de none.
  • La estructura de la API para resultados estructurados es diferente. En Responses, usa text.format en lugar de response_format. Obtén más información en la guía de resultados estructurados.
  • La estructura de la API para llamadas a funciones es diferente, tanto en la configuración de las funciones en la solicitud como en las llamadas a funciones que se devuelven en la respuesta. Consulta todas las diferencias en la guía de llamada a funciones.
  • El SDK de Responses incluye una utilidad output_text que no está disponible en el SDK de Chat Completions.
  • En Chat Completions, el estado de la conversación debe gestionarse manualmente. La API Responses es compatible con la API Conversations para mantener conversaciones persistentes y también permite pasar un previous_response_id para encadenar respuestas fácilmente.

Migrar desde Chat Completions

Aborda la migración como tres cambios relacionados: enviar solicitudes a /v1/responses, leer los resultados de un arreglo output tipado y elegir cómo tu aplicación conservará el estado entre turnos.

1. Actualiza los puntos de acceso de generación

Comienza por cambiar tus puntos de acceso de generación de post /v1/chat/completions a post /v1/responses.

Si no usas funciones ni entradas multimodales, las entradas de mensajes simples son compatibles entre ambas API:

Reutilizar una entrada de mensajes simples
const context = [
  { role: "system", content: "You are a helpful assistant." },
  { role: "user", content: "Hello!" },
];

const completion = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: context,
});

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: context,
});

Con Chat Completions, creas un arreglo messages y lees el texto del modelo en completion.choices[0].message.content.
Generar texto con un modelo
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const completion = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "Hello!" },
  ],
});
console.log(completion.choices[0].message.content);

2. Establece la correspondencia entre mensajes y elementos

Chat Completions usa messages tanto para la entrada como para la salida. Responses usa arreglos input y output de elementos tipados. Un message es un tipo de elemento, al igual que reasoning, function_call y function_call_output.

Concepto de Chat CompletionsEquivalente en Responses
messages[]input, como una cadena o un arreglo de elementos de entrada
Instrucciones del sistema o del desarrolladorinstructions en el nivel superior, o elementos de mensaje compatibles cuando necesites conservar una transcripción existente
Mensaje del usuarioUn elemento de mensaje de entrada con role: "user"
Mensaje del asistenteUn elemento de mensaje de salida en response.output; vuelve a pasarlo en input si administras el estado manualmente
Llamada a una herramienta o funciónUn elemento de salida de tipo function_call
Resultado de una herramienta o funciónUn elemento de entrada de tipo function_call_output vinculado a la llamada mediante call_id
Varias generaciones con nNo está disponible en Responses; realiza solicitudes por separado si necesitas varias salidas candidatas

Cuando solo necesites el texto final, usa la utilidad output_text del SDK. Cuando tu flujo use razonamiento, herramientas o salida multimodal, recorre response.output y procesa cada elemento según su type.

3. Actualiza las conversaciones de varios turnos

Si tu aplicación tiene conversaciones de varios turnos, actualiza la lógica de contexto. Responses te ofrece tres opciones habituales para administrar el estado:

  • Usa previous_response_id cuando quieras que OpenAI administre el contexto de las respuestas anteriores. Vuelve a enviar el contenido fijo de instructions en cada solicitud, porque previous_response_id no conserva el campo instructions de nivel superior de la respuesta anterior.
  • Vuelve a pasar los elementos anteriores de output en la siguiente solicitud cuando necesites administrar o recortar el contexto por tu cuenta.
  • Usa la API Conversations cuando necesites un objeto de conversación persistente.

En Chat Completions, almacenas la transcripción y envías el arreglo messages acumulado en cada solicitud.
Conversación de varios turnos
let messages = [
  { role: "system", content: "You are a helpful assistant." },
  { role: "user", content: "What is the capital of France?" },
];
const res1 = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages,
});

messages = messages.concat([res1.choices[0].message]);
messages.push({ role: "user", content: "And its population?" });

const res2 = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages,
});

Incluso cuando usas previous_response_id, todos los tokens de entrada anteriores de las respuestas de la cadena se facturan como tokens de entrada en la API.

4. Decide cuándo conservar el estado

Las respuestas de Responses se almacenan de forma predeterminada. Las de Chat Completions se almacenan de forma predeterminada para las cuentas nuevas. Para desactivar el almacenamiento en cualquiera de las dos API, configura store: false.

Algunas organizaciones, como las que tienen requisitos de retención cero de datos (ZDR), no pueden usar la API Responses con conservación de estado debido a políticas de cumplimiento o retención de datos. Para estos casos, OpenAI ofrece elementos de razonamiento cifrados, que te permiten mantener un flujo de trabajo sin estado y seguir aprovechando los elementos de razonamiento.

Para desactivar la conservación de estado y seguir aprovechando el razonamiento:

  • Configura store: false en el campo store.
  • Conserva y vuelve a enviar cada elemento de razonamiento devuelto. Cada elemento incluye encrypted_content de forma predeterminada cuando creas una respuesta.

La API devolverá entonces una versión cifrada de los tokens de razonamiento, que puedes volver a pasar en solicitudes futuras como cualquier otro elemento de razonamiento. Para las organizaciones con ZDR, OpenAI aplica store: false automáticamente. Cuando una solicitud incluye encrypted_content, este contenido se descifra en memoria, se usa para generar la siguiente respuesta y luego se descarta de forma segura. Los nuevos tokens de razonamiento se cifran de inmediato y se te devuelven, lo que garantiza que no se almacene ningún estado intermedio.

5. Actualiza las definiciones y las salidas de las funciones

Hay dos diferencias menores, pero relevantes, en la forma de definir funciones en Chat Completions y Responses.

  1. En Chat Completions, las definiciones de funciones llevan etiquetas externas. En Responses, llevan etiquetas internas.
  2. En Chat Completions, las funciones no son estrictas de forma predeterminada. En Responses, si omites strict, se intenta usar el modo estricto; si no es posible hacer compatible el esquema, Responses recurre a llamadas a funciones no estrictas que intentan ajustarse al esquema en la medida de lo posible y devuelve la herramienta resuelta con strict: false. Para mantener explícitamente el comportamiento no estricto en Responses, configura strict: false.

El ejemplo de función de la API Responses de la derecha es funcionalmente equivalente al ejemplo de Chat Completions de la izquierda.

API para completar chats
{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "Determine weather in my location",
    "strict": true,
    "parameters": {
      "type": "object",
      "properties": {
        "location": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "required": [
        "location"
      ]
    }
  }
}
API Responses
{
  "type": "function",
  "name": "get_weather",
  "description": "Determine weather in my location",
  "parameters": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string"
      }
    },
    "additionalProperties": false,
    "required": [
      "location"
    ]
  }
}

Sigue las prácticas recomendadas para la llamada a funciones

En Responses, las llamadas a herramientas y sus resultados son dos tipos distintos de elementos que se relacionan mediante un call_id. Consulta la documentación sobre la llamada a funciones para obtener más detalles sobre cómo funciona la llamada a funciones en Responses.

6. Actualiza las definiciones de resultados estructurados

En la API Responses, las definiciones de resultados estructurados se trasladaron de response_format a text.format:

Resultados estructurados
const completion = await openai.chat.completions.create({
  model: "gpt-6-astra",
  messages: [
    {
      role: "user",
      content: "Jane, 54 years old",
    },
  ],
  response_format: {
    type: "json_schema",
    json_schema: {
      name: "person",
      strict: true,
      schema: {
        type: "object",
        properties: {
          name: {
            type: "string",
            minLength: 1,
          },
          age: {
            type: "number",
            minimum: 0,
            maximum: 130,
          },
        },
        required: ["name", "age"],
        additionalProperties: false,
      },
    },
  },
  reasoning_effort: "medium",
});

7. Actualiza los consumidores de transmisión continua

La transmisión continua de Chat Completions devuelve fragmentos incrementales con un campo delta. La transmisión continua de Responses usa eventos tipados enviados por el servidor. Actualiza los consumidores de transmisión continua para que ejecuten la lógica correspondiente según el type de cada evento y procesen los eventos que necesite tu interfaz de usuario o capa de orquestación.

Para la transmisión continua de texto, escucha eventos como:

  • response.created
  • response.output_text.delta
  • response.completed
  • error

Las transmisiones continuas de llamadas a funciones también pueden emitir eventos como response.function_call_arguments.delta y response.function_call_arguments.done. Consulta la guía de transmisión continua de Responses y la referencia de eventos de transmisión continua de Responses.

8. Migra a herramientas nativas

Si tu aplicación tiene casos de uso que se beneficiarían de las herramientas nativas de OpenAI, puedes actualizar tus llamadas a herramientas para usar directamente las herramientas de OpenAI.

Con Chat Completions, no puedes usar de forma nativa las herramientas alojadas por OpenAI y debes escribir tu propia integración de herramientas. Este ejemplo usa GPT-5.6 porque GPT-6 Astra requiere la API Responses para llamar a herramientas.
Herramienta de búsqueda web
async function web_search(query) {
  const res = await fetch(`https://api.example.com/search?q=${query}`);
  const data = await res.json();
  return data.results;
}

const completion = await client.chat.completions.create({
  model: "gpt-5.6",
  messages: [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "Who is the current president of France?" },
  ],
  functions: [
    {
      name: "web_search",
      description: "Search the web for information",
      parameters: {
        type: "object",
        properties: { query: { type: "string" } },
        required: ["query"],
      },
    },
  ],
});

9. Revisa los errores comunes de migración

Presta atención a estos problemas al migrar código de Chat Completions a Responses:

  • Leer choices[0].message.content en lugar de response.output_text o response.output.
  • Tratar cada entrada de output como un mensaje. El razonamiento, las llamadas a herramientas y las llamadas a funciones son tipos de elementos distintos.
  • Omitir elementos de razonamiento, llamadas a funciones o resultados de llamadas a funciones al pasar manualmente el contexto a la siguiente respuesta.
  • Enviar el resultado de una función sin el call_id correspondiente.
  • Usar response_format en una solicitud a Responses en lugar de text.format.
  • Reutilizar los controladores de fragmentos de transmisión continua de Chat Completions sin procesar los eventos tipados de Responses.
  • Suponer que previous_response_id elimina los cargos por el contexto previo. Los tokens de entrada anteriores en la cadena de respuestas se siguen facturando como tokens de entrada.

Lista de verificación para la implementación gradual

Chat Completions sigue siendo compatible, por lo que puedes migrar un flujo de usuario a la vez.

  • Comienza con un flujo sencillo de generación de texto.
  • Actualiza el punto de acceso, el cuerpo de la solicitud y el procesamiento de la salida.
  • Decide si el flujo usará previous_response_id, el reenvío manual de elementos o la API Conversations.
  • Si el flujo no mantiene estado o usa ZDR, agrega store: false e incluye elementos de razonamiento cifrados cuando sea necesario mantener el contexto de razonamiento entre turnos.
  • Migra las definiciones de funciones y verifica que los resultados de las llamadas a funciones incluyan el call_id correcto.
  • Traslada los esquemas de resultados estructurados de response_format a text.format.
  • Actualiza los consumidores de transmisión continua para procesar los eventos tipados de Responses.
  • Reemplaza la orquestación personalizada por herramientas alojadas por OpenAI cuando se ajusten al flujo de trabajo.
  • Compara el comportamiento, la latencia, el uso de tokens y los errores antes de dirigir más tráfico a Responses.

Recomendamos migrar gradualmente todos los flujos a la API Responses para aprovechar las funciones y mejoras más recientes de OpenAI.

API de asistentes

A partir de los comentarios de los desarrolladores sobre la versión beta de la API de asistentes, incorporamos mejoras clave en la API Responses para que sea más flexible, rápida y fácil de usar. La API Responses marca el rumbo futuro para crear agentes en OpenAI.

La API de asistentes se retiró oficialmente el 26 de agosto de 2026 y ya no está disponible. Sigue la guía de migración para actualizar tu integración a la API Responses.