Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Fetchgate Read API
version: 0.1.0
summary: Web-content API and x402 digital-goods storefront for AI agents.
description: 'Fetch clean Markdown or structured metadata from any URL, server-side, with scripts/nav/ad boilerplate stripped out. Also a machine-payable storefront: GET /v1/products for the catalog, GET /v1/buy/:id to pay per product via x402 (USDC on Base) and receive a signed download URL.'
x-guidance: 'Two independent surfaces. (1) Web reader: GET /v1/read?url=... for Markdown, GET /v1/meta?url=... for structured metadata — free up to 30 calls/day/IP, then $0.002 (/v1/read) or $0.001 (/v1/meta) per call via x402 v2 (send a PAYMENT-SIGNATURE header after receiving a 402; legacy X-PAYMENT is also accepted). (2) Digital-goods store: GET /v1/products lists the catalog (no payment); GET /v1/buy/:id with a real id from that catalog always requires payment — send PAYMENT-SIGNATURE to get a 402 challenge, pay it, and the 200 response carries a time-limited signed downloadUrl to fetch the file from. Everything is also reachable as MCP tools at POST /mcp (read_url, get_metadata, scan_for_prompt_injection, search_x402_services, check_x402_endpoint, check_base_token, list_products, get_purchase_info, get_agent_census, scan_mcp_server).'
contact:
email: support@fetchgate.dev
servers:
- url: https://fetchgate.dev
description: Current host
tags:
- name: Read
paths:
/v1/read:
get:
operationId: readUrl
summary: Fetch a URL and convert its main content to Markdown
x-payment-info:
price:
mode: fixed
currency: USD
amount: '0.002'
protocols:
- x402: {}
parameters:
- name: url
in: query
required: true
description: The absolute http(s) URL to fetch.
schema:
type: string
format: uri
- name: format
in: query
required: false
description: Set to `text` to receive raw Markdown instead of JSON.
schema:
type: string
enum:
- json
- text
default: json
responses:
'200':
description: Successful extraction.
content:
application/json:
schema:
type: object
properties:
url:
type: string
format: uri
title:
type: string
markdown:
type: string
fetchedAt:
type: string
format: date-time
required:
- url
- markdown
- fetchedAt
text/markdown:
schema:
type: string
'400':
description: Invalid or disallowed URL.
content:
application/json:
schema:
type: object
properties:
error:
type: string
detail:
type: string
required:
- error
'402':
description: Free tier exhausted; payment required.
content:
application/json:
schema:
type: object
properties:
error:
type: string
detail:
type: string
required:
- error
'502':
description: Upstream fetch failed.
content:
application/json:
schema:
type: object
properties:
error:
type: string
detail:
type: string
required:
- error
tags:
- Read
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Optional API key for authenticated/paid access. TODO: pay-per-request via x402 is planned as an alternative to a pre-provisioned key.'