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
Theme

Webhooks

Usa webhooks para recibir actualizaciones en tiempo real de la API de OpenAI.

Los webhooks de OpenAI te permiten recibir notificaciones en tiempo real sobre eventos de la API, por ejemplo, cuando se completa un lote, se genera una respuesta en segundo plano o finaliza un trabajo de ajuste fino. OpenAI envía los webhooks a un punto de acceso HTTP que tú controlas, de acuerdo con la especificación de Standard Webhooks. Puedes consultar la lista completa de eventos de webhook en la referencia de la API.

Para recibir notificaciones del monitoreo de desalineación de un proyecto de la API, consulta Recibir alertas de seguridad del proyecto.

Para recibir avisos de advertencia y desactivación relacionados con los identificadores de seguridad a nivel de la organización, consulta Notificaciones sobre la aplicación de medidas de seguridad.

Si usas sesiones de la API de agentes, consulta los eventos de sesión y los patrones de recuperación en Webhooks de sesión. Para implementar el receptor de webhooks, sigue las indicaciones de esta página sobre la configuración del punto de acceso, la verificación de firmas y la entrega de eventos.

Referencia de la API para eventos de webhook

Consulta la lista completa de eventos de webhook.

Los siguientes ejemplos muestran servidores que pueden recibir webhooks de OpenAI para el evento response.completed.

Para los ejemplos en Ruby, instala las dependencias necesarias con gem install openai webrick y luego configura OPENAI_API_KEY y OPENAI_WEBHOOK_SECRET.

Servidor de webhooks
import os
from openai import OpenAI, InvalidWebhookSignatureError
from flask import Flask, request, Response

app = Flask(__name__)
client = OpenAI(webhook_secret=os.environ["OPENAI_WEBHOOK_SECRET"])


@app.route("/webhook", methods=["POST"])
def webhook():
    try:
        # with webhook_secret set above, unwrap will raise an error if the signature is invalid
        event = client.webhooks.unwrap(request.data, request.headers)

        if event.type == "response.completed":
            response_id = event.data.id
            response = client.responses.retrieve(response_id)
            print("Response output:", response.output_text)

        return Response(status=200)
    except InvalidWebhookSignatureError as e:
        print("Invalid signature", e)
        return Response("Invalid signature", status=400)


if __name__ == "__main__":
    app.run(port=8000)

Para ver cómo funciona un webhook como este, configura un punto de acceso de webhook en el panel de OpenAI, suscríbelo al evento response.completed y luego envía una solicitud a la API para generar una respuesta en segundo plano.

También puedes activar eventos de prueba con datos de ejemplo desde la página de configuración de webhooks.

Generar una respuesta en segundo plano
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-6-astra",
    input="Write a very long novel about otters in space.",
    background=True,
)

print(resp.status)

En esta guía aprenderás a crear puntos de acceso de webhook en el panel, configurar el código del servidor para procesar las solicitudes y verificar que las solicitudes entrantes provengan de OpenAI.

Crear puntos de acceso de webhook

Para empezar a recibir solicitudes de webhook de tu proyecto en tu servidor, inicia sesión en el panel y abre la página de configuración de webhooks. La configuración de esta sección corresponde a los puntos de acceso del proyecto. Para los eventos de seguridad a nivel de la organización, consulta Notificaciones sobre la aplicación de medidas de seguridad.

Haz clic en el botón “Crear” para crear un punto de acceso de webhook. Configura estos tres elementos:

  • Un nombre para el punto de acceso (solo para que puedas identificarlo).
  • Una URL pública de un servidor que tú controlas.
  • Uno o más tipos de eventos a los que quieras suscribirte. Cada vez que ocurra uno de esos eventos, OpenAI enviará una solicitud HTTP POST a la URL que indicaste.
Cuadro de diálogo para editar un punto de acceso de webhook

