---
title: "Read committed crawl outcomes"
method: GET
path: "/web/crawl/{job_id}/results"
tags: ["Retrieval"]
---

# Read committed crawl outcomes

`GET /web/crawl/{job_id}/results`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/web/crawl/{job_id}/results`
- Auth: API key in header `x-api-key`

Reads committed outcomes in stable publication order. While running, `has_more=false` only means the job is currently drained; poll again with `next_cursor` to observe later outcomes. Each response is bounded to 1 MiB.

## Path parameters

- `job_id` string, required

## Query parameters

- `cursor` string
- `limit` integer

## Response `200`

Committed crawl outcomes

- CrawlretrievalCrawlResultsEnvelope
  - `code` integer
  - `data` CrawlretrievalCrawlResultsDoc
    - `expires_at` string, date-time
    - `has_more` boolean
    - `items` CrawlretrievalCrawlOutcomeDoc[]
      - `depth` integer
      - `document` RetrievaltypesDocument
        - `content_sha256` string
        - `content_type` string
        - `document_id` string
        - `fetched_at` string
        - `final_url` string
        - `links` string[]
        - `markdown` string
        - `metadata` RetrievaltypesDocumentMetadata
          - `author` string
          - `description` string
          - `language` string
          - `modified_at` string
          - `published_at` string
          - `title` string
        - `passages` RetrievaltypesPassage[]
          - `locator` RetrievaltypesPassageLocator
            - `anchor` string
            - `end_byte` integer
            - `end_line` integer
            - `heading` string
            - `page` integer
            - `start_byte` integer
            - `start_line` integer
          - `passage_id` string
          - `score` number
          - `text` string
        - `revision` string
        - `source_url` string
        - `truncated` boolean
      - `failure` CrawlretrievalCrawlFailureDoc
        - `message` string
        - `reason` 'invalid_url' | 'unsupported_content_type' | 'blocked' | 'not_found' | 'rate_limited' | 'timeout' | 'upstream_error' | 'internal_error' | 'out_of_scope' | 'robots_disallowed' | 'duplicate' | 'limit_reached' | 'unsupported_filter' | 'unknown_source' | 'idempotency_conflict' | 'invalid_cursor' | 'result_expired' | 'full_text_unavailable' | 'budget_exhausted'
        - `retry_after_seconds` integer
        - `retryable` boolean
      - `outcome` 'succeeded' | 'failed' | 'skipped'
      - `sequence` integer
      - `url` string, uri
    - `job_id` string
    - `next_cursor` string
    - `partial` boolean
    - `progress` RetrievaltypesJobProgress
      - `admitted` integer
      - `discovered` integer
      - `discovery_excluded` integer
      - `failed` integer
      - `in_flight` integer
      - `queued` integer
      - `skipped` integer
      - `succeeded` integer
    - `snapshot_sequence` integer
    - `state` 'queued' | 'running' | 'cancelling' | 'succeeded' | 'failed' | 'cancelled'
    - `usage` RetrievaltypesUsage
      - `browser_renders` integer
      - `credits_charged` integer
      - `credits_released` integer
      - `credits_reserved` integer
      - `fetch_attempts` integer
      - `fetched_urls` integer
      - `input_tokens` integer
      - `output_tokens` integer
      - `search_requests` integer
      - `settlement_pending` boolean
  - `msg` string

## Other responses

- `400`: Invalid job ID, cursor, limit, or query parameter
- `401`: Authentication required
- `404`: Unknown, unowned, or non-crawl job
- `410`: Expired cursor or retained result
- `500`: Internal storage error
- `503`: Required backend unavailable

---

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