Get bulk import job status and results

Search Documentation

Search across all developer documentation

contacts

Get bulk import job status and results

GET /v1/contacts/bulk/{job_id}
Auth required api.contacts.manage

Returns the status and per-contact outcomes of a bulk import job created by POST /v1/contacts/bulk. Poll until status is completed or failed.

Per-contact outcomes are keyset-paginated by row index via the cursor query param. Use the next_cursor from results to fetch the next page; when next_cursor is null there are no more items. Items are available from the time the job enters running status.

Path parameters

job_id string<uuid> required

Job ID returned by POST /v1/contacts/bulk.

Query parameters

cursor string optional

Opaque cursor returned from the previous page.

Responses

Errors follow the RFC 7807 problem format — see the error reference.

200 Job status and per-contact result page application/json
job_id string<uuid> required
status string required

Job lifecycle state — pending, running, completed, or failed.

total integer required
processed integer required
succeeded integer required
failed integer required
ses_pending integer | null optional

How many of THIS job's contacts have not yet been mirrored to SES. null means "not computable for this job", never zero: it is returned when the job's address set is not recoverable — a CSV import (the file is transient) or a bulk update that selected contacts by filter rather than by an explicit list. Use org_ses_pending in that case.

org_ses_pending integer required

The organization's entire pending mirror queue, which this job's contacts are part of. Always present.

results object required

One keyset page of per-contact outcomes.

Fields of results:

data array<object> required

Each entry in data:

index integer required

Zero-based position of the contact in the submitted contacts array.

email string<email> required
outcome string enum required

One of: created, updated, skipped, failed

reason string optional

Populated for skipped and failed items only.

next_cursor string | null required

Opaque cursor for the next page, or null when there are no more items.

401 Missing, malformed, or unknown API key application/problem+json
403 Key lacks the required scope or plan limit violated application/problem+json
404 Resource not found application/problem+json
429 Per-org rate limit exceeded application/problem+json
500 Unexpected server-side failure. The code is internal_error. The request_id field can be quoted to SendOps support to investigate. application/problem+json