OpenAI · event: response.completed ·
content type: application/json
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into OpenAI's webhook settings to capture a real delivery. No signup.
content-type: application/json user-agent: OpenAI/1.0 (+https://platform.openai.com/docs/webhooks) webhook-id: wh_68b2a91c52b081909a4df1b6c2e8d3f7 webhook-timestamp: 1788500001 webhook-signature: v1,hUVJ8dIAT9HxSecDBlAOrPa2hGe0R3MqGSagFVYgYsI=
{
"object": "event",
"id": "evt_68b2a91c4f0e8190a3d5c7b9e1f2a4d6",
"type": "response.completed",
"created_at": 1788500000,
"data": {
"id": "resp_68b2a8f7d2c48190b1e6a9c3f5d7e9b2"
}
}
webhook-* header values, and the secret
whsec_SG9va2Rlbk9wZW5BSVNhbXBsZUtleSE= into the
signature debugger (Svix / Standard Webhooks
scheme). OpenAI uses the Standard
Webhooks spec — the exact crypto Svix uses (base64 HMAC-SHA256 over
id.timestamp.rawBody, key = the base64-decoded part after
whsec_) but under webhook-* header names instead of
svix-*. A capture bin verifies these live: pick the Svix scheme — it
accepts both header sets.data
contains only the response ID — you must call
GET /v1/responses/{id} (with your API key) to fetch the actual output.
Webhooks pair with background
mode: kick off the long job, get pinged when it's done.webhook-id header, not the body's
id.eval.run.canceled (one l) but batch.cancelled and
fine_tuning.job.cancelled (two l's) — an exact-match router that
assumes one spelling silently drops the other family.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json' \
-H 'user-agent: OpenAI/1.0 (+https://platform.openai.com/docs/webhooks)' \
-H 'webhook-id: wh_68b2a91c52b081909a4df1b6c2e8d3f7' \
-H 'webhook-timestamp: 1788500001' \
-H 'webhook-signature: v1,hUVJ8dIAT9HxSecDBlAOrPa2hGe0R3MqGSagFVYgYsI=' \
-d '{
"object": "event",
"id": "evt_68b2a91c4f0e8190a3d5c7b9e1f2a4d6",
"type": "response.completed",
"created_at": 1788500000,
"data": {
"id": "resp_68b2a8f7d2c48190b1e6a9c3f5d7e9b2"
}
}'
← All payload examples · Related guide · Signature debugger · Docs