Gemini is one of the surfaces values you can request from POST /v1/search. Every capture comes from the live Gemini web app in a real browser, then normalizes into the same canonical Envelope — so the parser you write for Gemini is the parser you use for every other surface.
Enum value: gemini · Credits per capture: 4 (charged only on success).

What Gemini returns

Gemini typically populates:

answer

The synthesized reply. answer.markdown is always populated; answer.blocks[] carry referenceIds back into evidence.sources.

evidence.sources

The pages Gemini drew on, with role, cited, charRanges, and quote.

evidence.mentions

Entity strings referenced in the answer.
Other evidence collections (shopping, ads, fanOut) may be present or empty depending on the query. Read whichever fields you need — the shape never changes across surfaces.

Request a Gemini capture

Add gemini to surfaces. By default POST /v1/search is async and returns a 202 with a parent job plus one child per surface × region.
curl -X POST https://api.aisearchapi.dev/v1/search \
  -H "Authorization: Bearer $AISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "best noise-canceling headphones for travel",
    "surfaces": ["gemini"],
    "regions": [{ "country": "US" }]
  }'
The 202 gives you a parent job and its children:
202 Accepted
{
  "jobId": "job_8t2q",
  "status": "processing",
  "children": ["job_8t2q.gemini.us"]
}
Poll GET /v1/jobs/:id with the child id (job_8t2q.gemini.us) to fetch the Envelope once it’s ready. See Asynchronous jobs for the full polling and webhook flow.

Get it inline (sync)

To wait for a single Gemini capture and receive the Envelope in the response body, use ?mode=sync (or the header Prefer: wait) with exactly one surface.
curl -X POST "https://api.aisearchapi.dev/v1/search?mode=sync" \
  -H "Authorization: Bearer $AISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "best noise-canceling headphones for travel",
    "surfaces": ["gemini"],
    "regions": [{ "country": "US" }]
  }'
Sync returns a 200 with the Envelope inline — no polling. See Synchronous requests for concurrency budget details.

Alias route

POST /v1/search/gemini is sync-by-default and accepts prompt (an alias of query) plus a flat country. Handy when you’re targeting a single surface.
curl -X POST https://api.aisearchapi.dev/v1/search/gemini \
  -H "Authorization: Bearer $AISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "best noise-canceling headphones for travel",
    "country": "US"
  }'

Trimmed Envelope

A Gemini child Envelope, abbreviated to the fields Gemini commonly fills:
Envelope (gemini)
{
  "job": {
    "id": "job_8t2q.gemini.us",
    "surface": "gemini",
    "status": "completed"
  },
  "provenance": {
    "model": {
      "providerId": "google-gemini",
      "observedLabel": "Gemini",
      "inferred": false,
      "confidence": 0.98
    },
    "region": {
      "requested": { "country": "US" },
      "effective": { "country": "US" }
    },
    "surfacePresent": true
  },
  "answer": {
    "markdown": "For travel, the **Sony WH-1000XM5** leads on active noise cancellation, while the **Bose QuietComfort Ultra** is favored for comfort on long flights...",
    "blocks": [
      {
        "type": "paragraph",
        "text": "For travel, the Sony WH-1000XM5 leads on active noise cancellation...",
        "referenceIds": ["s1", "s2"]
      }
    ]
  },
  "evidence": {
    "sources": [
      {
        "id": "s1",
        "url": "https://example.com/headphones-review",
        "title": "Best Travel Headphones",
        "role": "primary",
        "cited": true,
        "charRanges": [[0, 42]],
        "quote": "The WH-1000XM5 offers class-leading noise cancellation."
      },
      {
        "id": "s2",
        "url": "https://example.com/qc-ultra",
        "title": "QuietComfort Ultra Review",
        "role": "supporting",
        "cited": true
      }
    ],
    "mentions": ["Sony WH-1000XM5", "Bose QuietComfort Ultra"]
  }
}
If provenance.surfacePresent is false and the child carries a surface_absent warning, Gemini returned nothing for this query. The job still completes with an empty answer — no credits are charged.

Working with the answer

answer.markdown is always populated, so it’s the safest field to render. Use answer.blocks[] when you need structure: each block’s referenceIds map to evidence.sources[].id, letting you attach citations inline. For the full rendering contract, see Output formats.

Regions

Target Gemini per country and city. One child is produced per surface × region.

Search endpoint

All body fields, priority, webhooks, and idempotency.