Download OpenAPI specification:
Web page capture API. Submits URLs to capture as PNG/WebP screenshots, HTML, or MHTML (single-file archive). Uses fire-and-forget pattern: requests are accepted immediately and processed asynchronously by the capture coordinator.
Accept a capture request for a single URL. Returns 202 immediately on acceptance; the actual capture is processed asynchronously.
The wacz capture format records every HTTP exchange Chromium
performs during the capture (including resources loaded later by
scroll-triggered lazy loaders) into a WACZ archive
replayable in ReplayWeb.page. Server-state
dependent traffic — auth flows with expiring tokens, live
WebSocket / SSE streams, WebRTC — is not in scope: the WARC
records the original exchange but replay cannot reproduce values
that change every load.
Captured artifacts are uploaded to the configured S3-compatible
bucket as s3://<bucket>/[<keyPrefix>/]<filename>. The filename
is derived from the task identifiers as follows:
| Case | Format | Example |
|---|---|---|
| With labels | {taskId}_{labels}.{ext} |
550e8400-..._my-label.png |
| Without labels | {taskId}.{ext} |
550e8400-....png |
| Labels + correlationId | {taskId}_{correlationId}_{labels}.{ext} |
550e8400-..._abc123_my-label.png |
| correlationId only | {taskId}_{correlationId}.{ext} |
550e8400-..._abc123.png |
| url required | string <uri> non-empty Target URL to capture |
| labels | Array of strings Default: [] Display labels (used for filename) |
| correlationId | string Correlation ID provided by the client for tracking |
required | object (CaptureFormats) Capture format flags. At least one must be true. |
| acceptLanguage | string [ 1 .. 200 ] characters ^[\x20-\x7e]+$ Value to send as the upstream Format follows IETF BCP 47 quality-list syntax, e.g.
When omitted, no |
boolean or DismissSpec (object) Run banner / modal dismissal before capturing. Removes known consent-management-platform overlays and large fixed/sticky overlays via heuristic. Two shapes are accepted:
When enabled, the server log line for the completed task
includes a
By default best-effort: dismissal failures (in-page evaluate
timeout, the Set | |
object Per-request browser viewport in CSS pixels. When provided,
When omitted, the server-side default applies (configured via
Bounds ( | |
| fullPage | boolean When When omitted, the server-side default applies (configured via
Has no effect on the |
boolean or ResetStateSpec (object) Per-request control of the inter-task wipe applied to the worker's persistent Chromium tab AFTER this capture completes. BrowserHive holds one tab per worker for its entire lifetime, so without a wipe, cookies / DOM listeners / origin-scoped storage from this capture would bleed into whatever task this worker processes next. Two shapes are accepted:
When omitted, the server-side default applies (built-in default: both axes wipe, matching the long-standing behaviour of clearing state between captures). See |
Captures The Guardian (which uses Sourcepoint as its
consent-management platform). With dismissBanners: true
the consent dialog — and any large fixed/sticky overlay
caught by the heuristic fallback — are removed before the
screenshot is taken. See the dismissBanners field of
CaptureRequest for the resulting dismissReport shape.
{- "labels": [
- "guardian"
], - "captureFormats": {
- "png": true,
- "webp": false,
- "html": false,
- "links": false,
- "mhtml": false,
- "wacz": false
}, - "dismissBanners": true
}{- "accepted": true,
- "taskId": "e6e9d88a-9b63-468a-aec3-b7a11de27af8",
- "correlationId": "string"
}Returns the current status of the queue and worker pool, including a
snapshot of pending tasks (head of the queue, capped by
pendingLimit).
| pendingLimit | integer [ 0 .. 200 ] Default: 50 Maximum number of pending tasks to include in
|
{- "pending": 0,
- "processing": 0,
- "completed": 0,
- "operationalWorkers": 0,
- "totalWorkers": 0,
- "isRunning": true,
- "isDegraded": true,
- "workers": [
- {
- "index": 0,
- "browserOptions": {
- "browserUrl": "string"
}, - "health": "ready",
- "processedCount": 0,
- "errorCount": 0,
- "errorHistory": [
- {
- "type": "http",
- "message": "string",
- "httpStatusCode": 0,
- "httpStatusText": "string",
- "timeoutMs": 0,
- "timestamp": "2019-08-24T14:15:22Z",
- "task": {
- "taskId": "string",
- "url": "string",
- "labels": [
- "string"
]
}
}
], - "currentTask": {
- "taskId": "string",
- "url": "string",
- "labels": [
- "string"
], - "correlationId": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "retryCount": 0
}
}
], - "queue": {
- "pendingTasks": [
- {
- "taskId": "string",
- "url": "string",
- "labels": [
- "string"
], - "correlationId": "string",
- "enqueuedAt": "2019-08-24T14:15:22Z",
- "queuedMs": 0,
- "retryCount": 0
}
], - "processingTasks": [
- {
- "taskId": "string",
- "url": "string",
- "labels": [
- "string"
], - "correlationId": "string",
- "enqueuedAt": "2019-08-24T14:15:22Z",
- "queuedMs": 0,
- "retryCount": 0,
- "workerIndex": 0,
- "startedAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0
}
]
}
}