---
title: "Track AI Mode answers"
method: POST
path: "/v1/monitor/aimode"
---

# Track AI Mode answers

`POST /v1/monitor/aimode`

## Request

- Base URL: `https://api.answerline.dev`
- URL: `https://api.answerline.dev/v1/monitor/aimode`
- Auth: HTTP bearer

Get structured output from AI Mode on your brand, your products or any other topic, in many regions

## Request body

- union
  - object
    - `prompt` string, required: Prompt submitted to AI Mode
    - `country` string, required: Code of the country or region used to localize the response
    - `gl` string: Google's own name for the result-geography parameter, usable in place of `country`. Takes ISO 3166-1 alpha-2 codes, as `country` does, in upper or lower case (`us` or `US`), and the country has to be one this endpoint supports (list them with `GET /v1/countries`). Send either `country` or `gl`; if both are sent with differing values, the request fails with `400`.
    - `hl` string: Interface language, in the format of Google's `hl` parameter (for example `en`, `de`, `pt-BR`). Case-insensitive free text; Google defines which codes exist. Takes precedence over the language Answerline infers from the country, which lets interface language and result geography differ.
    - `location` string: Location name in Google's canonical form, used for geo-targeted results, written comma-separated as 'City,Region,Country' (https://developers.google.com/google-ads/api/reference/data/geotargets lists every supported location, ~100,000 in all). Combine it with 'country' to target a specific city. Cannot be combined with 'uule'; send only one of the two.
    - `uule` string: A ready-made Google UULE string for exact geo-targeting, in the location-name form (starting w+CAIQICI); the coordinate form (a+) is refused with a 400. Supply it when you already have an encoded UULE rather than a location name. Cannot be sent together with 'location' — pass only one of the two.
    - `device` 'desktop' | 'mobile': Type of device the results are fetched for
    - `include` object: Flags that add extra output formats to the response (optional)
      - `html` boolean: Not available for AI Mode, so `true` is refused with a validation error.
      - `markdown` boolean: Add a markdown version of the response to the result
      - `expandProducts` boolean: Look up merchant offers for the response's product clusters and return them in 'result.productResults'. Clusters found in both inline products and shopping cards count once, and no more than 6 are expanded per request. Each returned cluster adds a per-cluster charge. Disabled by default.
      - `googleGoto` boolean: Has had no effect since 8th September 2026. Each redirect link is now always returned as `redirectLink` next to its target, so you get both without setting this flag. Requests that still include it are handled as though it were omitted.
      - `rawWire` boolean: Return the engine's upstream answer as received in result.rawWire: the answer stream, or the provider's answer record, without the provider's billing data and account traces. Free. See https://answerline.dev/docs/output-formats#raw-wire
  - object
    - `prompt` string, required: Prompt submitted to AI Mode
    - `country` string: Code of the country or region used to localize the response
    - `gl` string, required: Google's own name for the result-geography parameter, usable in place of `country`. Takes ISO 3166-1 alpha-2 codes, as `country` does, in upper or lower case (`us` or `US`), and the country has to be one this endpoint supports (list them with `GET /v1/countries`). Send either `country` or `gl`; if both are sent with differing values, the request fails with `400`.
    - `hl` string: Interface language, in the format of Google's `hl` parameter (for example `en`, `de`, `pt-BR`). Case-insensitive free text; Google defines which codes exist. Takes precedence over the language Answerline infers from the country, which lets interface language and result geography differ.
    - `location` string: Location name in Google's canonical form, used for geo-targeted results, written comma-separated as 'City,Region,Country' (https://developers.google.com/google-ads/api/reference/data/geotargets lists every supported location, ~100,000 in all). Combine it with 'country' to target a specific city. Cannot be combined with 'uule'; send only one of the two.
    - `uule` string: A ready-made Google UULE string for exact geo-targeting, in the location-name form (starting w+CAIQICI); the coordinate form (a+) is refused with a 400. Supply it when you already have an encoded UULE rather than a location name. Cannot be sent together with 'location' — pass only one of the two.
    - `device` 'desktop' | 'mobile': Type of device the results are fetched for
    - `include` object: Flags that add extra output formats to the response (optional)
      - `html` boolean: Not available for AI Mode, so `true` is refused with a validation error.
      - `markdown` boolean: Add a markdown version of the response to the result
      - `expandProducts` boolean: Look up merchant offers for the response's product clusters and return them in 'result.productResults'. Clusters found in both inline products and shopping cards count once, and no more than 6 are expanded per request. Each returned cluster adds a per-cluster charge. Disabled by default.
      - `googleGoto` boolean: Has had no effect since 8th September 2026. Each redirect link is now always returned as `redirectLink` next to its target, so you get both without setting this flag. Requests that still include it are handled as though it were omitted.
      - `rawWire` boolean: Return the engine's upstream answer as received in result.rawWire: the answer stream, or the provider's answer record, without the provider's billing data and account traces. Free. See https://answerline.dev/docs/output-formats#raw-wire

## Response `200`

AI Mode monitoring result (success)

