---
title: "Fetch a web page"
method: GET
path: "/api/v1/fetch"
---

# Fetch a web page

`GET /api/v1/fetch`

## Request

- Base URL: `https://api.andiai.com`
- URL: `https://api.andiai.com/api/v1/fetch`
- Auth: API key in header `x-api-key`

Fetches a single web page and returns clean extracted content (title, article text, metadata) as JSON, or LLM-ready markdown with format=context. The companion to /api/v1/search: search, pick a result, fetch it in full.

## Query parameters

- `url` string, uri, required
- `format` 'json' | 'context'
- `effort` 'low' | 'medium' | 'high' | 'max'
- `maxContentLength` integer
- `query` string

## Response `200`

Extracted page content

- object
  - `url` string
  - `title` string
  - `description` string
  - `content` string: Clean extracted text content
  - `markdown` string: Clean extracted content as markdown, when available.
  - `extracts` string[]: Key passage extracts from the page, when available.
  - `snippet` string: Short excerpt from the page.
  - `author` string
  - `date` string
  - `site_name` string
  - `image` string
  - `lang` string
  - `word_count` integer
  - `truncated` boolean
  - `query_extracts` string[]: Text extracts from the page most relevant to `query`. Only present when `query` is set.
  - `query_snippet` string: Short excerpt from the page most relevant to `query`. Only present when `query` is set.
  - `query_hash` string: Hash identifying the `query` used to scope this response. Only present when `query` is set.
  - `partial` boolean: Whether this is a partial response returned before the page finished retrieving. Only present when true.
  - `retry_after_seconds` integer: Seconds to wait before retrying for the full content. Only present on partial responses.
  - `metrics` object
    - `duration_ms` integer
    - `cost_dollars` number: Actual cost of this fetch in USD (post-discount). Failed fetches are not billed.

## Other responses

- `400`: Missing or invalid url parameter
- `401`: Missing or invalid API key
- `402`: Credit balance exhausted
- `422`: The page was reached but its content could not be extracted. Not retriable. Not billed.
- `429`: Rate limit exceeded
- `503`: The page is still being retrieved, or a transient failure occurred. Retriable — retry after the number of seconds in the `Retry-After` header. Not billed.

## Changes

- **2026-09-29** `7b56c4c1c3ea`: 1 breaking, 1 warning
  - for the `query` request parameter `maxContentLength`, default value `100000` was added
  - for the `query` request parameter `maxContentLength`, the max was set to `200000.00`

[Operation history](https://skmtc.dev/andiai/apis/andi-ai-search-api/changes/api/v1/fetch/get.md)

---

[API](https://skmtc.dev/andiai/apis/andi-ai-search-api.md) - [All operations](https://skmtc.dev/andiai/apis/andi-ai-search-api/llms.txt) - [OpenAPI document](https://skmtc.dev/andiai/apis/andi-ai-search-api/revisions/fcda359bd8c6?raw)
