Buildkite · event: build.finished ·
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 Buildkite's webhook settings to capture a real delivery. No signup.
content-type: application/json x-buildkite-event: build.finished x-buildkite-signature: timestamp=1788088800,signature=e257ab669c327451d439f92b2f27baec0327586c8a4b01a61b6ea5aa5544e165
{
"event": "build.finished",
"build": {
"id": "9e7a2c66-3f19-4a1d-8b52-c0de4f6a91b3",
"graphql_id": "QnVpbGQtLS05ZTdhMmM2Ni0zZjE5LTRhMWQtOGI1Mi1jMGRlNGY2YTkxYjM=",
"url": "https://api.buildkite.com/v2/organizations/acme/pipelines/deploy-service/builds/482",
"web_url": "https://buildkite.com/acme/deploy-service/builds/482",
"number": 482,
"state": "passed",
"blocked": false,
"message": "fix: retry webhook deliveries on 5xx",
"commit": "59b20b8d5c6ff8d09518454d4dd8b7b30f095ab5",
"branch": "main",
"source": "webhook",
"created_at": "2026-08-30 06:40:11 UTC",
"scheduled_at": "2026-08-30 06:40:11 UTC",
"started_at": "2026-08-30 06:40:19 UTC",
"finished_at": "2026-08-30 06:44:02 UTC",
"meta_data": {},
"pull_request": null,
"creator": {
"id": "2c3f0a1b-4d5e-46f7-a8b9-c0d1e2f3a4b5",
"name": "Ada Deveraux",
"email": "ada@acme.dev"
}
},
"pipeline": {
"id": "7f3b9d21-5a64-4c08-9e17-b2a8d0c4e6f5",
"graphql_id": "UGlwZWxpbmUtLS03ZjNiOWQyMS01YTY0LTRjMDgtOWUxNy1iMmE4ZDBjNGU2ZjU=",
"url": "https://api.buildkite.com/v2/organizations/acme/pipelines/deploy-service",
"web_url": "https://buildkite.com/acme/deploy-service",
"name": "Deploy Service",
"slug": "deploy-service",
"repository": "git@github.com:acme/deploy-service.git",
"default_branch": "main"
},
"sender": {
"id": "8a7693f8-dbae-4783-9137-84090fce9045",
"name": "Ada Deveraux"
}
}
"timestamp.rawBody" (dot-joined), keyed with the webhook's
Token value — here bk_wh_sample_token_Vq2mXr8Lp4Tz. Try it
in the signature debugger (Buildkite scheme), or
pick the Buildkite scheme on a capture bin for live ✓/✗ badges.X-Buildkite-Token)
or as this HMAC (X-Buildkite-Signature: timestamp=<unix>,signature=<hex>).
Clear-text token is the default; the signature mode is the one worth verifying.timestamp= is dispatch time (replay-attack defense — it's
inside the HMAC so it can't be forged), not event time. For real timing
use the payload's build.created_at / started_at /
finished_at fields — Buildkite's docs call this out explicitly.build object here
deliberately lacks the jobs array the REST API returns — subscribe to job
events or call the Builds API if you need per-job results. And if a build transitions
fast (blocked → unblocked), the webhook body can describe a later state than
the event that triggered it.build.finished — check
build.blocked: true to tell "waiting on a human" apart from "done".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 'x-buildkite-event: build.finished' \
-H 'x-buildkite-signature: timestamp=1788088800,signature=e257ab669c327451d439f92b2f27baec0327586c8a4b01a61b6ea5aa5544e165' \
-d '{
"event": "build.finished",
"build": {
"id": "9e7a2c66-3f19-4a1d-8b52-c0de4f6a91b3",
"graphql_id": "QnVpbGQtLS05ZTdhMmM2Ni0zZjE5LTRhMWQtOGI1Mi1jMGRlNGY2YTkxYjM=",
"url": "https://api.buildkite.com/v2/organizations/acme/pipelines/deploy-service/builds/482",
"web_url": "https://buildkite.com/acme/deploy-service/builds/482",
"number": 482,
"state": "passed",
"blocked": false,
"message": "fix: retry webhook deliveries on 5xx",
"commit": "59b20b8d5c6ff8d09518454d4dd8b7b30f095ab5",
"branch": "main",
"source": "webhook",
"created_at": "2026-08-30 06:40:11 UTC",
"scheduled_at": "2026-08-30 06:40:11 UTC",
"started_at": "2026-08-30 06:40:19 UTC",
"finished_at": "2026-08-30 06:44:02 UTC",
"meta_data": {},
"pull_request": null,
"creator": {
"id": "2c3f0a1b-4d5e-46f7-a8b9-c0d1e2f3a4b5",
"name": "Ada Deveraux",
"email": "ada@acme.dev"
}
},
"pipeline": {
"id": "7f3b9d21-5a64-4c08-9e17-b2a8d0c4e6f5",
"graphql_id": "UGlwZWxpbmUtLS03ZjNiOWQyMS01YTY0LTRjMDgtOWUxNy1iMmE4ZDBjNGU2ZjU=",
"url": "https://api.buildkite.com/v2/organizations/acme/pipelines/deploy-service",
"web_url": "https://buildkite.com/acme/deploy-service",
"name": "Deploy Service",
"slug": "deploy-service",
"repository": "git@github.com:acme/deploy-service.git",
"default_branch": "main"
},
"sender": {
"id": "8a7693f8-dbae-4783-9137-84090fce9045",
"name": "Ada Deveraux"
}
}'