Al crear un webhook, recibirás un secreto de firma que usarás en el servidor para verificar las solicitudes de webhook entrantes. Guarda este valor para usarlo más adelante, ya que no podrás volver a verlo.

Una vez creado el punto de acceso de webhook, configura un punto de acceso en tu servidor para procesar los datos de los eventos que reciba.

Procesar solicitudes de webhook en un servidor

Cuando ocurra un evento al que te hayas suscrito, la URL de tu webhook recibirá una solicitud HTTP POST como esta:

POST https://yourserver.com/webhook
user-agent: OpenAI/1.0 (+https://platform.openai.com/docs/webhooks)
content-type: application/json
webhook-id: wh_685342e6c53c8190a1be43f081506c52
webhook-timestamp: 1750287078
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=
{
  "object": "event",
  "id": "evt_685343a1381c819085d44c354e1b330e",
  "type": "response.completed",
  "created_at": 1750287018,
  "data": { "id": "resp_abc123" }
}

Tu punto de acceso debe responder rápidamente a estas solicitudes HTTP con un código de estado de éxito (2xx) para confirmar que las recibió. Para evitar que se agote el tiempo de espera, te recomendamos delegar las tareas de procesamiento más complejas a un proceso en segundo plano. Así, el punto de acceso podrá responder de inmediato. Si el punto de acceso no devuelve un código de estado de éxito (2xx) o no responde en unos segundos, OpenAI volverá a enviar la solicitud de webhook. OpenAI seguirá intentando entregarla durante un máximo de 72 horas, con intervalos de espera que aumentan de forma exponencial. OpenAI considera las redirecciones 3xx como fallos de entrega y no las sigue. Si tu punto de acceso devuelve una redirección, actualízalo para que use la URL de destino final.

En raras ocasiones, debido a problemas internos del sistema, OpenAI puede entregar el mismo evento de webhook más de una vez. Puedes usar el encabezado webhook-id como clave de idempotencia para descartar los duplicados.

Probar webhooks en un entorno local

Para probar webhooks, necesitas una URL pública accesible desde Internet. Esto puede dificultar el desarrollo, ya que probablemente tu entorno local no sea de acceso público. Estas opciones pueden ayudarte:

Verificar las firmas de los webhooks

Aunque puedes recibir eventos de webhook de OpenAI y procesar los resultados sin verificarlos, debes comprobar que las solicitudes entrantes provengan de OpenAI, especialmente si tu webhook va a realizar alguna acción en el backend. Los encabezados de las solicitudes de webhook contienen información que puedes usar junto con la clave secreta del webhook para verificar que OpenAI lo haya enviado.

Cuando crees un punto de acceso de webhook en el panel de OpenAI, recibirás un secreto de firma que debes configurar como variable de entorno en tu servidor:

export OPENAI_WEBHOOK_SECRET="<your secret here>"

La forma más sencilla de verificar las firmas de los webhooks es usar el método unwrap() de las utilidades del SDK oficial de OpenAI:

Verificación de firmas con el SDK de OpenAI
import os

from flask import request
from openai import OpenAI

client = OpenAI()
webhook_secret = os.environ["OPENAI_WEBHOOK_SECRET"]

# will raise if the signature is invalid
event = client.webhooks.unwrap(
    request.data,
    request.headers,
    secret=webhook_secret,
)

También puedes verificar las firmas con las bibliotecas de Standard Webhooks:

Verificación de firmas con las bibliotecas de Standard Webhooks
$webhook_secret = getenv("OPENAI_WEBHOOK_SECRET");
$wh = new \StandardWebhooks\Webhook($webhook_secret);
$wh->verify($webhook_payload, $webhook_headers);

Si lo necesitas, puedes implementar tu propio mecanismo de verificación de firmas como se describe en la especificación de Standard Webhooks.

Si pierdes tu secreto de firma o lo expones por accidente, puedes generar uno nuevo mediante la rotación del secreto de firma.