Skip to content

Overview

Live Web Data API turns any public URL into clean Markdown, text or HTML — fetched live through our fetch network.

What it does

You send up to 10 URLs (and optionally a country). We fetch each page through a residential or mobile connection, extract the main content and return it in the format your agent or pipeline needs. Successful pages cost 1 credit; failures cost nothing.

Value
Base URLhttps://livewebdata.com/api
EndpointsPOST /v1/contents, GET /v1/account
Formatsmarkdown and text by default; html with html: true
OpenAPI/openapi.json · /openapi.yaml
Fetch strategy (v1)static fetch (fast), a retry through another connection (retry), or a real browser (browser) with render or renderFallback

Authentication

Create a key in the dashboard under API keys and send it as a bearer token. Keys start with 1337_live_ (test keys with 1337_test_) and are shown only once. Keep them in an environment variable such as LIVE_WEB_DATA_API_KEY — never in client-side code or repositories.

Headers
Authorization: Bearer 1337_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

Quickstart

Fetch a page as Markdown:

cURL
curl -X POST https://livewebdata.com/api/v1/contents \
  -H "Authorization: Bearer $LIVE_WEB_DATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://example.com/article"]}'

The response contains one entry in results per successful page and one entry in statuses per requested URL. The page HTML is included only when you send "html": true:

Response (abridged)
{
  "requestId": "req_01J…",
  "results": [{
    "id": "https://example.com/article",
    "url": "https://example.com/article",
    "title": "Article",
    "markdown": "# Article\n\n…",
    "text": "Article\n\n…"
  }],
  "statuses": [{
    "id": "https://example.com/article",
    "status": "success",
    "source": "livecrawled",
    "fetchedAt": "2026-10-23T09:15:02.118Z",
    "httpStatusCode": 200,
    "strategy": "fast",
    "credits": 1,
    "error": null
  }],
  "searchTime": 1240
}

When text or markdown was cut at text.maxCharacters, results[].textTruncated is true. results[].warnings (absent when empty) flags pages that could only be partly retrieved (PAGE_TRUNCATED), probably need render: true (THIN_CONTENT), were converted as plain text (EXTRACTION_FALLBACK) or lost their html (and maybe part of their text) to the response's 24 MiB size limit (RESPONSE_SIZE_LIMIT).

See the API reference for every parameter, or try it without code in the dashboard playground.

SDKs

Thin, typed clients for JavaScript/TypeScript and Python with built-in retries and typed errors. See SDKs.

JS SDK
import { Teneo } from "@teneo/contents";

const client = new Teneo({
  apiKey: process.env.LIVE_WEB_DATA_API_KEY,
  baseUrl: "https://livewebdata.com/api",
});

const res = await client.contents({
  urls: ["https://example.com/article"]
});
for (const s of res.statuses) console.log(s.id, s.status, s.error?.tag ?? "");
console.log(res.results[0]?.markdown);

Live fetching

Every request is fetched live; there is no cache.

Geotargeting

Set countryCode to an ISO-3166-1 alpha-2 code (for example de, jp, br) to fetch the page as seen from that country. The default is us.

cURL
curl -X POST https://livewebdata.com/api/v1/contents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "urls": [
    "https://example.com/pricing"
  ],
  "countryCode": "de"
}'

Multiple URLs

Send up to 10 URLs in one request. They are processed in parallel; statuses has one entry per URL (matched by id) and credits are charged per successful URL. A restricted URL gets a per-URL RESTRICTED_TARGET status instead of failing the whole request. More than 10 URLs return 400 TOO_MANY_URLS. Rate limits count URLs, not HTTP requests.

cURL
curl -X POST https://livewebdata.com/api/v1/contents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "urls": [
    "https://example.com/a",
    "https://example.com/b",
    "https://example.com/blocked"
  ]
}'

Restricted targets

Some domain categories are blocked for legal and regulatory reasons. Requests are rejected with 451 and cost no credits. Repeated attempts lead to automatic key suspension. Report abuse to [email protected].

MCP for agents

Agents can use the API as a tool over MCP with your existing key — two tools, get_page_contents and get_account_status. Setup for Claude Code, Cursor, VS Code and Claude Desktop: MCP for agents.

For AI coding agents

Every docs page is also available as plain Markdown by appending .md to its URL (e.g. /docs/api-reference.md). An index for LLMs lives at /llms.txt and the full docs in one file at /llms-full.txt.