---
title: "URL to markdown"
method: POST
path: "/scrape"
---

# URL to markdown

`POST /scrape`

## Request

- Base URL: `https://fastcrawl.net/api/v1`
- URL: `https://fastcrawl.net/api/v1/scrape`
- Auth: HTTP bearer

PDF URLs auto-route to the document parser (metadata.parser=pdf-inspector).

## Request body

- object
  - `url` string, uri, required
  - `formats` string[]: Output formats. changeTracking adds metadata.change_information: {change_status: first|unchanged|added|removed|different, diff} vs your previous scrape of this URL.
  - `maxAge` integer: Cache freshness window seconds (default 172800 = 48h; 0=always fresh). Cache hits are free.
  - `timeout` integer: Per-page timeout in seconds (5-30, default 30). Fail fast on blocking pages. Capped at 30 to bound browser-rendering cost per credit.
  - `fetchMode` 'auto' | 'http'

## Response `200`

Scraped content.

- object
  - `success` boolean
  - `url` string
  - `markdown` string
  - `html` string
  - `links` string[]
  - `json` object
  - `metadata` object: incl. change_information when formats has changeTracking; parser=pdf-inspector for PDFs
  - `duration_ms` integer
  - `from_cache` boolean
  - `error` string
  - `error_code` 'target_dns_error' | 'target_unreachable' | 'target_timeout' | 'target_tls_error' | 'target_redirect_loop' | 'target_blocked' | 'target_not_found' | 'target_rate_limited' | 'target_server_error' | 'scrape_http_status' | 'scrape_invalid_url' | 'scrape_engine_error' | 'scrape_antibot_error' | 'scrape_pdf_detected' | 'scrape_empty_content' | 'unknown_format' | 'invalid_request' | 'invalid_api_key' | 'missing_api_key' | 'monthly_limit' | 'daily_limit' | 'rate_limit'
  - `retryable` boolean: true: timeout/unreachable/rate-limit/engine errors — retry helps. false: dns/404/blocked/tls/redirect-loop — do not retry.

## Other responses

- `400`: invalid_request / unknown_format
- `401`: missing_api_key / invalid_api_key — body carries remediation hint + WWW-Authenticate header
- `422`: engine failure (business result): error_code + retryable
- `429`: plan limit reached (error_code monthly_limit|daily_limit|rate_limit)

---

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