---
title: "Get aggregate batch status and completed child results"
method: GET
path: "/batch/{jobId}"
tags: ["Batch"]
---

# Get aggregate batch status and completed child results

`GET /batch/{jobId}`

## Request

- Base URL: `https://api.domscout.io`
- URL: `https://api.domscout.io/batch/{jobId}`
- Auth: API key in header `x-api-key`

## Response `200`

Batch parent status.

- ParentJobStatus: Status of a batch or crawl parent job. Per-item progress is reported by `items`; the aggregate counts are on `counts`, inherited from JobMetadata.
  - `jobId` string, uuid, required
  - `kind` 'batch' | 'crawl'
  - `status` 'pending' | 'processing' | 'retrying' | 'done' | 'error' | 'cancel_requested' | 'cancelled', required
  - `parentJobId` string, uuid, nullable
  - `createdAt` string, date-time
  - `startedAt` string, date-time, nullable
  - `doneAt` string, date-time, nullable
  - `timing` TimingBreakdown
    - `queuedMs` integer
    - `browserMs` integer
    - `uploadMs` integer
    - `webhookMs` integer
    - `totalMs` integer
  - `result` unknown
  - `resultSummary` object
  - `counts` ChildCounts
    - `total` integer
    - `pending` integer
    - `processing` integer
    - `done` integer
    - `completed` integer
    - `succeeded` integer
    - `error` integer
    - `failed` integer
    - `cancelled` integer
  - `metadata` object
  - `items` ParentJobItem[]
    - `id` string, uuid
    - `childJobId` string, uuid, nullable: Durable child job ID when this item has been enqueued; use GET /job/{jobId} to poll it.
    - `sequence` integer
    - `type` string
    - `status` 'pending' | 'processing' | 'retrying' | 'done' | 'error' | 'cancel_requested' | 'cancelled'
    - `url` string, nullable
    - `canonicalUrl` string, nullable
    - `depth` integer, nullable
    - `startedAt` string, date-time, nullable
    - `completedAt` string, date-time, nullable
    - `error` object, nullable
      - `code` string
      - `message` string
    - `resultSummary` object

## Other responses

- `403`: The request was refused. Returned when the x-api-key header is missing, revoked, or invalid, and when a valid key is blocked by a plan entitlement, the trusted-JavaScript account entitlement, a global product pause, or a security policy. A plan-only restriction returns code PLAN_FEATURE_UNAVAILABLE and can include upgrade_url. FEATURE_NOT_ENABLED identifies either the global product emergency pause or an eligible Business account without trusted-JavaScript permission; it carries no upgrade_url, so upgrading or retrying cannot clear it. Browser capture can return BROWSER_ISOLATION_REQUIRED or BROWSER_EXECUTION_DENIED with reason public_capture_not_enabled when browser work is unavailable for your account. These platform restrictions carry no upgrade_url and are not resolved by changing plan or key. Check GET /credits for current account capabilities. The API does not use 401: it authenticates with an API key header rather than an HTTP authentication scheme, so there is no WWW-Authenticate challenge to issue.
- `404`: The resource does not exist, has expired, or is not owned by this API key.
- `503`: A dependency this request needs is unavailable or not configured for this deployment. Codes: SUPABASE_TIMEOUT and SUPABASE_INVALID_RESPONSE (a storage operation did not answer, or answered unreadably — the write may have committed, so any retry must be idempotent), CAPTURE_ARTIFACT_UNAVAILABLE and CAPTURE_ARTIFACT_CORRUPT (a stored artifact could not be read or parsed), ASYNC_JOBS_NOT_CONFIGURED and CAPTURE_RETRIEVAL_NOT_CONFIGURED (the capability is not configured here, on any plan). Retryable unless the code names a deployment configuration.

---

[API](https://skmtc.dev/domscout/apis/domscout-api.md) · [All operations](https://skmtc.dev/domscout/apis/domscout-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domscout/apis/domscout-api/revisions/20562d5b5d94?raw)
