---
title: "Get a saved capture and short-lived artifact download URLs"
method: GET
path: "/capture/{captureId}"
tags: ["Capture"]
---

# Get a saved capture and short-lived artifact download URLs

`GET /capture/{captureId}`

## Request

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

Requires an API key owned by the capture's account. The service deliberately returns the same 404 response when the capture is absent, a finite-retention capture has expired, or it belongs to another account. New saves have a finite plan-bounded expiry; a historic saved row with expiresAt null is legacy permanent retention. The response has no separate S3 object-key field, but a signed downloadUrl can contain storage-path information and is a secret capability: do not log it or expose it to an untrusted client. Each URL expires no later than one hour after issuance and, for a finite-retention capture, is clamped not to outlive it.

## Response `200`

Owned retained saved-capture metadata and signed artifact download URLs (finite-retention or legacy permanent).

- CaptureLookupResponse
  - `status` 'success', required
  - `capture` SavedCapture, required
    - `id` string, uuid, required
    - `name` string, nullable
    - `targetUrl` string, uri, nullable
    - `format` string
    - `mode` string
    - `status` string
    - `createdAt` string, date-time
    - `expiresAt` string, date-time, nullable, required: Effective retained-capture expiry for a finite new save. At or after this time the route returns 404. Null means a historic legacy row with permanent retention.
    - `retentionDays` 7 | 30 | 90 | 365 | null, nullable: Effective finite retention duration for a new save. Null for a historic legacy permanent row.
    - `artifacts` SavedCaptureArtifact[], required
      - `kind` string, required
      - `contentType` string, required
      - `expiresAt` string, date-time, nullable, required: The finite saved-capture retention expiry, not the signed-URL expiry. Null for an artifact of a historic legacy permanent capture.
      - `downloadUrl` string, uri, required: Signed URL, capped at one hour and clamped not to outlive a finite-retention capture. There is no separate S3-key field, but this URL can contain storage-path information. Treat it as a secret capability URL.
      - `downloadUrlExpiresAt` string, date-time, required: When this signed URL stops working. It is at most one hour after issuance and, for finite retention, never later than expiresAt.

## 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)
