> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getomni.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# spread.completed

Triggered when a financial spreading run completes.

## Event Type

`spread.completed`

## Description

This event fires when a spreading run finishes and its report and spreadsheet artifacts are ready; `data.artifacts` is always populated. Download each with the [artifact endpoints](/api-reference/artifacts/download-artifact). A regenerated run re-emits this event with new artifact ids for the same `spreadId`. Spreads not tied to a lead and spreads on a test lead do not emit webhooks.

## Payload Structure

<ResponseField name="event" type="string" required>
  The event type: `spread.completed`
</ResponseField>

<ResponseField name="actor" type="null">
  Always `null` for spread events.
</ResponseField>

<ResponseField name="occurredAt" type="string" required>
  ISO 8601 timestamp of when the event was emitted.
</ResponseField>

<ResponseField name="data" type="object" required>
  The run data.

  <Expandable title="data">
    <ResponseField name="spreadId" type="string" required>
      The spreading run id.
    </ResponseField>

    <ResponseField name="leadId" type="string" required>
      The lead the run belongs to.
    </ResponseField>

    <ResponseField name="externalLeadId" type="string | null">
      The lead's external identifier, if set.
    </ResponseField>

    <ResponseField name="workspaceId" type="string" required>
      The workspace the run belongs to.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      Always `COMPLETE` for this event.
    </ResponseField>

    <ResponseField name="documents" type="array" required>
      The input documents, each with `id`, `filename`, and `status`. `id` is
      the document's id in your workspace, or `null` if the document has since
      been deleted.
    </ResponseField>

    <ResponseField name="artifacts" type="array" required>
      The outputs, each with `id`, `type` (`REPORT` or `SPREADSHEET`), and
      `title`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "event": "spread.completed",
    "actor": null,
    "occurredAt": "2026-07-23T18:08:40.000Z",
    "data": {
      "spreadId": "9f1e2d3c-4b5a-6789-0abc-def012345678",
      "leadId": "b1f0a790-201b-47e9-84ed-cc7eed1270c5",
      "externalLeadId": "crm-4471",
      "workspaceId": "ws-1",
      "status": "COMPLETE",
      "documents": [
        { "id": "doc-a", "filename": "2023-tax-return.pdf", "status": "EXTRACTED" },
        { "id": "doc-b", "filename": "2023-financials.pdf", "status": "EXTRACTED" }
      ],
      "artifacts": [
        { "id": "art-report", "type": "REPORT", "title": "Financial Spread - Pacific Coast Container Haulers" },
        { "id": "art-sheet", "type": "SPREADSHEET", "title": "Financial Spread - Pacific Coast Container Haulers (Excel)" }
      ]
    }
  }
  ```
</ResponseExample>
