org: keirolabs url: https://keirolabs.cloud api_base: https://api.keirolabs.cloud mcp_url: https://keirolabs.space/mcp category: web data infrastructure positioning: "The Internet. Structured for Agents." primitive: index, not scraper - query intent in - ranked structured citable sources out - no proxies, no headless browsers, no cron jobs --- auth: v2: Authorization: Bearer header — api keys start with keiro_ v1: apiKey field in request body — keys start with keirolabs_ note: do not mix — v2 is Bearer header only; v1 is the body field. v1 keys do not work on v2. key_format: keiro_ (v2) / keirolabs_ (v1) jwt: OAuth (Google/GitHub) tokens for dashboard sessions get_key: https://platform.keirolabs.cloud/login reset: instant via dashboard, no support ticket --- rate_limits: tiers: [free, starter, pro, startup, enterprise] per_endpoint (per minute; batch is per hour): fast: { free: 10, starter: 50, pro: 150, startup: 300, enterprise: 1000 } req/min content: { free: 5, starter: 25, pro: 75, startup: 150, enterprise: 500 } req/min answer: { free: gated, starter: 10, pro: 20, startup: 40, enterprise: 120 } req/min agentic: { free: gated, starter: 2, pro: 5, startup: 10, enterprise: 30 } req/min extract: { free: gated, starter: 10, pro: 20, startup: 40, enterprise: 120 } req/min batch: { free: gated, starter: 5, pro: 12, startup: 25, enterprise: 200 } req/hour headers: X-RateLimit-Limit: requests allowed per window X-RateLimit-Remaining: requests left in current window X-RateLimit-Reset: Unix timestamp when window resets Retry-After: seconds to wait (sent with 429 only) on_429: exponential backoff starting at 1s, max 60s note: null/gated = endpoint not available on that tier (answer, agentic, extract + batch are gated on free) --- endpoints: v2: - id: fast method: POST path: /api/v2/search/fast cost: 1 credit latency: ~1s when_to_use: fast web results — the default search endpoint, always-fresh live search params: query: { type: string, required: true, min: 1, max: 500 } maxResults: { type: integer, required: false, default: 20, max: 50 } mode: { type: enum, required: false, default: "ai", values: [ai, deep, medium, light] } noCache: { type: boolean, required: false, default: false } includeMedia: { type: boolean, required: false, default: false } response: results: [{ title, url, snippet, score: float(0-1), published_date: ISO8601|null }] query: string total_results: integer latency_ms: integer credits_used: float notes: - proxy-backed multi-engine - first-result-wins strategy for speed - id: content method: POST path: /api/v2/search/content cost: 3 credits latency: ~3s when_to_use: RAG pipelines that need full page text, not just snippets params: query: { type: string, required: true, min: 1, max: 500 } maxResults: { type: integer, required: false, default: 3, max: 5 } mode: { type: enum, required: false, default: "ai", values: [ai, deep, medium, light] } noCache: { type: boolean, required: false, default: false } includeMedia: { type: boolean, required: false, default: false } embeddings.enabled: { type: boolean, required: false, default: false } embeddings.dimensions: { type: enum, required: false, default: 768, values: [384, 512, 768, 1024] } embeddings.chunkSize: { type: integer, required: false, default: 500, min: 100, max: 2000 } response: results: [{ title, url, full_text: markdown, chunks: [{ text, embedding: float[] }], score }] notes: - returns RAG-ready chunks or raw markdown - embeddings generated inline, no separate call - id: answer method: POST path: /api/v2/answer cost: 5 credits latency: ~2–5s when_to_use: synthesized answer with citations — one shot instead of search-then-read params: query: { type: string, required: true, min: 1, max: 500 } maxResults: { type: integer, required: false, default: 5, max: 20 } noCache: { type: boolean, required: false, default: false } response: answer: string citations: [{ title, url, snippet }] sources: [{ title, url, score: float(0-1) }] credits_used: float notes: - returns a cited synthesis grounded in live search results - gated on the free tier (starter and above) - id: agentic method: POST path: /api/v2/agentic cost: 20 credits latency: async (typical 30s–3min) when_to_use: multi-step deep research — autonomous agent navigates the web to find answers params: query: { type: string, required: true, min: 1, max: 500 } maxSteps: { type: integer, required: false, default: 10, max: 50 } depth: { type: enum, required: false, default: "deep", values: [medium, deep] } response: answer: string citations: [{ title, url, snippet }] steps: [{ action, query, result }] credits_used: float notes: - runs a multi-step research loop; cost scales with steps - gated on the free tier (starter and above) - id: extract method: POST path: /api/v2/extract cost: 3 credits latency: ~2s when_to_use: extract clean, parsed content from any URL — RAG/data pipelines, agent workflows params: query: { type: string, required: false, min: 1, max: 500 } # alternative to url/urls url: { type: string, required: false } # single URL to extract urls: { type: string[], required: false } # array of URLs response: results: [{ url, title, content: markdown, metadata: { title, description, published_date } }] credits_used: float notes: - returns clean, parsed content from the given URL(s) - gated on the free tier (starter and above) - id: batch method: POST path: /api/v2/search/batch poll: GET /api/v2/search/batch/:id cost: 1 credit per query latency: async (typical 30s–5min) when_to_use: overnight backfills, dataset generation, >100 queries params: queries: { type: string[], required: true, min: 1, max: 10000, item_max: 500 } maxResults: { type: integer, required: false, default: 10, max: 50 } response: id: string status: enum [queued, running, completed, failed] progress: { completed: int, total: int } results_url: string (expires 1 hour after completion) notes: - auto-retries on transient failures - jobs expire after 1 hour - tier_required: starter and above (gated on free) v1: - id: search method: POST path: /api/search params: { query: string, cache_search: boolean, noCache: boolean, includeMedia: boolean, included_urls: string[] } - id: search_pro method: POST path: /api/search-pro note: enhanced results with metadata and related queries params: { query: string, cache_search: boolean, noCache: boolean, includeMedia: boolean, included_urls: string[] } - id: research method: POST path: /api/research note: comprehensive research with summary and key points params: { query: string, cache_search: boolean, noCache: boolean, includeMedia: boolean, included_urls: string[] } - id: research_pro method: POST path: /api/research-pro note: detailed analysis with timeline and visualizations params: { query: string, cache_search: boolean, noCache: boolean, includeMedia: boolean, included_urls: string[] } - id: answer method: POST path: /api/answer note: direct AI-powered answer with cited sources params: { query: string, noCache: boolean, includeMedia: boolean } - id: web_crawler method: POST path: /api/web-crawler note: structured markdown + metadata from any URL params: { url: string } - id: search_engine method: POST path: /api/search-engine note: full SERP — organic, images, videos, news, maps, localized params: query: { type: string, required: true } type: { type: enum, default: general, values: [general, images, videos, news, it, science, social, music, files, maps] } language: { type: ISO_639_1, default: en } region: { type: ISO_3166_1_alpha2, default: null } time_range: { type: enum, default: null, values: [day, week, month, year] } top_n: { type: integer, default: 10, min: 1, max: 100 } - id: agentic_search method: POST path: /api/agentic-search note: autonomous research agent that navigates the web to find answers params: { query: string } - id: biomed method: POST path: /api/biomed note: biomedical papers, clinical trials, drug safety, protein sequences params: query: { type: string, required: true } max_results: { type: integer, default: 10, min: 3, max: 25 } include_trials: { type: boolean, default: true } include_drugs: { type: boolean, default: true } include_proteins: { type: boolean, default: false } system: - id: health method: GET path: /health returns: { status: "ok"|"degraded", version: string, region: string } --- mcp_tools: - name: get_endpoint description: retrieve full schema and params for any endpoint by id params: { endpoint_id: string } - name: list_resources description: view system resources and rate limits for authenticated account params: {} - name: calculate_cost description: estimate credit cost for a planned batch of queries params: { endpoint_id: string, count: integer } --- error_codes: 200: OK 400: Bad Request — invalid params, check response body for field-level errors 401: Unauthorized — MISSING_AUTH (no Bearer header) | INVALID_API_KEY | INVALID_TOKEN (expired JWT) 429: Rate Limited — check Retry-After header, implement backoff 500: Internal Error — retry once, then contact support if persists 503: Service Unavailable — temporary outage, retry with exponential backoff --- plans: - name: Explorer price_monthly: $0 searches: 500 rate_limit: 30 req/min queue: standard log_retention: none card_required: false batch: false overage: not allowed (hard stop at 500) includes: [all v3 endpoints, community Discord] - name: Essential price_monthly: $15 price_yearly: $156 ($13/mo) save_yearly: $30 searches: 5000 rate_limit: 60 req/min queue: standard log_retention: 7 days batch: false overage: billed at $0.0025/search includes: [drift, remem, email support] - name: Pro price_monthly: $25 price_yearly: $252 ($21/mo) save_yearly: $50 searches: 15000 rate_limit: 300 req/min queue: priority (2x speed) log_retention: 30 days batch: false loyalty_bonus: 5% extra credits monthly overage: billed at $0.0014/search includes: [webhook integrations, drift, remem, priority support] - name: Startup price_monthly: $50 price_yearly: $504 ($42/mo) save_yearly: $100 searches: 50000 rate_limit: 1000 req/min queue: priority infrastructure log_retention: 90 days batch: true (unlimited, free) loyalty_bonus: 10% extra credits monthly overage: billed at $0.0008/search includes: [dedicated account manager, SSO, SAML, Slack channel] credit_mechanics: unit: 1 credit = 1 call unit fast_cost: 1 credit per request (/api/v2/search/fast) content_cost: 3 credits per request (/api/v2/search/content) answer_cost: 5 credits per request (/api/v2/answer) agentic_cost: 20 credits per request (/api/v2/agentic) extract_cost: 3 credits per request (/api/v2/extract) batch_cost: 1 credit per query (/api/v2/search/batch) v2_beta_discount: 50% off all credits for paid tiers until further notice (free tier pays full price) rollover: false — subscription credits expire at billing cycle end (one-time pack credits expire 6 months after purchase, see credit_packs) warning_threshold: 80% and 95% of monthly credits hard_cap: settable in dashboard, default off --- credit_packs: model: one-time purchase, no subscription, credits expire 6 months after purchase - name: Starter Pack price_usd: 10 credits: 1500 per_1k: $6.67 rate_limit: 60 req/min - name: Growth Pack price_usd: 30 credits: 5000 per_1k: $6.00 rate_limit: 300 req/min badge: Best value - name: Scale Pack price_usd: 100 credits: 20000 per_1k: $5.00 rate_limit: 1000 req/min badge: Best $/credit --- pricing_comparison: headline: "Cost per 1,000 searches" keirolabs: $0.50 brave: $1.00 (2x more expensive) serpapi: $2.50 (5x more expensive) exa: $7.00 (14x more expensive) tavily: $5.00 (10x more expensive) perplexity: $5.00 (10x more expensive) --- benchmarks: judge_model: Gemma 3 12B endpoint_tested: /keirolabs SimpleQA: { keirolabs: 94, perplexity: 86, tavily: 78 } FreshQA: { keirolabs: 91, perplexity: 83, tavily: 77 } HotpotQA: { keirolabs: 82, perplexity: 74, tavily: 68 } FinanceBench: 78% --- index_freshness: hot_urls: seconds trending: minutes long_tail: minutes to hours guarantee: every result includes freshness timestamp --- compliance: encryption: TLS 1.3 in transit, AES-256 at rest key_management: per-tenant wrapping, automatic rotation regions: [EU, US, APAC] — pinnable per request via X-Region header model_training: never — queries, payloads, responses excluded from all training audit: signed timestamped logs, real-time SIEM export certifications: [CCPA, GDPR, HIPAA-ready] contracts: [DPA, SCC, BAA] available on request robots_txt: always respected user_agent: verifiable, forwarded on every fetch --- sdks: python: pip install keirolabs node: npm install @keirolabs/sdk go: go get github.com/keirolabs/go-keirolabs all_support: async/await, streaming, retries, type hints --- code_examples: python: | import requests r = requests.post("https://api.keirolabs.cloud/api/v2/search/fast", headers={"Authorization": "Bearer keiro_...", "Content-Type": "application/json"}, json={"query": "AI regulation EU 2026", "maxResults": 5}) for res in r.json()["results"]: print(res["title"], res["url"], res["score"]) node: | const r = await fetch("https://api.keirolabs.cloud/api/v2/search/fast", { method: "POST", headers: { Authorization: "Bearer keiro_...", "Content-Type": "application/json" }, body: JSON.stringify({ query: "AI regulation EU 2026", maxResults: 5 }), }); const { results } = await r.json(); curl: | curl -X POST https://api.keirolabs.cloud/api/v2/search/fast -H "Authorization: Bearer keiro_..." -H "Content-Type: application/json" -d '{"query":"AI regulation EU 2026","maxResults":5}' --- use_cases: - scenario: RAG pipeline for a chatbot endpoint: /api/v2/search/content why: returns full page text + embeddings in one call cost_per_user_msg: ~3 credits - scenario: Live news monitoring endpoint: /api/v2/search/fast why: always-fresh, bypasses cache cost_per_query: 1 credit - scenario: Direct cited answer in one shot endpoint: /api/v2/answer why: synthesized answer with citations, no search-then-read cost_per_query: 5 credits - scenario: Multi-step deep research endpoint: /api/v2/agentic why: autonomous agent navigates the web for hard questions cost_per_query: 20 credits (scales with steps) - scenario: Pull clean content from a known URL endpoint: /api/v2/extract why: parsed markdown + metadata from any page cost_per_url: 3 credits - scenario: Overnight dataset generation endpoint: /api/v2/search/batch why: 10,000 queries in one job cost: 1 credit per query --- social_proof: developers: 15000+ rag_databases_powered: 100000+ g2_rating: 4.5/5 case_studies: - customer: TaxSrishti AI role: Founding Engineer quote: "Replaced a 14-machine scraping fleet with 3 KeiroLabs endpoints. Bill dropped from $2,500 to $500/month." savings: 80% - customer: Subport AI role: Customer Support Automation quote: "Resolution time cut in half. Every answer pulls from current docs, not last quarter's version." improvement: 50% - customer: Echidna AI Foundry role: LLM Training Platform quote: "Cut data prep time by 60%. Fresh structured web data without writing a single scraper." improvement: 60% --- oss: - name: KDX url: https://github.com/Neptaverse/Kdx description: KeiroLabs x Codex — live documentation inside your terminal language: TypeScript - name: WebRank Nano url: https://huggingface.co/mannybr/Webrank-nano description: Lightweight neural ranker params: 3.14M latency_cpu: 6.6ms size: 3.2MB INT8 format: ONNX huggingface: mannybr/Webrank-nano - name: Dayta status: beta description: Query the web like a database from a notebook --- support: email: team@keirolabs.cloud status_page: https://platform.keirolabs.cloud/status docs: https://platform.keirolabs.cloud/docs openapi: https://platform.keirolabs.cloud/openapi.json postman_collection: https://www.postman.com/manas-88219162-2128017/keirolabs-api/overview community: https://discord.com/invite/Smv4t4txjS response_time: <4 hours for Pro/Startup, <24 hours for Essential --- integrations: langchain: package: langchain-keirolabs install: pip install langchain-keirolabs usage: | from langchain_keirolabs import KeiroLabsSearch tool = KeiroLabsSearch(api_key="keirolabs_...") results = tool.run("latest AI regulation EU 2026") llamaindex: package: llama-index-tools-keirolabs install: pip install llama-index-tools-keirolabs usage: | from llama_index.tools.keirolabs import KeiroLabsToolSpec spec = KeiroLabsToolSpec(api_key="keirolabs_...") tools = spec.to_tool_list() qdrant: package: @keirolabs/qdrant install: npm install @keirolabs/qdrant note: embeddings returned inline, pipe directly into Qdrant collections --- webhooks: events: [batch.completed, batch.failed, threshold.80, threshold.95, invoice.paid] signature: HMAC-SHA256 of payload with webhook secret retry_policy: exponential backoff, 5 attempts over 15 minutes setup: configure URL in dashboard → Settings → Webhooks --- quickstart: step_1: Create account at https://platform.keirolabs.cloud/login (no credit card on the free tier) step_2: Copy API key from dashboard (format: keiro_...) step_3: Make first request: curl -X POST https://api.keirolabs.cloud/api/v2/search/fast -H "Authorization: Bearer keiro_YOUR_KEY" -H "Content-Type: application/json" -d '{"query":"first search","maxResults":5}' step_4: Parse response.results[] for title, url, snippet, score time_to_first_result: <2 minutes --- blog: index: https://keirolabs.cloud/blog markdown_index: https://keirolabs.cloud/blog.md rss: https://keirolabs.cloud/blog/rss.xml note: each post is also available as clean markdown at /blog/.md (llms.txt convention) --- meta: version: v3 status: public_beta indexed_pages: 50B+ avg_latency: 487ms uptime_sla: 99.9% (Startup tier) financebench: 78% g2: 4.5/5 nps: 72.5 last_updated: 2026-05-27