---
title: "Start an async multi-URL structured extraction job"
method: POST
path: "/v1/extract"
tags: ["extract"]
---

# Start an async multi-URL structured extraction job

`POST /v1/extract`

## Request

- Base URL: `https://api.fastcrw.com`
- URL: `https://api.fastcrw.com/v1/extract`
- Auth: one of:
  - HTTP bearer
  - none

Native extraction. Returns a fixed-cardinality per-URL array via GET /v1/extract/{id}. At least one of `prompt` or `schema` is required. SDK async starters send `Prefer: respond-async` for managed/self-hosted parity.

## Headers

- `Prefer` 'respond-async'

## Request body

- ExtractRequest: At least one of `prompt` or `schema` must be present.
  - `urls` string[], required: URLs to extract from (1..crawler.max_extract_urls).
  - `prompt` string: Free-text extraction objective.
  - `schema` object: JSON Schema constraining the extracted output.
  - `llmApiKey` string: BYOK LLM API key.
  - `llmProvider` string
  - `llmModel` string
  - `basis` boolean: Return per-field evidence: each result carries a 'basis' array, one entry per top-level scalar schema property. Requires 'schema'. Reported by GET /v1/capabilities (extract.perFieldAttribution).

## Response `200`

Extract job accepted; poll with /v1/extract/{id}

- ExtractAccepted
  - `success` boolean, required
  - `id` string, required
  - `status` 'processing', required
  - `urls` integer, required: Count of URLs enqueued for fetch (preflight-failed URLs appear in results, not here).

## Other responses

- `400`: Invalid request body

---

[API](https://skmtc.dev/fastcrw/apis/crw-rest-api.md) · [All operations](https://skmtc.dev/fastcrw/apis/crw-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fastcrw/apis/crw-rest-api/revisions/9bc1842aa048?raw)
