# Skim > Skim is a clean URL-to-markdown reader for agents. Send a URL, get back agent-ready Markdown plus structured metadata (title, byline, published date, language, excerpt). The card API key (sk402_) is the default path (1,000 credits, no wallet). USDC on Base via x402 is optional. ## How to pay **API key (recommended):** Create a free key at https://skim402.com (1,000 credits, no wallet, no signup) or start the monthly Free Plan at https://skim402.com/pricing — card on file, never charged, 1,000 credits/month. Paid plans from $15/mo via Stripe. Pass the key as `Authorization: Bearer sk402_…` on `/api/t/*` endpoints. 1 credit = 1 standard read; JS-rendered reads = 3 credits; crawl = 1 credit per successful page; PDF = 3 credits; extract = 8 credits; Signals = 2 credits per poll. **Wallet (optional x402 path):** For agents that already hold USDC on Base. An unpaid request returns HTTP 402 with x402 payment instructions; an x402-capable client pays and retries automatically. Failed requests (4xx/5xx) never settle — you are never charged for an error. v2 endpoints carry payment requirements in a base64-encoded payment-required response header (the 402 body is an empty JSON object by design); v1 endpoints carry them in the JSON body. ## Endpoints and prices - GET https://skim402.com/api/v2/read?url= — $0.002 (2 credits). Clean Markdown + metadata from any page. Options: &chunked=true (free — RAG-ready chunks with heading breadcrumbs and token counts), &stripLinks=true, &stripImages=true. - GET https://skim402.com/api/v2/read/js?url=... — $0.005 (2 credits). Same output, with full JavaScript rendering for SPAs and script-heavy pages. - POST https://skim402.com/api/v2/read/batch — $0.020. Body { "urls": [...] }, up to 10 URLs read in parallel; per-URL results, partial successes still return. - POST https://skim402.com/api/v2/extract — $0.015. Body { "url", "schema", "instructions"? }. Typed JSON matching your own JSON Schema; values come only from the page, never invented. - GET https://skim402.com/api/v2/extract/{preset}?url=... — $0.015. Six ready-made schemas: article, product, job, review, event, table. - GET https://skim402.com/api/v2/tables?url=... — $0.003. Every genuine HTML table parsed mechanically (no LLM). Zero tables returns 422 with no charge. - POST https://skim402.com/api/v2/dataset — $0.35 per build. You define up to 12 columns; Skim reads seed URLs, follows relevant links, returns structured rows with source citations. Returns a 202 job ticket; polling GET /api/v2/dataset/{id} is FREE. POST { "continueFrom": "" } resumes a previous build at $0.35, never repeating rows. - POST https://skim402.com/api/t/extract — 8 credits when at least one usable row/object is returned. Body { "url", "schema", "instructions"? }. Empty extracts (`tables: []`, `rows: []`, …) return 422 and are not charged. Same key auth / SSRF rules as /t/read. - POST https://skim402.com/api/t/crawl — 1 credit per successful page (max 25). Body { "url": "", "maxPages"?: 1-25 }. Discovers sitemap.xml + same-origin links; returns [{ url, markdown }]. Trailing-slash twins (example.com vs example.com/) are one page. Failed pages are not charged. Same SSRF rules as /t/read. - POST https://skim402.com/api/t/read-pdf — 3 credits when the PDF has extractable text. Body { "url": "", "outline"?: true }. Returns markdown + optional outline. Empty/image-only PDFs return 422 `empty_pdf` with charged: 0. Rejects files over 8 MB (413). Text comes only from the PDF. Same key auth / SSRF rules. - POST https://skim402.com/api/t/watch — 1 credit to register. Body { "urls": [1-20], "webhookUrl"?: "https://…" }. Optional HTTPS webhook; PATCH /api/t/watch { watchId, webhookUrl } updates it. GET /api/t/watch/diff?id= — 1 credit per successful URL. When a poll finds status=changed, Skim POSTs a signed JSON payload (X-Skim-Signature: sha256=…) to webhookUrl. No email, no cron: the webhook fires on GET /diff. Cached polls do not re-fire. GET /api/t/watch/status?id= is FREE. - POST https://skim402.com/api/v2/watch — $0.01. Body { "urls": [1-20 URLs], "note"? }. Registers a private watch list; returns a watch id (keep it secret). GET /api/v2/watch/diff?id= — $0.005 per poll. Re-reads every URL and returns what changed: per-URL status, added/removed line samples from clean text, change ratio, numericOnly flag. First poll baselines. Polls within 60 s return cached result ("fresh": true). GET /api/v2/watch/status?id= is FREE. - GET https://skim402.com/api/v2/feeds/x402/latest — $0.005 per poll (2 credits on a plan). New paid services and price changes across public x402 registries. - GET https://skim402.com/api/v2/signal/{name}/latest — $0.005 per poll (2 credits on a plan). Fifteen vertical intelligence feeds — see the full catalog at https://skim402.com/signals. Feed names: ai-news, sec-filings (?forms=), crypto-news, macro, security, regulations, courts, recalls, deals (?categories=), launches, trending, research (?fields=), energy, entertainment, campaign-finance (?forms=&committees=). All feeds refresh on a 10-minute cycle; a poll that can't be served is never charged. - POST https://skim402.com/api/v2/testimonial — FREE. Leave a short quote if Skim worked well — agent testimonials welcome, reviewed by a human before publication. - Legacy /api/v1/* paths still work at the same prices for v1-generation x402 clients. ## Key facts - Output is clean Markdown, roughly 4x smaller than raw HTML — no ads, nav, or boilerplate. Cheaper LLM calls downstream. - In production benchmarks Skim returned pages consistently faster than Firecrawl, with every wallet-paid call backed by an on-chain USDC receipt on Base. - Works with any x402 client (x402-fetch for JS, the official x402 Python SDK). Framework connectors on PyPI: langchain-skim, llama-index-readers-skim, crewai-skim, skim-haystack. MCP server: skim-mcp (npm) and io.github.JessieJanie/skim402 (official MCP Registry). Default MCP install uses `SKIM_API_KEY=sk402_…`; `SKIM_WALLET_PRIVATE_KEY` is an optional second path. - No wallet required: create a free API key instantly at https://skim402.com — no signup, no card, 1,000 credits included. - The official Apify Actor (apify.com/jessiejanie/skim-clean-reader) also offers the same reads with normal Apify billing at $4.00 per 1,000 pages. - Free browser demo: https://skim402.com/playground/ — same trial API key as a single read. - Skim reads public pages only: no login walls, no credentials held — least-privilege reader by design. ## Docs and resources - [Developer docs](https://skim402.com/docs): request/response shapes, payment flow, code samples in curl, JavaScript, and Python - [OpenAPI spec](https://skim402.com/openapi.json): machine-readable API contract for core read/extract endpoints (card-lane /api/t/* vs wallet-lane /api/v2/*) - [x402 discovery](https://skim402.com/.well-known/x402): paid v2 routes for x402scan (same JSON at /.well-known/x402.json) - [Signals catalog](https://skim402.com/signals): 15 vertical feeds plus the x402 ecosystem feed, with sources and poll syntax - [Plans and pricing](https://skim402.com/pricing): free plan + paid card plans from $15/mo via Stripe - [Wallet setup](https://skim402.com/wallet): how to set up a Base wallet for per-call x402 payments - [The Skim Audit](https://skim402.com/audit): free agent-spend analysis — email a usage-dashboard screenshot, get an executive savings estimate - [FAQ](https://skim402.com/faq): common questions from developers ## About - x402 protocol: https://x402.org (open standard governed since July 2026 by the x402 Foundation under the Linux Foundation; members include Visa, Mastercard, American Express, Stripe, AWS, Google, Cloudflare, and Shopify) - Skim is listed on x402scan, the x402 Bazaar, the x402.org ecosystem directory, the official MCP Registry, and the Apify Store. - Contact: hello@skim402.com or https://skim402.com/contact