---
title: "workflow.run.succeeded event"
method: POST
path: "workflow.run.succeeded"
---

# workflow.run.succeeded event

`POST workflow.run.succeeded` (webhook)

Signed with `PDFBetter-Signature: t=<unix>,v1=<hex HMAC-SHA256(secret, `${t}.${body}`)>`. Respond with any 2xx within 10 seconds.

## Headers

- `PDFBetter-Signature` string, required

## Payload

- object
  - `id` string, required: evt_…; use it to de-duplicate
  - `type` 'workflow.run.succeeded', required
  - `created` integer, required: Unix seconds
  - `data` object, required
    - `run` object, required
      - `id` string, required
      - `workflowId` string, required
      - `documentId` string, nullable, required: null when the document was deleted
      - `status` 'awaiting_approval' | 'succeeded' | 'failed', required
      - `step` object, nullable, required: The step the run stopped at (the review step, the failing step, or the last step)
        - `index` integer, required: 1-based step position
        - `kind` 'ocr' | 'extract' | 'review' | 'export' | 'summarize' | 'redact_suggest' | 'webhook' | 'add_to_workspace', required
        - `label` string, required
      - `error` string, nullable, required: Why the run failed (`workflow.run.failed` only); null otherwise
      - `url` string, required: The run in the PDFBetter app

## Acknowledgement `2XX`

Acknowledged. Anything else (or no answer in 10 s) is retried.

---

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