# Get bulk import job

Poll async bulk email subscriber import status and results.

Source: https://statusdashboard.com/docs/api/subscriptions/email/subscribers/bulk-get

`GET /app/subscribers/email/subscribers/bulk/{jobId}`

Returns the current status and aggregated results for a [bulk import](/docs/api/subscriptions/email/subscribers/bulk-create) job. Poll until `status` is `completed` or `failed`.

***

## Path parameters
| Parameter | Type | Required | Description                                                       |
| --------- | ---- | -------- | ----------------------------------------------------------------- |
| `jobId`   | uuid | Yes      | Job ID returned by `POST /app/subscribers/email/subscribers/bulk` |

***

## Request
See [API Basics](/docs/api) for required headers.

***

## Sample request
```bash
curl https://api.statusdashboard.com/app/subscribers/email/subscribers/bulk/f47ac10b-58cc-4372-a567-0e02b2c3d479 \
  -H "Authorization: Bearer bcf847abf5c6:def456"
```

## Sample response — processing
**Status: `200 OK`**

```json
{
  "jobId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "status": "processing",
  "uploadedRows": 1200,
  "totalRows": 1200,
  "processedRows": 450,
  "uploadComplete": true,
  "createdCount": 400,
  "skippedCount": 30,
  "errorCount": 15,
  "quotaExceededCount": 5,
  "totalBatches": 24,
  "completedBatches": 9,
  "failedBatches": 0,
  "startedAt": "2026-06-24T10:00:00.000Z",
  "updatedAt": "2026-06-24T10:01:30.000Z",
  "completedAt": null,
  "failureReason": null,
  "created": [
    { "email": "alice@acme.com", "dashboardId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }
  ],
  "skipped": [
    { "email": "bob@acme.com", "reason": "Already subscribed on this dashboard." }
  ],
  "errors": [
    { "email": "bad@acme.com", "reason": "Dashboard not found." }
  ],
  "quotaExceeded": [
    { "email": "over@acme.com" }
  ]
}
```

## Sample response — completed
When `status` is `completed`, the org import lock is released. Use `createdCount`, `skippedCount`, `errorCount`, and `quotaExceededCount` for totals; sample arrays may be truncated at 100 entries.

***

## Response fields
| Field                | Type           | Description                                                                         |
| -------------------- | -------------- | ----------------------------------------------------------------------------------- |
| `jobId`              | string         | Job UUID from [bulk create](/docs/api/subscriptions/email/subscribers/bulk-create). |
| `status`             | string         | Job lifecycle state. See [job status values](#job-status-values).                   |
| `uploadedRows`       | number         | Rows received from upload chunks so far.                                            |
| `totalRows`          | number         | Expected total rows once upload completes.                                          |
| `processedRows`      | number         | Rows processed by the background worker.                                            |
| `uploadComplete`     | boolean        | `true` when all upload chunks have been received.                                   |
| `createdCount`       | number         | Subscribers successfully created.                                                   |
| `skippedCount`       | number         | Rows skipped (e.g. already subscribed).                                             |
| `errorCount`         | number         | Rows that failed validation or creation.                                            |
| `quotaExceededCount` | number         | Rows rejected because a dashboard subscriber quota was reached.                     |
| `totalBatches`       | number         | Background processing batches planned.                                              |
| `completedBatches`   | number         | Batches finished successfully.                                                      |
| `failedBatches`      | number         | Batches that failed and may be retried.                                             |
| `startedAt`          | string         | ISO 8601 timestamp when the job started.                                            |
| `updatedAt`          | string         | ISO 8601 timestamp of the last progress update.                                     |
| `completedAt`        | string \| null | ISO 8601 timestamp when the job reached a terminal state, or `null`.                |
| `failureReason`      | string \| null | Summary error when `status` is `failed`, or `null`.                                 |
| `created`            | array          | Sample of created subscribers (`email`, `dashboardId`). Truncated at 100 entries.   |
| `skipped`            | array          | Sample of skipped rows (`email`, `reason`). Truncated at 100 entries.               |
| `errors`             | array          | Sample of failed rows (`email`, `reason`). Truncated at 100 entries.                |
| `quotaExceeded`      | array          | Sample of quota-rejected rows (`email`). Truncated at 100 entries.                  |

### Job status values
| Status       | When                                                                                         |
| ------------ | -------------------------------------------------------------------------------------------- |
| `uploading`  | Client is still sending chunk requests (`uploadComplete` is `false`)                         |
| `processing` | All chunks received; rows are being created in the background                                |
| `completed`  | All batches finished (row-level errors are reported in counts, not as job failure)           |
| `failed`     | Job aborted (e.g. infrastructure failure or stale timeout after 30 minutes without progress) |

***

## Error responses
| Status | When                                                   |
| ------ | ------------------------------------------------------ |
| `400`  | Invalid `jobId`                                        |
| `403`  | Requires admin or subscriber role, or feature disabled |
| `404`  | Job not found                                          |
