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

GET
/v1/scrape/bulk/{id}

Authorization

AuthorizationRequiredBearer <token>

API key. Manage keys from the dashboard at app.bytekit.com.

In: header

Path Parameters

idRequiredstring
Pattern: "^bulk_"

Query Parameters

cursorstring

Opaque 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.

limitinteger

Maximum result rows considered for this page; the 16-MiB response bound may stop sooner.

Default: 500Minimum: 1Maximum: 500
statusstring

Optional item-status filter. A cursor may be reused only with the same filter.

Value in: "pending" | "processing" | "completed" | "failed" | "cancelled"
curl https://api.bytekit.com/v1/scrape/bulk/{id} \
  -H "Authorization: Bearer sk_live_your_api_key_here"

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.

{
  "id": "bulk_01j9abc123",
  "status": "processing",
  "total": 0,
  "completed": 0,
  "failed": 0,
  "created_at": "2019-08-24T14:15:22Z",
  "completed_at": "2019-08-24T14:15:22Z",
  "total_credits_charged": 0,
  "total_billed_bytes": 0,
  "estimated_credits": 0,
  "webhook_url": "string",
  "next_cursor": "string",
  "has_more": true,
  "items": [
    {
      "schema_version": 1,
      "status": "success",
      "id": "sc_01j9abc123",
      "url": "https://example.com",
      "final_url": "https://example.com/",
      "content_type": "text/html; charset=UTF-8",
      "content_length": 1256,
      "status_code": 200,
      "retrieved_at": "2025-01-15T12:00:00Z",
      "formats": {
        "raw": "<html><body><h1>Hello World</h1><p>Example page with a <a href=\"/about\">link</a> and an image.</p></body></html>",
        "markdown": "# Hello World\n\nExample page with a [link](/about) and an image.\n\n![Alt text](https://example.com/photo.png)",
        "links": [
          {
            "url": "https://example.com/about",
            "text": "link",
            "isInternal": true,
            "rel": null
          }
        ],
        "images": [
          {
            "url": "https://example.com/photo.png",
            "alt": "Alt text",
            "width": 800,
            "height": 600,
            "format": "png",
            "score": 0.95
          }
        ]
      },
      "metadata": {
        "title": "Example Domain",
        "description": "An example page for demonstration",
        "language": "en",
        "canonicalUrl": "https://example.com",
        "ogTitle": "Example Domain",
        "ogDescription": null,
        "ogImage": null,
        "byline": "Jane Doe",
        "publishedAt": "2025-01-15T09:00:00Z"
      },
      "tables": [
        {
          "kind": "data",
          "gfm": "| Col1 | Col2 |\n|------|------|\n| A | B |",
          "rows": 2,
          "cols": 2
        }
      ],
      "warnings": [
        {
          "code": "lossy_table",
          "message": "Table at index 3 was simplified",
          "element": "<table>...</table>"
        }
      ],
      "stats": {
        "chars": 1256,
        "tokens": 312,
        "blocks": 4
      }
    }
  ]
}