For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegação principal
Theme

Webhooks

Use webhooks para receber atualizações em tempo real da API da OpenAI.

Com os webhooks da OpenAI, você recebe notificações em tempo real sobre eventos da API, como a conclusão de um lote, a geração de uma resposta em segundo plano ou o término de uma tarefa de ajuste fino. A OpenAI envia os webhooks para um endpoint HTTP que você controla, seguindo a especificação Standard Webhooks. Consulte a lista completa de eventos de webhook na referência da API.

Para receber notificações de monitoramento de desalinhamento em um projeto da API, consulte Como receber alertas de segurança do projeto.

Para receber advertências e avisos de desativação referentes a identificadores de segurança no âmbito da organização, consulte Notificações sobre a aplicação de políticas de segurança.

Para saber quais eventos ocorrem nas sessões da API de Agentes e como recuperar essas sessões, consulte Webhooks de sessão. Ao implementar o receptor de webhooks, siga as orientações desta página sobre configuração do endpoint, verificação de assinaturas e entrega de eventos.

Referência da API para eventos de webhook

Veja a lista completa de eventos de webhook.

Os exemplos a seguir mostram servidores que recebem webhooks da OpenAI para o evento response.completed.

Para usar os exemplos em Ruby, instale as dependências necessárias com gem install openai webrick e, em seguida, defina as variáveis OPENAI_API_KEY e 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 esse webhook em ação, configure um endpoint de webhook no painel da OpenAI para receber o evento response.completed e faça uma requisição à API para gerar uma resposta em segundo plano.

Você também pode disparar eventos de teste com dados de exemplo na página de configurações de webhooks.

Gerar uma resposta em 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)

Neste guia, você aprenderá a criar endpoints de webhook no painel, configurar o código no servidor para processar as requisições e verificar se elas vieram da OpenAI.

Como criar endpoints de webhook

Para começar a receber requisições de webhook do projeto no seu servidor, entre no painel e abra a página de configurações de webhooks. As instruções desta seção se aplicam aos endpoints de projeto. Para eventos de segurança no âmbito da organização, consulte Notificações sobre a aplicação de políticas de segurança.

Clique no botão “Criar” para criar um endpoint de webhook. Configure os três itens a seguir.

  • Um nome para você identificar o endpoint.
  • Uma URL pública de um servidor que você controla.
  • Um ou mais tipos de evento que deseja receber. Quando um desses eventos ocorrer, a OpenAI enviará uma requisição HTTP POST para a URL especificada.
Caixa de diálogo para editar um endpoint de webhook

Depois de criar um webhook, você receberá uma chave secreta de assinatura para verificar no servidor as requisições de webhook recebidas. Guarde esse valor para usar mais tarde, pois você não poderá visualizá-lo novamente.

Com o endpoint de webhook criado, o próximo passo é configurar um endpoint no servidor para processar os dados dos eventos recebidos.

Como processar requisições de webhook no servidor

Quando ocorrer um evento de um dos tipos que você selecionou, a URL do webhook receberá uma requisição HTTP POST como a do exemplo a seguir.

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" }
}

O endpoint deve responder rapidamente a essas requisições HTTP com um código de status de sucesso (2xx) para confirmar o recebimento. Para evitar que o tempo de espera se esgote, recomendamos delegar qualquer processamento mais complexo a um processo em segundo plano. Assim, o endpoint pode responder imediatamente. Se o endpoint não retornar um código de status de sucesso (2xx) ou não responder em poucos segundos, a OpenAI reenviará a requisição de webhook. A OpenAI continuará tentando entregar o evento por até 72 horas, com intervalos que aumentam exponencialmente entre as tentativas. A OpenAI trata redirecionamentos 3xx como falhas e não os segue. Nesse caso, atualize o endpoint para usar a URL de destino final.

Em casos raros, problemas internos podem fazer com que a OpenAI envie o mesmo evento de webhook mais de uma vez. Você pode usar o cabeçalho webhook-id como chave de idempotência para eliminar duplicatas.

Como testar webhooks localmente

Para testar webhooks, você precisa de uma URL acessível pela internet. Isso pode dificultar o desenvolvimento, já que seu ambiente de desenvolvimento local provavelmente não está acessível ao público. Algumas opções podem ajudar.

Como verificar assinaturas de webhook

Embora seja possível receber eventos de webhook da OpenAI e processar os resultados sem nenhuma verificação, você deve verificar se as requisições recebidas vieram da OpenAI, principalmente se o webhook executar alguma ação no backend. Use as informações dos cabeçalhos das requisições de webhook em conjunto com a chave secreta do webhook para verificar se a OpenAI enviou a requisição.

Ao criar um endpoint de webhook no painel da OpenAI, você receberá uma chave secreta de assinatura. Disponibilize essa chave no servidor como variável de ambiente.

export OPENAI_WEBHOOK_SECRET="<your secret here>"

A maneira mais simples de verificar assinaturas de webhook é usar o método unwrap() dos utilitários do SDK oficial da OpenAI.

Verificação de assinaturas com o SDK da 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,
)

Você também pode verificar as assinaturas com as bibliotecas Standard Webhooks.

Verificação de assinaturas com as bibliotecas Standard Webhooks
$webhook_secret = getenv("OPENAI_WEBHOOK_SECRET");
$wh = new \StandardWebhooks\Webhook($webhook_secret);
$wh->verify($webhook_payload, $webhook_headers);

Se necessário, você pode implementar sua própria verificação de assinaturas conforme descrito na especificação Standard Webhooks.

Se você perder ou expuser acidentalmente a chave secreta de assinatura, poderá gerar uma nova ao fazer a rotação da chave secreta de assinatura.