---
title: "Receive an ci.run_updated event"
method: POST
path: "ci.run_updated"
tags: ["Webhooks"]
---

# Receive an ci.run_updated event

`POST ci.run_updated` (webhook)

Beta: webhook event coverage and payload schemas may evolve. See /docs/integrations/webhooks for supported events and delivery limits. An authenticated Buildkite observation commits a new CI run version. Duplicate and stale observations emit nothing; the external observer does not invent a human actor. GitCafe POSTs an immutable version 1 snapshot to an eligible active endpoint. Verify the timestamp and HMAC-SHA256 over timestamp + '.' + the unchanged UTF-8 request body using the indicated current signing-key generation. The signature value is sha256=<lowercase hex>. Retries reuse body and delivery identity but refresh timestamp and signing key. Delivery attempts are at least once; deduplicate by the signed body event id within each receiver subscription. The delivery header is an inspection identifier and is not covered by the signature. No ordering is promised. A 2xx response acknowledges acceptance. Network failures, 408, 425, 429 and 5xx retry within eight attempts or 24 hours; redirects and other statuses terminate. Retry-After is capped at one hour. See /docs/integrations/webhooks for configuration and failure recovery. This contract does not prove deployed transport qualification.

## Headers

- `X-GitCafe-Event` 'ci.run_updated', required
- `X-GitCafe-Delivery` string, required
- `X-GitCafe-Timestamp` string, required
- `X-GitCafe-Key-Version` string, required
- `X-GitCafe-Signature` string, required

## Payload

- object
  - `type` 'ci.run_updated', required
  - `run` object, required
    - `id` string, required
    - `checkRunId` string, required
    - `provider` 'buildkite', required
    - `context` string, required
    - `commitOid` string, required
    - `ref` string, required
    - `state` 'queued' | 'running' | 'blocked' | 'passed' | 'failed' | 'canceled' | 'errored', required
    - `version` integer, required
    - `externalUrl` string, uri, required
    - `startedAt` string, date-time, nullable, required
    - `finishedAt` string, date-time, nullable, required
  - `id` string, required
  - `version` '1', required
  - `createdAt` string, date-time, required
  - `actor` object
    - `id` string, required
  - `repository` object, required
    - `id` string, required
    - `orgId` string, required
    - `owner` string
    - `name` string
  - `installation` object
    - `id` string, required

## Acknowledgement `200`

The receiver accepted the event. Any 2xx status has this meaning.

## Other responses

- `429`: Retry within the delivery budget; Retry-After is capped at one hour.
- `503`: Temporary receiver failure; retry within the delivery budget.
- `default`: 408, 425 and other 5xx are retryable. Redirects and all other non-2xx statuses terminate this delivery.

---

[API](https://skmtc.dev/gitcafe/apis/git-cafe-api.md) - [All operations](https://skmtc.dev/gitcafe/apis/git-cafe-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gitcafe/apis/git-cafe-api/revisions/9fa233d2986d?raw)
