POST /v1/search
Search-engine results as structured JSON. No session is needed: each search runs on a browser of its own and tries the engines in order until one answers. Auth: Bearer API key. Request:
Response:
The default chain,
{"query": "web scraping with a headless browser", "count": 5}:
{"query": "web scraping with a headless browser", "count": 3, "engine": "google"}, with published dates (trimmed to the results and the attempt record):
reason: "timeout". The unpinned chain can try the next engine. Use async_mode: true when the full search may exceed the synchronous response deadline, then poll the returned job id.
An unknown engine:
Notes:
- Timing: the default chain answers in 1 to 2 seconds; a Google pin can take around 9 seconds.
- Cache: results are cached for 120 seconds per engine, query, region, offset, count and
collapse_domains, andfresh: truebypasses it. Do not depend on a repeat being served from cache or being identical. - Billing for credit-funded accounts: an uncached search incurs the session charge and browser time, plus one action on
status: "ok"(including zero results). A successful cached response costs one action without a new browser charge. Developer and Team have no per-call wallet debits. - Operator queries (
site:,inurl:,OR, …) that return nothing come back asstatus: "empty"withreason: "unsupported_operators", theoperatorsseen and asuggestionrewrite, and are not charged the action.
GET /v1/search/engines
The enginesPOST /v1/search accepts and the order an unpinned search tries them.
Auth: Bearer API key. No body.
GET /v1/search/regions
Countries a search can be run from, with the routes that serve each. Auth: Bearer API key. No body.available is true, order lists the route kinds best first, and regions maps each country code to its routes. Until then region on POST /v1/search answers 503.