---
title: "Receive an actions.workflow_job event"
method: POST
path: "actions.workflow_job"
tags: ["Webhooks"]
---

# Receive an actions.workflow_job event

`POST actions.workflow_job` (webhook)

Beta: webhook event coverage and payload schemas may evolve. See /docs/integrations/webhooks for supported events and delivery limits. A job is queued that a runner group of the repository's organization serves (no pool yet; `runnerGroupId` names the group when only one serves it), is acquired by a runner of one of the organization's pools (in_progress), or completes (without a pool or runner when it never ran or GitCafe's hosted fleet ran it after it was announced queued), in the transaction of that transition; each is captured once per job, in that order: a job an organization runner takes without having been announced (the hosted pool also served it, or a group was bound since) is announced queued first, in the same transaction. Delivery may be out of order on retries (a retried queued can arrive after in_progress): order a job's events by `status` and its queuedAt, startedAt and completedAt, as on GitHub. A job whose repository is transferred while it runs sends no completed to the old organization; reconcile with the provider demand read. Jobs no organization group serves, and jobs on or served by instance pools, emit nothing. App installations of the organization receive it with the `org:runners` permission. The body holds exact job, run, pool and runner identities only: never scripts, environment, secrets, tokens, clone URLs or logs. GitHub-shaped, not GitHub-compatible; reconcile with the provider demand read. 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` 'actions.workflow_job', required
- `X-GitCafe-Delivery` string, required
- `X-GitCafe-Timestamp` string, required
- `X-GitCafe-Key-Version` string, required
- `X-GitCafe-Signature` string, required

## Payload

- object: Beta: webhook event coverage and payload schemas may evolve. See /docs/integrations/webhooks for supported events and delivery limits.
  - `id` string, required
  - `version` '1', required
  - `createdAt` string, date-time, required
  - `repository` object, required
    - `id` string, required
    - `orgId` string, required
    - `owner` string
    - `name` string
  - `type` 'actions.workflow_job', required
  - `action` 'queued' | 'in_progress' | 'completed', required
  - `workflowJob` object, required
    - `id` string, required
    - `runId` string, required
    - `runAttempt` integer, required
    - `name` string, required
    - `labels` string[], required
    - `status` 'queued' | 'in_progress' | 'completed', required
    - `conclusion` 'success' | 'failure' | 'cancelled' | 'skipped' | 'timed_out' | 'startup_failure' | 'null', nullable, required
    - `poolId` string, nullable, required
    - `runnerGroupId` integer, nullable
    - `runnerId` string, nullable, required
    - `runnerName` string, nullable, required
    - `queuedAt` string, date-time, required
    - `startedAt` string, date-time, nullable, required
    - `completedAt` string, date-time, nullable, 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)
