# Crawl4AI โ€” Zapi reference > LLM-ready markdown extraction with anti-bot escalation. 3-tier: fast (direct), magic (browser stealth), worker-chain (CF Worker IP rotation). **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/ai/crawl4ai - Endpoint catalog: https://zpi.web.id/category/ai - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## Crawl4AI **Category:** ai ยท **Slug:** `crawl4ai` **Detail page:** https://zpi.web.id/api/ai/crawl4ai LLM-ready markdown extraction with anti-bot escalation. 3-tier: fast (direct), magic (browser stealth), worker-chain (CF Worker IP rotation). **Tags:** new, featured, crawl, screenshot, markdown ### Extract URL to Markdown Extract any URL to LLM-ready markdown. 3-tier anti-bot escalation: fast (direct), magic (browser stealth), worker-chain (CF Worker IP rotation). Powered by Crawl4AI. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/ai:crawl4ai/extract` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `url` | string | query | yes | Page URL to extract | | `output` | enum(markdown|html|text|links|media|screenshot|pdf) | query | no | Output form: "markdown" (LLM-ready, default), "html" (cleaned HTML), "text" (plain text), "links" (internal+external), "media" (images/videos/audios), "screenshot" (PNG base64), "pdf" (PDF base64). "fast" mode supports markdown only โ€” others auto-upgrade to "magic". | | `mode` | enum(fast|magic|worker-chain) | query | no | Anti-bot strategy: "fast" (no anti-bot, markdown only), "magic" (built-in stealth, default), "worker-chain" (route via proxy pool for datacenter-IP-blocked targets). | | `filter` | enum(fit|raw) | query | no | Markdown filter (output=markdown only): "fit" = noise-stripped (best for LLM), "raw" = unfiltered. Default "fit". | | `selector` | string | query | no | CSS selector to scope extraction (e.g. ".article-body", "#main"). Empty = whole page. Applies to markdown/html/text. Forces "magic" mode. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/ai:crawl4ai/extract?url=https%3A%2F%2Fnews.ycombinator.com&output=markdown&mode=magic&filter=fit&selector=.titleline" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/ai:crawl4ai/extract?url=https%3A%2F%2Fnews.ycombinator.com&output=markdown&mode=magic&filter=fit&selector=.titleline", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/ai:crawl4ai/extract?url=https%3A%2F%2Fnews.ycombinator.com&output=markdown&mode=magic&filter=fit&selector=.titleline", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "url": "https://news.ycombinator.com", "mode": "magic", "filter": "fit", "length": 5241, "output": "markdown", "finalUrl": "https://news.ycombinator.com", "markdown": "[Deno Desktop](https://docs.deno.com/runtime/desktop/) ([deno.com](https://news.ycombinator.com/from?site=deno.com))[GLM 5.2 vs. Opus](https://techstackups.com/comparisons/glm-5.2-vs-opus/) ([techstackups.com](https://news.ycombinator.com/from?site=techstackups.com))[Help I accidentally a wigglegram](https://lmao.center/blog/wiggle-accidents/) ([lmao.center](https://news.ycombinator.com/from?site=lmao.center))[Did my old job only exist because of fraud?](https://david.newgas.net/did-my-old-job-only-exist-because-of-fraud/) ([newgas.net](https://news.ycombinator.com/from?site=newgas.net))[Apertus โ€“ Open Foundation Model for Sovereign AI](https://apertvs.ai/) ([apertvs.ai](https://news.ycombinator.com/from?site=apertvs.ai))[Codex logging bug may write TBs to local SSDs](https://github.com/openai/codex/issues/28224) ([github.com/openai](https://news.ycombinator.com/from?site=github.com/openai))[There is minimal downside to switching to open models](https://www.marble.onl/posts/cancel_claude.html) ([marble.onl](https://news.ycombinator.com/from?site=marble.onl))[Munich 1991: The Roots of the Current AI Boom](https://people.idsia.ch/~juergen/ai-boom-roots-munich-1991.html) ([idsia.ch](h\n... [truncated]", "wordCount": 216, "statusCode": 200 } ``` --- _Generated: 2026-08-02T14:26:12.430Z_