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

# Get an export job

> Check an export job's progress and, once it is complete, its row count, file parts, checksums and download link.

`GET https://rankfield.dev/v1/jobs/{id}`

```bash cURL
curl 'https://rankfield.dev/v1/jobs/09aecabd-2230-4552-962a-c7a777724adb' \
  -H 'Authorization: Bearer YOUR_API_KEY'
```

```python Python
import requests

response = requests.get(
    "https://rankfield.dev/v1/jobs/09aecabd-2230-4552-962a-c7a777724adb",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
print(response.json())
```

```javascript JavaScript
const response = await fetch("https://rankfield.dev/v1/jobs/09aecabd-2230-4552-962a-c7a777724adb", {
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
  },
});
console.log(await response.json());
```

```json 200
{
  "id": "09aecabd-2230-4552-962a-c7a777724adb",
  "kind": "referrers-export",
  "status": "completed",
  "error": null,
  "domain": "cloro.dev",
  "crawlRelease": "2026-may-jun-jul",
  "buildId": "graph-2026mayjunjul-v3",
  "totalGraphRelationships": 68,
  "scannedRelationships": 68,
  "exportedRows": 68,
  "createdAt": "2026-10-25T14:33:49.828Z",
  "updatedAt": "2026-10-25T14:33:49.882Z",
  "expiresAt": "2026-11-01T14:33:49.878Z",
  "result": {
    "schemaVersion": 1,
    "id": "09aecabd-2230-4552-962a-c7a777724adb",
    "domain": "cloro.dev",
    "direction": "inbound",
    "format": "csv",
    "minSiteStrength": 0,
    "sort": "strength_desc",
    "crawlRelease": "2026-may-jun-jul",
    "buildId": "graph-2026mayjunjul-v3",
    "asOf": "2026-08-19T00:00:00Z",
    "evidenceCoverage": "domain-graph",
    "pageLevelEvidence": "unavailable",
    "totalGraphRelationships": 68,
    "rowCount": 68,
    "byteCount": 5266,
    "partsDigestSha256": "9f373791615a5f16da748734084934d74808ab4a72fa00a874fe1a885491a147",
    "parts": [
      {
        "index": 0,
        "key": "public-exports/09aecabd-2230-4552-962a-c7a777724adb/parts/00000.csv",
        "rows": 68,
        "bytes": 5266,
        "sha256": "88a2e7713dc632a3d69211919e444b2cfc49ee0e8fa74233b1786a1176edfdf2"
      }
    ],
    "completedAt": "2026-10-25T14:33:49.878Z",
    "expiresAt": "2026-11-01T14:33:49.878Z"
  },
  "downloadUrl": "/v1/jobs/09aecabd-2230-4552-962a-c7a777724adb/download",
  "partUrlTemplate": "/v1/jobs/09aecabd-2230-4552-962a-c7a777724adb/parts/{index}"
}
```

## Parameters

### Headers

| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| `Authorization` | string | Yes | – | `Bearer` followed by your API key. See [Authentication](/docs/get-started/authentication). |

### Path parameters

| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| `id` | string | Yes | – | The job id from [Start an export job](/docs/referring-domains/start-an-export-job). |

## Response

| Field | Type | Description |
|---|---|---|
| `status` | string | `queued`, `running`, `completed`, `failed` or `cancelled`. |
| `inGraph` | boolean | Only when the domain isn't in our link graph yet: `false`, and the export has no rows. Absent otherwise. |
| `scannedRelationships` | integer | How much of the list has been read so far, out of `totalGraphRelationships`. |
| `exportedRows` | integer | Rows written so far (after `minSiteStrength`). |
| `error` | string \| null | Why the job failed. |
| `result` | object \| null | Once completed: the file's `rowCount`, `byteCount`, `parts` (each with `rows`, `bytes` and `sha256`) and `partsDigestSha256`. |
| `downloadUrl` | string | Once completed: the whole file in one download. |
| `partUrlTemplate` | string | Once completed: one part at a time; replace `{index}`. |

## Download the file

`GET /v1/jobs/{id}/download` streams every part as one file. For very large exports, download `/v1/jobs/{id}/parts/{index}` one by one and check each part's `sha256`, so a broken connection only costs one part.

Both answer `409` until the job is `completed`.

## Cancel or resume

- `DELETE /v1/jobs/{id}` cancels a queued or running job (`409` once it has finished).
- `POST /v1/jobs/{id}/resume` restarts a `failed` job from where it stopped.

## Errors

| Status | When |
|---|---|
| 401 | No valid API key. |
| 404 | No job with this id for this key, or it has expired. |
| 409 | Download or cancel of a job in the wrong state. |

## MCP

On the [MCP server](/docs/agents/mcp-server), the tool for this is `get_export_job`.
