Auto Extract (BETA)
POST /v1/search, the per-surface alias, and batch items now acceptextract: trueorextract: { targets: [...] }for answer-derived brand mention extraction.evidence.mentions.items[]now reportsbrand,domain,mentioned,position,sentiment,linked,target,sourceIds, andsnippet. Pinned targets remain visible when absent; no result is fabricated.- Auto Extract costs 0 credits during BETA.
extraction_failedandextraction_skippedwarnings report extraction-only degradation while the capture still completes normally.
- Scheduled query subscriptions save a query, surfaces, regions, extraction settings, cadence, and optional webhook. Six endpoints cover create, list, get, update, soft-cancel, and cursor-paginated run history.
- Plans enforce active-watch ceilings and minimum intervals. Three consecutive insufficient-credit skips automatically pause a watch; resuming clears the pause reason and schedules the next run from the current time.
- Creating a watch is free. Each dispatched run bills per surface × region like a normal async search under the same success-only billing; skipped runs cost nothing.
https://api.aisearchapi.dev/mcpprovides stateless Streamable HTTP MCP with API-key authentication.- Ten tools cover search, jobs, surfaces, usage, watches, and watch run history with the same auth, credits, tenancy, and errors as the REST API.
Initial public release.The first public version of the AI Search API is here. Capture what the live AI apps actually show — browser-first — and parse every surface with one shape.Search
POST /v1/search— sync by default for a single surface with no webhook (one200with the finished result inline). Multi-surface requests, requests with awebhook, or?mode=asyncfan out durably:202 { jobId, status: "processing", children: [...] }, with one child per surface × region.- Force the inline path with
?mode=syncor thePrefer: wait=30header; simplify the shape with?view=flat. - Alias
POST /v1/search/:surface(for example/v1/search/chatgpt) that acceptsprompt(alias ofquery) and a flatcountry. POST /v1/search/batch— up to 500 independent items, validated per item, with an atomic whole-batch credit reservation.
- Live at launch:
chatgpt,claude,perplexity,copilot,google_ai_overview,google_ai_mode,google_search, andgoogle_news. The API always auto-routes each surface to its best available capture path. geminiis in the enum but has no v1 capture path yet (submitting it returns a422).GET /v1/surfaces— live capability matrix: every surface and its current status.
- The canonical Envelope normalizes every surface into the same four sections (
job,provenance,answer, andevidence), so you write one parser and it works everywhere. answer.markdownis always populated, alongsideanswer.textandanswer.blocks[].- Provenance on every capture:
model,webSearch,surfacePresent,region, and a singleschemaVersionstamp — lane-free, with no internal driver or normalizer versions exposed. - Opt-in proof-of-page: request
include.html: trueon a consumer-UI (scrape) capture to get a top-levelhtmlURL, fetched viaGET /v1/artifacts/:key. The verbatim upstream capture itself is internal and is not customer-fetchable.
GET /v1/jobs/:id— poll a parent (rollup plus children) or fetch a child Envelope by its dotted three-segment id (for examplejob_8t2q.chatgpt.us).GET /v1/jobs(list, cursor-paginated) andPOST /v1/jobs/:id/cancel.
- HMAC-SHA256-signed delivery (over the raw body bytes,
X-AISearch-Signatureheader) viawebhook: { url, secret }, with SSRF-guarded destinations. Omitsecretto sign with your account’s managedwhsec_secret.
- Per-request
regions: [{ country, state?, city?, language? }](ISO-3166 alpha-2 country; omitted means one untargetedGLOBALcapture; at most 10 regions per request). provenance.regionreportsrequestedvseffectivewhen a region can’t be honored exactly.GET /v1/regionsfor discovery.
- Safe retries with an
idempotencyKeybody field — same key + same body replays the original job (Idempotent-Replayed: true); a different body returns409.
- One flat error envelope everywhere:
{ code, error, request_id, docs_url }, withX-Request-IdandX-AISearch-Versionon every response and liveX-RateLimit-*/X-Concurrency-*admission headers on submits. GET /v1/usage(per-(surface, region)ledger + balance),GET /v1/health, andGET /v1/async/statusfor an inflight snapshot of your key.- Strict request validation. Unknown top-level fields on a search body are rejected with
400 VALIDATION_FAILED(named in the message), not silently dropped;queryis capped at 2000 characters (422 QUERY_TOO_LONG). - Deep health probe.
GET /v1/health?probe=deepruns live round-trips against Postgres, D1, and R2 and returns503 degradedif any dependency is down. This is the endpoint uptime monitors should watch.
- Credit-based billing, charged only on successful captures, with 500 free credits to start.