---
title: "job.completed"
method: POST
path: "job.completed"
---

# job.completed

`POST job.completed` (webhook)

Signed with the endpoint's secret in `ImageStep-Signature`; the same event id on every retry. Answer any 2xx to acknowledge it.

## Payload

- JobEvent: A job settled: `job.completed` when no item failed, `job.failed` otherwise (a cancel included)
  - `id` string, required: The event's id, `evt_…` — the same on every retry of it, so a receiver can drop a repeat
  - `type` 'job.completed' | 'job.failed', required: What happened; it decides the shape of `data`
  - `apiVersion` 'v1', required: The version of this body's shape — the `v1` of the `/api/v1` paths. Inside it fields are only added (https://imagestep.dev/docs/changelog)
  - `createdAt` string, date-time, required: When the event was queued — not when this attempt was sent
  - `data` JobEventData, required: `job.completed` / `job.failed`: the settled job's numbers
    - `id` string, required: The job, `job_…` — `id` on `GET /jobs/{id}`
    - `jobId` string, required: Deprecated: `id`, until 2027-01-12. https://imagestep.dev/docs/changelog#2026-10-14-webhook-names
    - `type` 'ai-generate' | 'ai-edit' | 'parse' | 'process' | 'render' | 'chain', required: The job's type
    - `op` string: The op it was submitted as, when it was submitted as one
    - `status` 'COMPLETED' | 'FAILED' | 'CANCELLED', required: The terminal status it settled at; `job.failed` carries `FAILED` or `CANCELLED`
    - `totalItems` integer, required: Items in the job
    - `completedItems` integer, required: Items that completed
    - `failedItems` integer, required: Items that failed
    - `cancelledItems` integer, required: Items a cancel stopped before they ran
    - `actualCredits` integer, required: What the job cost, in credits
    - `creditsCharged` integer, required: Deprecated: `actualCredits`, until 2027-01-12. https://imagestep.dev/docs/changelog#2026-10-14-webhook-names
    - `errorCode` string: The job's verdict on its failed items, from the closed set of error codes (§11); absent when no item failed
    - `retryable` boolean: Whether a resume could help; absent when no item failed

## Acknowledgement `2XX`

Received. Anything else, or no answer, is retried

---

[API](https://skmtc.dev/imagestep/apis/imagestep-api.md) · [All operations](https://skmtc.dev/imagestep/apis/imagestep-api/llms.txt) · [OpenAPI document](https://skmtc.dev/imagestep/apis/imagestep-api/revisions/5e8e922a3085?raw)