- AiModeMonitorResponse
  - `success` boolean, required
  - `result` object, required: Data returned by AI Mode
    - `text` string: Text of the AI Mode answer
    - `html` string, uri: Link to the response's complete HTML.
    - `sources` object[]: Sources the response cites
      - `position` number: Where the source sits in the response, as an index
      - `url` string: Link to the source
      - `label` string: Label shown for this source
      - `description` string: Text describing what the source contains
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `citationPills` object[]: Citation pills that appear inline in the AI Mode answer. Every element pairs one pill with one source: a pill backed by N sources (Google's `[Label +N]` chips) yields N elements with the same `citationPillId`, each holding that source's own `label`, `url` and `domain`. Grouping by `citationPillId` rebuilds the pills. Not present in `result` if the answer has no pills.
      - `label` string, required: Title of this individual source as shown in the sources rail (e.g. `"Best Laptops 2026 — Reuters"`). Empty string if the rail gives no title for it; then identify the source by `domain` / `url`. Entries that share a `citationPillId` each have their own per-source label.
      - `citationPillId` integer, required: One-based number common to every entry that comes from one chip. Grouping on `citationPillId` rebuilds the chip as displayed; each entry's `label` is specific to its source, so it varies inside a chip.
      - `url` string, required: Link straight to the cited source.
      - `domain` string, required: Hostname taken from `url`, useful for grouping and display.
      - `description` string: Source snippet shown in the sources rail, if Google supplies one; omitted when the source has no snippet.
      - `position` integer, required: Index of this source within the sibling `result.sources` array, starting at 1.
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `markdown` string: The AI Mode answer rendered as Markdown (present when include.markdown is true)
    - `places` object[]: Place cards embedded inline in the response
      - `title` string: Place name
      - `link` string, uri: URL that opens the place in Google's viewer
      - `placeId` string: ID of the place in Google Places
      - `index` integer: Index of the place's position in the results
      - `thumbnail` string, uri: Thumbnail image URL for the place
      - `rating` number: Rating in stars (0-5)
      - `reviews` integer: Review count
      - `type` string: Category or type of the place
      - `priceLevel` string: Indicator of the price tier
      - `address` string: Full address
      - `status` string: Operating status
    - `shoppingCards` object[]: Shopping-related product details parsed from the response
      - `title` string: Product title
      - `price` object: Price details in structured form
        - `value` number: Numeric price
        - `currency` string: Currency symbol
        - `raw` string: Price text exactly as the upstream provider returned it (e.g. "$129.99").
      - `store` string: Merchant/store name
      - `rating` number: Product rating
      - `reviews` string: Review count
      - `thumbnail` string, uri: Product image
      - `productLink` string, uri: Link straight to the product
      - `oldPrice` object: Pre-discount price
        - `value` number: Numeric price
        - `currency` string: Currency symbol
        - `raw` string: Price text exactly as the upstream provider returned it (e.g. "$129.99").
      - `snippet` string: Short product description
      - `snippet_links` object[]: Links contained in the product snippet
        - `text` string: Link text
        - `link` string, uri: Link URL
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
      - `position` integer: Index (0-indexed) of the product card inside the shopping carousel.
    - `ads` object: Section of sponsored ads parsed from the response
      - `title` string: Heading of the ads section
      - `ads` object[]: List of sponsored ads
        - `title` string: Title of the advertised product
        - `url` string, uri: Click-through URL of the ad
        - `position` integer: Index of the ad's position
        - `price` object: Price details in structured form
          - `value` number: Numeric price
          - `currency` string: Currency symbol
        - `store` string: Merchant/store name
        - `rating` number: Product rating
        - `reviews` string: Review count
        - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `inlineProducts` object[]: Product cards that appear inside the AI answer text
      - `title` string: Product title
      - `position` integer: Rank starting at 1 over the `inline_products` array, following the order on the page.
      - `price` object: Price details in structured form
        - `value` number: Numeric price
        - `currency` string: Currency symbol
      - `oldPrice` object: Pre-discount price
        - `value` number: Numeric price
        - `currency` string: Currency symbol
      - `store` string: Merchant/store name
      - `thumbnail` string, uri: URL of the product image
      - `productLink` string, uri: Link straight to the product
    - `videos` object[]: Video cards shown inline within the AI response (YouTube for now)
      - `title` string, required: Video title
      - `link` string, uri, required: Canonical watch URL with any timestamp parameters removed
      - `platform` string: Hosting platform read from the byline on the card
      - `channel` string: Name of the channel or uploader
      - `duration` string: Duration text as shown (mm:ss or hh:mm:ss)
      - `thumbnail` string, uri: Publicly accessible thumbnail URL
      - `redirectLink` string: The `/goto` redirect Google used for this link, given in the absolute form that `POST /v1/monitor/google/goto` takes. Only set when Google delivered the link through a redirect; the neighbouring link field contains the destination Answerline reached by following it.
    - `map` object[]: Locations pulled from the response, enriched with GPS coordinates
      - `title` string: Place name
      - `link` string, uri: URL that opens the place in Google's viewer
      - `placeId` string: ID of the place in Google Places
      - `index` integer: Index of the place's position in the results
      - `gps_coordinates` object: The place's geographic coordinates
        - `latitude` number: Latitude coordinate
        - `longitude` number: Longitude coordinate
      - `thumbnail` string, uri: Thumbnail image URL for the place
      - `rating` number: Rating in stars (0-5)
      - `reviews` integer: Review count
      - `type` string: Category or type of the place
      - `address` string: Full address
      - `status` string: Operating status

## Other responses

- `400`: Bad Request - the request failed validation
- `401`: Unauthorized - authentication failed
- `403`: Forbidden - missing permissions or not enough balance
- `404`: Not Found - No such route
- `409`: Conflict - the resource is in a conflicting state
- `429`: Too Many Requests - the request went over a rate limit or concurrency limit, or the service dropped the request because it was overloaded (`SERVICE_OVERLOADED`); that case returns `Retry-After` without any limit headers
- `499`: Client Closed Request - the client cancelled the request
- `500`: Internal Server Error
- `502`: Bad Gateway - an upstream service failed

---

[API](https://skmtc.dev/answerline/apis/answerline-api.md) · [All operations](https://skmtc.dev/answerline/apis/answerline-api/llms.txt) · [OpenAPI document](https://skmtc.dev/answerline/apis/answerline-api/revisions/a9dc35794662?raw)
