Get scrape bulk job status
Returns the job envelope plus its rehydrated per-URL scrape envelopes.
Downloading item content. A raw or markdown artifact within the
10-MiB inline cap is returned inline. An oversized one is replaced by a
pre-signed URL, minted fresh on every read of this endpoint and valid
for 86400 seconds (24 hours). The underlying objects are private, so an
unsigned URL returns 401: download the content inside that window, or
re-poll this endpoint for a fresh signature. An artifact that was never
stored, or whose object cannot be signed, is omitted from formats and
reported as artifact_unavailable in warnings. The private unsigned
storage URL is never returned.
Cancelled by the platform. When the account can no longer spend (its bandwidth
balance is exhausted, or the account is deleted) while items are still pending, ByteKit
cancels the job itself. It then reads status: cancelled even though you never called
DELETE /v1/bulk/{id}, and the cancellation sends no webhook.
Job ids from other create routes. The job is looked up by account only, so the id
of a job created by POST /v1/fetch/bulk or POST /v1/bulk is found here too, not a 404.
The items listed are the job's scrape rows: a fetch-bulk job's items appear, and a
POST /v1/bulk job shows its scrape items but not its screenshots. An id from another
account answers 404.
For AI agents: https://bytekit.com/llms.txt — every docs page is available as markdown by appending .md
Authorization
AuthorizationRequiredBearer <token>API key. Manage keys from the dashboard at app.bytekit.com.
In: header
Path Parameters
idRequiredstring"^bulk_"Query Parameters
cursorstringOpaque cursor returned by the preceding page. It is bound to this bulk id, this recovery route, and the exact status filter; cross-scope cursors return 422.
limitintegerMaximum result rows considered for this page; the 16-MiB response bound may stop sooner.
500Minimum: 1Maximum: 500statusstringOptional item-status filter. A cursor may be reused only with the same filter.
"pending" | "processing" | "completed" | "failed" | "cancelled"Bulk job status with rehydrated item envelopes. Each completed scrape
result entry echoes its custom payload (resolved per entry as
entry.custom ?? body.custom) at the same position it occupies in the
/v1/scrape success envelope. The key is omitted when no custom was
supplied for that entry.
POST /v1/scrape/bulkBulk scrape URLs
Enqueues multiple URLs for scraping. Results delivered via webhook. Completion deliveries use `X-ByteKit-Event: bulk.completed` and the `BulkCompletedWebhook` contract: at most 500 complete items and 1 MiB, followed by cursor recovery through `GET /v1/scrape/bulk/{id}` whenever `recovery_required` is true. **Unknown keys.** An unknown key on an `items[]` entry, or at the top level of the body, is rejected with `422 validation_error`. An unknown key inside `defaults` is not: it is dropped without a warning and the request is accepted with `202`. The exception is `cookies` and `headers`, on an item or in `defaults`: they answer `400 validation_error`.
Fetch
Fetch API — endpoints, requests, and responses.