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

# Check a fulfilment import

> Poll a fulfilment import for its status and counts.

<Note>
  **`GET`** `/v1/org/fulfilment/imports/{importId}`
</Note>

Reports where the import is and what it did.

<Info>
  Imports run on a queue, so a push typically finishes within a couple of minutes. Poll
  every 30 seconds or so — a tight loop only spends your rate limit.
</Info>

## Status values

| Status       | Meaning                                                                       |
| ------------ | ----------------------------------------------------------------------------- |
| `queued`     | Accepted, waiting to start                                                    |
| `processing` | Running                                                                       |
| `completed`  | Finished — **check the counts**, some activities may still have been rejected |
| `failed`     | The import itself could not run. `errorMessage` says why                      |
| `cancelled`  | Stopped from the Dyspach portal                                               |

## Counts

| Field              | Meaning                                                                                           |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| `counts.received`  | Rows read from your submission                                                                    |
| `counts.processed` | Activities written to the ledger                                                                  |
| `counts.failed`    | Rows rejected — list them with [the errors endpoint](/api-reference/get-fulfilment-import-errors) |

`completed` with failures is the normal case: valid activities are never held back
because others were wrong.

Counts settle when the import reaches `completed`, `failed` or `cancelled`. While it is
still `processing`, `failed` reads `0` and `processed` is the running total.

`errorReportUrl` is a signed link to the same rejections as a spreadsheet. It is `null`
until the import finishes and stays `null` when nothing was rejected.

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.dyspach.com/v1/org/fulfilment/imports/7c1e2f90-2b44-4f0e-9a11-6d1f0c22ab31 \
    -H "x-api-key: $DYSPACH_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "importId": "7c1e2f90-2b44-4f0e-9a11-6d1f0c22ab31",
    "source": "data",
    "status": "completed",
    "progress": 100,
    "counts": { "received": 5639, "processed": 5610, "failed": 29 },
    "sourceDetails": "org:Acme 3PL / nightly-2026-08-17",
    "submittedAt": "2026-08-17T01:00:00.000Z",
    "startedAt": "2026-08-17T01:00:05.000Z",
    "finishedAt": "2026-08-17T01:02:00.000Z",
    "errorMessage": null,
    "errorReportUrl": null
  }
  ```
</ResponseExample>
