surfaces: ["copilot"]

The Microsoft Copilot scraper API for the real answer surface.

Copilot fronts Bing’s retrieval stack with a consumer answer UI, and there is no public API that returns what that UI shows. We capture it browser-first: the rendered Copilot answer with its citations inline, as one canonical Envelope.

Credit cost
5 credits / successful capture
Regions
any ISO country
Capture method
capture: browser
POST /v1/search
curl -sS -X POST "https://api.aisearchapi.dev/v1/search" \
  -H "Authorization: Bearer $AISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "best project management software",
    "surfaces": ["copilot"],
    "regions": [{ "country": "US" }, { "country": "DE" }]
  }'
# → 202 { "jobId": "…", "children": ["….copilot.…"] }
# then poll GET /v1/jobs/:childId, or add ?mode=sync for an inline Envelope

What a Copilot capture returns.

One canonical Envelope, the same four sections every surface returns, with the fields Copilot actually populates. Field names below are the contract, not a summary.

answer.text · answer.markdown · answer.blocks

The Copilot answer as rendered, normalized to the same block structure as every other surface.

answer.markdown (inline citations)

Copilot’s inline citations and reference links come through in the answer markdown, ready for your own citation and brand extraction.

provenance

loginState (guest today), surfacePresent, triggerState and requested-vs-effective region, every capture self-describes.

provenance.model

Observed model label with a confidence score, never silently equated with a verified model id.

html (opt-in proof-of-page)

Set include.html:true and the Envelope carries a top-level html URL — a proof-of-page snapshot of the rendered Copilot answer, fetchable at GET /v1/artifacts/{key}. Off by default.

Envelope excerpt, copilot
{
  "job": {
    "id": "job_4b6a913f.copilot.US",
    "surface": "copilot",
    "status": "completed",
    "warnings": []
  },
  "provenance": {
    "loginState": "logged_out",
    "webSearch": { "enabled": true, "known": true },
    "surfacePresent": true,
    "region": { "requested": "US", "effective": "US" }
  },
  "answer": {
    "text": "For project management: Asana, Linear, Jira…",
    "markdown": "For project management: **Asana**, **Linear** [linear.app], Jira…",
    "blocks": [ { "type": "paragraph", "text": "…" } ]
  }
}

Cost and regions, on the record.

Captured live from the real Copilot UI.

Phase-2 surfaces are roadmap, not product. Requesting one returns an honest 422 today. The full picture is on the coverage page.

cost: 5 credits (charged on success only)free tier: 500 credits, pricing
regions:USGBDEFRCAAUINJPBR+ optional city & language

Copilot capture, asked precisely.

How is Copilot captured?

A real stealth-browser session loads the Copilot UI as a guest, submits your prompt, waits for the answer to finish streaming, and normalizes the result, browser render, by default and today.

Is there an official Copilot API you could use instead?

The consumer answer surface, the ranking, citations and presentation your customers actually see, is only observable by rendering the UI, which is what we shipped first.

What does a Copilot capture cost?

Five credits per successful capture, all Envelope fields included, charged only on success. 500 free credits on sign-up.

Which regions are supported?

Any ISO-3166-1 alpha-2 country, optionally narrowed by state, city or language, as structured regions objects (up to 10 per request), one child capture per region, with requested-vs-effective geo recorded in provenance.

What if Copilot shows no answer for my query?

The capture completes truthfully: surfacePresent false, a surface_absent warning, zero credits charged. We never coerce an empty surface into a fake result.