Developer Documentation

Base URL: https://api.karonlabs.net

Quick Start

curl -X POST https://api.karonlabs.net/v1/fetch \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

That's it. The API automatically bypasses common WAF protections including Cloudflare, Akamai, DataDome, hCaptcha, PerimeterX, Kasada, and AWS WAF — no manual cookie handling or scripting required.

Authentication

All endpoints except /v1/pricing and /health require a Bearer token:

Authorization: Bearer ku_live_xxxxxxxxxxxx

POST /v1/fetch

Fetch a URL and return raw HTML. Automatic access handling with response caching.

Parameters

NameTypeDefaultDescription
urlstring REQUIRED-Target URL (max 8,192 chars)
proxystringautoauto / direct / mobile
wait_selectorstring-CSS selector to wait for before capturing
wait_timeout_msint10000Selector timeout (1,000 - 30,000 ms)
session_idstring-Share cookies across requests

Response

{
  "success": true,
  "status_code": 200,
  "url": "https://www.nike.com",
  "body": "<!DOCTYPE html>...",
  "body_len": 142857,
  "timing": {
    "total_ms": 62,
    "full_access": false,
    "cache_hit": true
  },
  "cost_credits": 1,
  "headers": { "content-type": "text/html" }
}
Failed requests return "cost_credits": 0. You are never charged for failures.

POST /v1/agent/browse

AI agent-friendly endpoint. Returns clean text, markdown, or html instead of raw page source.

Additional Parameters

NameTypeDefaultDescription
extractstringtexttext / markdown / html
selectorstring-CSS selector to extract specific section
readabilitybooltrueApply Readability to extract main content. Set false for raw full-page output
auto_linksboolfalseExtract all links from the page

Response

{
  "success": true,
  "url": "https://news.ycombinator.com",
  "content": "# Hacker News\n\n1. Show HN: ...",
  "content_len": 4521,
  "extract_mode": "markdown",
  "links": ["https://example.com/article1", "..."],
  "timing": { "total_ms": 251, "cache_hit": true },
  "cost_credits": 1
}

POST /v1/flaresolverr

Drop-in replacement for FlareSolverr v2 with broader WAF bypass coverage. Change the URL in Prowlarr/Sonarr/Radarr settings — nothing else.

{
  "cmd": "request.get",
  "url": "https://example.com",
  "maxTimeout": 60000
}

Supported commands: request.get, request.post

GET /v1/credits

Check remaining credits and tier info.

{
  "credits_remaining": 850,
  "tier": "free",
  "rate_limit": 20
}

GET /v1/pricing

Public endpoint. No authentication required. Returns current pricing info.

GET /health

Health check. Returns basic service status.

{
  "status": "ok",
  "version": "0.1.0"
}

Proxy Modes

ModeBehaviorSpeedBest For
autoAutomatically chooses the best available route60ms - 3.7sDefault. Most use cases
directUses the direct route only37 - 60msSpeed-critical, low-friction sites
mobileUses the managed compatibility route700 - 900msSites that prefer compatibility over speed

Error Codes

StatusErrorDescription
400bad_requestInvalid URL or parameters
400domain_blockedBlocked domain (see AUP)
401unauthorizedMissing or invalid API key
403suspendedAPI key suspended
413payload_too_largeResponse exceeds 10MB
429rate_limit_exceededToo many requests per minute
429daily_limit_exceededDaily request quota reached (free: 200/day)
429concurrent_limitToo many concurrent requests — retry shortly
429insufficient_creditsNo credits remaining — contact [email protected] for more
500access_failedThe access attempt could not be completed
502bad_gatewayUpstream connection failed

Rate Limits

Rate limits are per API key. Exceeding any limit returns HTTP 429.

TierPer MinutePer DayConcurrent Requests
Free (beta)20/min200/dayLimited

Concurrent Requests — concurrent request limits apply per tier. Cached responses are not affected by this limit.

Free during beta · Paid tiers coming Q3 2026 · Need more? Contact [email protected]

Restricted Domains

Requests to the following domains are blocked and return HTTP 400 with type: "domain_blocked". This policy protects against abuse and aligns with industry-standard acceptable use practices.

CategoryDomainsReason
Ticket platformsticketmaster.com, eventbrite.com, stubhub.com, axs.comAutomated ticket purchasing is prohibited
Email servicesoutlook.com, outlook.live.com, yahoo.com, mail.yahoo.comLogin-gated data / account access
Financialpaypal.com, chase.com, bankofamerica.com, wellsfargo.com, binance.com, coinbase.comFinancial service abuse prevention
Streamingnetflix.com, disneyplus.com, spotify.com, twitch.tvLogin-gated content
Gamingsteampowered.com, playstation.comLogin-gated / purchase automation
Classifiedscraigslist.org, craigslist.comAutomated posting / spam prevention
Social (login)linkedin.comLogin-gated profile data

Subdomains are automatically included (e.g., blocking paypal.com also blocks www.paypal.com). This list may be updated without notice. If your legitimate use case requires access to a restricted domain, contact [email protected].

Tips

First request is slow (3-10s) because the service bypasses WAF challenges and establishes a session on the first visit. Subsequent requests reuse the cached session and complete in 50-250ms.
Use wait_selector for JavaScript-heavy SPAs that need time to render content.
Use extract: "markdown" in /v1/agent/browse for the cleanest LLM-ready output.
proxy: "direct" is ~10x faster than mobile, while auto balances speed and compatibility automatically.