For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme

Webhooks

Utilisez les webhooks pour recevoir des notifications en temps réel de l’API OpenAI.

Les webhooks d’OpenAI vous informent en temps réel des événements de l’API, par exemple lorsqu’un traitement par lots se termine, qu’une réponse est générée en arrière-plan ou qu’une tâche de fine-tuning s’achève. OpenAI envoie les webhooks à un point de terminaison HTTP que vous contrôlez, conformément à la spécification Standard Webhooks. Vous trouverez la liste complète des événements de webhook dans la référence de l’API.

Pour recevoir les notifications liées à la surveillance des défauts d’alignement pour un projet API, consultez la section Recevoir les alertes de sécurité d’un projet.

Pour recevoir, à l’échelle de votre organisation, les avertissements et les avis de désactivation concernant les identifiants de sécurité, consultez le guide Notifications relatives à l’application des règles de sécurité.

Pour les sessions de l’API Agents, consultez le guide Webhooks de session, qui décrit les événements de session et les stratégies de reprise. Pour configurer le serveur qui reçoit les webhooks, suivez les instructions de cette page sur la configuration du point de terminaison, la vérification des signatures et la livraison des événements.

Référence de l’API pour les événements de webhook

Consultez la liste complète des événements de webhook.

Les exemples suivants montrent comment un serveur peut recevoir les webhooks d’OpenAI pour l’événement response.completed.

Pour exécuter les exemples Ruby, installez les dépendances requises avec gem install openai webrick, puis définissez les variables OPENAI_API_KEY et OPENAI_WEBHOOK_SECRET.

Serveur 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)

Pour voir ce webhook en action, configurez un point de terminaison de webhook dans le tableau de bord OpenAI et abonnez-le à response.completed. Envoyez ensuite une requête à l’API pour générer une réponse en arrière-plan.

Vous pouvez aussi déclencher des événements de test avec des données d’exemple depuis la page des paramètres des webhooks.

Génération d’une réponse en arrière-plan
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)

Ce guide explique comment créer des points de terminaison de webhook dans le tableau de bord, mettre en place le code qui traite les requêtes côté serveur et vérifier que les requêtes entrantes proviennent bien d’OpenAI.

Création de points de terminaison de webhook

Pour recevoir les requêtes de webhook d’un projet sur votre serveur, connectez-vous au tableau de bord et ouvrez la page des paramètres des webhooks. La configuration décrite ici concerne les points de terminaison d’un projet. Pour les événements de sécurité à l’échelle de l’organisation, consultez le guide Notifications relatives à l’application des règles de sécurité.

Cliquez sur le bouton « Créer » pour créer un point de terminaison de webhook. Renseignez les trois éléments suivants :

  • Un nom qui vous permettra de reconnaître le point de terminaison.
  • L’URL publique d’un serveur que vous contrôlez.
  • Un ou plusieurs types d’événements auxquels vous souhaitez vous abonner. Chaque fois qu’un de ces événements se produit, OpenAI envoie une requête HTTP POST à l’URL indiquée.
Boîte de dialogue de modification d’un point de terminaison de webhook

Après avoir créé un webhook, vous recevrez un secret de signature qui vous permettra de vérifier les requêtes de webhook entrantes côté serveur. Enregistrez ce secret pour pouvoir l’utiliser ultérieurement, car vous ne pourrez plus l’afficher.

Une fois le point de terminaison de webhook créé dans le tableau de bord, configurez le point de terminaison côté serveur qui traitera les données des événements reçus.

Traitement des requêtes de webhook sur un serveur

Lorsqu’un événement auquel vous avez souscrit se produit, OpenAI envoie à l’URL de votre webhook une requête HTTP POST comme celle-ci :

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

Votre point de terminaison doit répondre rapidement à ces requêtes HTTP en renvoyant un code de succès (2xx) pour en confirmer la réception. Pour éviter les dépassements de délai, nous vous recommandons de confier tout traitement conséquent à un processus en arrière-plan afin que le point de terminaison puisse répondre immédiatement. Si le point de terminaison ne renvoie pas de code de succès (2xx) ou ne répond pas en quelques secondes, OpenAI renvoie la requête de webhook. OpenAI réessaie pendant 72 heures au maximum, en augmentant de façon exponentielle le délai entre les tentatives. OpenAI considère les redirections 3xx comme des échecs et ne les suit pas. En cas de redirection, mettez à jour votre point de terminaison pour utiliser l’URL de destination finale.

Dans de rares cas, un problème interne peut amener OpenAI à envoyer plusieurs fois le même événement de webhook. Utilisez l’en-tête webhook-id comme clé d’idempotence pour éliminer les doublons.

Test des webhooks en local

Pour tester les webhooks, vous avez besoin d’une URL accessible publiquement sur Internet. Cela peut compliquer le développement, car votre environnement local n’est probablement pas accessible depuis Internet. Voici quelques solutions :

Vérification des signatures de webhook

Vous pouvez recevoir les événements de webhook d’OpenAI et en traiter les résultats sans vérifier leur origine. Il est toutefois recommandé de vérifier que les requêtes entrantes proviennent bien d’OpenAI, en particulier si votre webhook déclenche une action côté serveur. Les en-têtes des requêtes de webhook contiennent des informations qui, associées à la clé secrète du webhook, permettent d’en vérifier l’origine.

Lorsque vous créez un point de terminaison de webhook dans le tableau de bord OpenAI, vous recevez un secret de signature. Rendez-le accessible sur votre serveur via une variable d’environnement :

export OPENAI_WEBHOOK_SECRET="<your secret here>"

La façon la plus simple de vérifier les signatures de webhook consiste à utiliser la méthode unwrap() fournie par les utilitaires des SDK officiels d’OpenAI :

Vérification des signatures avec le SDK 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,
)

Vous pouvez aussi vérifier les signatures avec les bibliothèques Standard Webhooks :

Vérification des signatures avec les bibliothèques Standard Webhooks
$webhook_secret = getenv("OPENAI_WEBHOOK_SECRET");
$wh = new \StandardWebhooks\Webhook($webhook_secret);
$wh->verify($webhook_payload, $webhook_headers);

Si nécessaire, vous pouvez implémenter votre propre mécanisme de vérification des signatures en suivant la procédure décrite dans la spécification Standard Webhooks.

Si vous perdez votre secret de signature ou le divulguez par inadvertance, vous pouvez en générer un nouveau en renouvelant le secret de signature.