Developer Reference
API Docs
All endpoints return JSON. No authentication required for public data endpoints.
Base URL
https://captchaflow.comAll responses include Content-Type: application/json. Errors return { error: string } with an appropriate HTTP status code.
/api/solversList all captcha solvers with metrics.
Example
fetch('/api/solvers').then(r => r.json())/api/solvers/:slugGet a solver by slug with full details and 7-day trend.
Parameters
slugstringSolver identifier (e.g. 2captcha)Example
fetch('/api/solvers/capsolver').then(r => r.json())/api/captchasList all tracked captcha types grouped by provider.
Example
fetch('/api/captchas').then(r => r.json())/api/captchas/:slugGet a captcha type by slug.
Parameters
slugstringCaptcha identifier (e.g. turnstile)Example
fetch('/api/captchas/hcaptcha').then(r => r.json())/api/vendorsList all tracked vendors with current captcha deployment.
Example
fetch('/api/vendors').then(r => r.json())/api/vendors/:slugGet a vendor by slug with captcha history.
Parameters
slugstringVendor identifier (e.g. discord)Example
fetch('/api/vendors/discord').then(r => r.json())/api/timelineGet timeline events in reverse chronological order.
Example
fetch('/api/timeline').then(r => r.json())/api/search?q=Search across solvers, captchas, and vendors.
Parameters
qstringSearch query (min 1 char)Example
fetch('/api/search?q=turnstile').then(r => r.json())/api/matrixGet the full solver × captcha compatibility matrix data.
Example
fetch('/api/matrix').then(r => r.json())/api/searchSemantic web search via SerpAPI (requires SERPAPI_API_KEY).
Parameters
qstringSearch queryExample
fetch('/api/search?q=cloudflare+turnstile+bypass').then(r => r.json())/api/ai-chatAsk the captcha AI assistant a question (requires OPENROUTER_API_KEY).
Parameters
messagestringYour question (max 2000 chars)modelstringModel ID (default: openai/gpt-4o-mini)Example
fetch('/api/ai-chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: 'What is the best captcha solver?' })
}).then(r => r.json())