---
title: "Response Schema"
description: "The Answer type every AI engine returns: the answer's text, its citations and sources, cards, mentions and follow-ups."
---

> Every apinoa docs page as markdown: https://apinoa.com/llms.txt (all in one file: https://apinoa.com/llms-full.txt; this API family in one file: https://apinoa.com/docs/answers/llms.txt)

Every engine returns one type, `Answer`. A field means the same thing on every engine.

Optional fields are genuinely optional: **absent means the engine did not say**. A card without `rating` showed
no stars. Times are ISO 8601 in UTC. Money is in decimal major units with an ISO 4217 code. Every object may
carry `ext`, which holds facts only that engine has.

## Answer

| Field | Type | Notes |
|---|---|---|
| `engine` | string | `chatgpt` `gemini` `google-aio` `google-ai-mode` `naver-ai-brief` `naver-ai-tab` |
| `outcome` | string | see below |
| `prompt` | string | the question as asked |
| `askedAt` | string | when it was asked |
| `country` | string | the market it was asked from (`US`, `KR`) |
| `language` | string? | |
| `conversation` | object? | `{id, turn, expiresAt?}`. Pass `id` as `conversation` to ask a follow-up |
| `title` | string? | the conversation's title, where the engine gives one |
| `blocks` | Block[] | the answer as ordered blocks. See below |
| `text` | string | the answer as plain text, rendered from `blocks` |
| `markdown` | string | the answer as markdown, rendered from `blocks` |
| `citations` | Citation[] | which part of `text` cites which sources |
| `sources` | Source[] | every source the engine showed, cited or not |
| `mentions` | Mention[] | brands, products and places the engine itself marked |
| `cards` | Card[] | product, place, video and image cards, ads included |
| `suggestions` | array | `{text, prompt?}`: the follow-up questions the engine offered |
| `results` | Result[]? | the results page around the answer (Google AI Overviews, Naver AI Briefing) |
| `page` | string? | with `include=page`: the answer as a self-contained HTML page |

### Outcome

| Value | Meaning |
|---|---|
| `answered` | the engine answered |
| `noAnswer` | the engine showed no answer for this prompt. Google shows no overview for many searches and Naver no briefing. This is not an error, and the rest of the page (`results`) is still returned |
| `refused` | the engine declined; its own words are in `text` |
| `partial` | the engine stopped early, but some text came back |

### Blocks

`text`, `markdown` and `blocks` are three views of one answer and always agree. A block is one of:

| `type` | Fields |
|---|---|
| `heading` | `level` (1–6), `markdown` |
| `paragraph` `quote` | `markdown` |
| `list` | `ordered`, `items`: `{markdown, depth}[]` |
| `table` | `header`: string[], `rows`: string[][] |
| `code` | `language?`, `text` |
| `cards` | `cards`: indexes into `cards`, where the engine showed them in the answer |
| `rule` | |

## Citation

| Field | Type | Notes |
|---|---|---|
| `start` `end` | integer | a character range of `text`, `[start, end)` |
| `sources` | integer[] | indexes into `sources` |

## Source

| Field | Type | Notes |
|---|---|---|
| `url` | string | |
| `title` `site` `favicon` `image` `snippet` | string? | `site` is the site's display name |
| `publishedAt` | string? | |
| `cited` | boolean | `true` if a citation points at it; `false` if the engine read it without citing it |

## Card

| Field | Type | Notes |
|---|---|---|
| `type` | string | `product` `place` `video` `image` `other` |
| `title` `url` | string? | |
| `image` `thumbnail` | string? | for an image card, `image` is the image itself |
| `width` `height` | integer? | |
| `price` `originalPrice` | object? | `{text, amount?, currency?}`. `text` is printed as shown; `amount` appears only when the text is one clear amount |
| `rating` `reviews` | number? | |
| `merchant` `site` | string? | |
| `badges` | string[]? | the labels on the card, word for word ("Best overall") |
| `address` | string? | |
| `coordinates` | object? | `{lat, lng}` |
| `sponsored` | boolean | an ad. Ads are cards, never a separate list |

## Mention

| Field | Type | Notes |
|---|---|---|
| `name` | string | |
| `kind` | string | `brand` `product` `place` `other` |
| `category` | string? | the engine's own label, word for word |
| `at` | integer? | where in `text` the engine marked it |
| `card` | integer? | the index of its card in `cards`, when the engine showed one |

Mentions are only what the engine marked itself. They are never guessed from the text.

## Result

One result on the results page around the answer.

| Field | Type | Notes |
|---|---|---|
| `position` | integer | 1-based |
| `title` `url` | string | |
| `site` `favicon` `image` `snippet` | string? | |
| `publishedAt` | string? | |
| `breadcrumbs` | string[]? | the path the page prints for the result |
| `sitelinks` | array? | `{title, url}` |

The same `Answer` is the `answer` of a Google search's `aiOverview` item in the
[SERP API](/docs/api-reference/serp/response-schema#resultspage).
