---
title: "Fetch page content, paid per request (x402)"
method: GET
path: "/v1/x402/fetch"
tags: ["Fetch"]
---

# Fetch page content, paid per request (x402)

`GET /v1/x402/fetch`

## Request

- Base URL: `https://api.keenable.ai`
- URL: `https://api.keenable.ai/v1/x402/fetch`
- Auth: API key in header `PAYMENT-SIGNATURE`

Same fetch as GET /v1/fetch, paid per request with x402 instead of an API key. The price is stated in the 402 offer ($0.01 per request by default).

## Query parameters

- `url` string, uri, required
- `max_chars` integer
- `live` boolean
- `prompt` string

## Response `200`

Extracted page content

- FetchResponse
  - `url` string, required: Fetched URL (may differ from input after redirects)
  - `title` string: Page title
  - `content` string, required: Extracted content in markdown
  - `description` string: Always empty. Deprecated.
  - `author` string: Author name
  - `published_at` string: Publish date (ISO 8601)
  - `usage` Usage: What this request was billed. Present when the request is billed in credits, that is made with an API key or a signed-in session; absent on keyless, x402 and ZeroClick requests. A request that fails (any non-2xx status) is never billed, and its error body carries no usage.
    - `sku` string, required: What was billed: search.<mode> for a search, named after the mode it ran in (search.pro by default, search.time_machine for a Time Machine search), and fetch, fetch.live or fetch.time_machine for a fetch. A search whose query is a URL is billed as the fetch it was answered with.
    - `amount` integer, required: Billed units, 1 for a search or a fetch.
    - `credits` number, required: Credits charged to the organization for this request.
    - `paid` boolean, required: true when the credits came from the purchased balance, false when they came from the plan's free credits.

## Other responses

- `400`: Invalid request parameters, or a request the organization's zero data retention policy does not allow (error zdr_wizards_unsupported, zdr_unsupported_profile or zdr_prompt_unsupported)
- `402`: Payment required: decode the PAYMENT-REQUIRED header (mirrored in the body), sign one of accepts, and retry with PAYMENT-SIGNATURE. Also returned when a payment is rejected, and when a verified payment could not be settled; the result is then withheld.
- `403`: The target server refused the fetch (responded 401, 403, or a vendor block code such as LinkedIn's 999) — a bot-wall or access restriction on the target, not an authentication problem with your API key. Deterministic: retrying will not help.
- `404`: The target page does not exist — the target server responded 404.
- `422`: The page was reached but contains no extractable content, or the target server answered with an HTTP error that no other status here covers, such as 410 or 451 — see `message`.
- `429`: Rate limited. Either your own quota, or the target server throttled the fetch — see `message`. Honour `Retry-After`.
- `500`: Internal server error, including a failure inside our own fetcher infrastructure. Not caused by the requested URL; retrying the same URL later is reasonable.
- `502`: The fetcher could not get the target page: a DNS/TLS/connection failure, an unreachable host, or the target answered with a 5xx error. Unlike 422, no page content came back; unlike 403, the target did not refuse the fetch. Often transient; a retry is reasonable.
- `503`: Pay-per-request access is unavailable right now. Retry shortly or use an API key on /v1/search and /v1/fetch.
- `504`: The upstream fetch to the target page timed out.

---

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