Changelog
User-facing changes to the API, the SDKs and the dashboard, newest first. Releases with only internal changes (v1.0.1 and v1.0.2) are left out.
Unreleased
- SDKs: the packages are now called
xdive. Install the Python package withpip install xdive(importxdive, classesXDiveandAsyncXDive) and the JavaScript package withnpm install xdive,pnpm add xdive,yarn add xdiveorbun add xdive(classXDive). They readXDIVE_API_KEYandXDIVE_BASE_URL; the olderCRAWLER_API_KEYandCRAWLER_BASE_URLstill work. - SDKs: every
POSTcarries anIdempotency-Key, reused by each retry, and timeouts and dropped connections are retried safely. - New SDKs for Java (
dev.xdive:xdive), .NET (XDiveon NuGet), PHP (xdive/xdive), Ruby (xdive) and Rust (xdive), with the same methods, typed errors, safe retries and anIdempotency-Keyon every POST. - New Go SDK (
github.com/xdive/xdive-go) and Vite plugin (vite-plugin-xdive), which fetches pages as Markdown at build time and can emit anllms.txt. - Docs for AI agents:
/llms.txt,/llms-full.txt, every docs page as Markdown at/docs/<slug>.md, an OpenAPI 3.1 spec at/openapi.json, drop-inAGENTS.md, Claude skill and Cursor rule files, and the new For AI agents page. - Research: identical requests from the same organization are served from a 10-minute result cache, marked
"cached": trueand not metered;"no_cache": trueforces a new run. - Research: quick mode answers once enough sources have arrived instead of waiting for the slowest page, and runs one follow-up search when its sources do not cover the question.
- Research: two-step questions are answered by first resolving the intermediate entity;
usage.hopsandusage.planreport what was done. - Research: sources that could not be read in time contribute their search snippet, marked
"snippet": true. - Research:
usagereports where the time went (search_ms,read_ms,model_ms), and a run no longer returns an empty answer. - Research:
schemamust be a JSON object. - Search:
search_depth: "advanced"keeps the engines' ranking and adds each result's passages andrelevance_scoreinstead of re-ordering results. - Search:
include_answerhas its own time budget, and a page read for both advanced search and scraping is counted once. - Scrape: a site that the egress proxy provider refuses (typically government and banking sites) returns
403with codeSITE_RESTRICTEDand a plain explanation; crawl pages carryerror_code: "SITE_RESTRICTED". - Self-hosting: an optional egress proxy (
EGRESS_PROXY_URL,EGRESS_PROXY_DOMAINS) for sites that refuse data-centre addresses; proxied pages reportfetch_route: "proxy". - Security: fetches through the egress proxy are checked by the SSRF guard.
- Self-hosting:
REGISTRATION_APPROVAL=requiredholds new sign-ups until a super admin approves them; sign-up answers202and sign-in returnsACCOUNT_PENDING_APPROVALorACCOUNT_REJECTED. - Accounts: rejecting an account ends its sessions and OAuth grants at once and suspends the organizations it alone belongs to.
- Accounts: addresses in
SUPER_ADMIN_EMAILSbecome super admins only after they are verified; sign-in returnsEMAIL_NOT_VERIFIEDuntil then. - Self-hosting:
LLM_MODEL_ROTATION=round_robinspreads requests across the configured models. - Dashboard: fixed header and sidebar, and loading placeholders in place of spinners.
- SDKs: the research result types include
cached,hops, snippet sources and phase timings.
v1.5.0 (2026-10-10)
- New
POST /orgs/{id}/research: answers (quick) and reports (deep) from the web with verified citations, or structureddatafrom a JSON Schema. Also available as an MCP tool. - Search: several engines (Brave and Serper) are queried together and their rankings merged, results are cached, and near-duplicates are removed.
- Search:
search_depth: "advanced"returns each result's relevant passages and arelevance_score;auto_parametersinfers sources and freshness from the query;include_answeradds a short cited answer. - New Python SDK (
xdive, withXDiveandAsyncXDive) and JavaScript SDK (xdive), with LangChain tools and a LlamaIndex reader. - New
GET /whoami: the organization, scopes and plan of an API key, used by the SDKs to find the organization. - New public
GET /statussummary for status pages and monitors. - Language-model calls retry transient failures and fall back to
LLM_FALLBACK_MODELS; a failing search engine is skipped.
v1.4.0 (2026-10-09)
- Crawl status responses carry an
ETag; sending it inIf-None-Matchreturns304while nothing has changed. Running crawls suggest a polling interval withRetry-After: 2. - Synchronous endpoints enforce a per-organization concurrency limit (
429 CONCURRENCY_LIMIT) and per-server capacity (503 SERVER_BUSY), both withRetry-After. - Crawl workers are shared fairly between organizations by plan, and browser-rendered crawls run in their own queue.
- Synchronous scrape is now checked against the page quota and counts one page per successful scrape.
max_agecan accept older cached content as well as require fresher content; simultaneous requests for the same uncached page share one fetch.- Security: the page cache is keyed by request headers as well as URL, so a page fetched with cookies or authorization headers is no longer served to requests sent without them.
- With billing configured,
PUT /orgs/{id}/planonly downgrades tofree; paid plans are activated through checkout.
v1.3.1 (2026-10-09)
- Security: headless Chrome traffic passes through the SSRF guard.
- Unreachable hosts fail fast with a clear error instead of escalating to the browser, and the scrape
502message includes the page's error.
v1.3.0 (2026-10-08)
- MCP clients such as ChatGPT, claude.ai, Claude Code and Codex connect with OAuth 2.1. Connected clients are listed, and can be revoked, under API Keys → Connected apps.
- Breaking: the MCP route with an API key in the URL (
/api/mcp/{key}) is removed. Clients that send headers keep using API keys.
v1.2.1 (2026-10-08)
- Fixed:
POST /api/mcpno longer answers with a301redirect, which broke header-authenticated MCP clients.
v1.2.0 (2026-10-07)
- MCP connectors for ChatGPT and claude.ai, and a new
fetchtool that returns a page's full Markdown. GETandDELETEon the MCP endpoint return405.- Redesigned landing and sign-in pages with light and dark themes.
v1.1.1 (2026-10-07)
- Every default fetch path escalates past WAF bot filters with Chrome TLS impersonation, so protected sites return content instead of
403or404.adaptive_fetch: falsestill sends a single plain request.
v1.1.0 (2026-10-07)
- A public landing page for signed-out visitors.
v1.0.3 (2026-10-07)
- Per-organization requests-per-minute budgets by plan (60, 600 and 6,000) on work-creating endpoints, reported in
X-RateLimit-LimitandX-RateLimit-Remaining. Self-hosted servers can turn them off withORG_RATE_LIMITS=off.
v1.0.0 (2026-10-07)
First release.
- Scrape in many formats (Markdown, HTML, links, text, screenshots, JSON and more), crawl with webhooks, batch scrape, map, extract, llms.txt, document parsing, and web, news and image search.
- Adaptive fetching (plain HTTP, TLS impersonation, headless browser), interactive browser sessions, PII redaction, and zero-data-retention and lockdown modes.
- Organizations, API keys with scopes, expiry and IP allowlists, usage metering with plan quotas, Stripe billing and an audit log.
- Schedules with change monitoring, an MCP server (stdio and Streamable HTTP), the dashboard, and self-hosting with Docker Compose.