> ## Documentation Index
> Fetch the complete documentation index at: https://docs.querying.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Mecanismos de busca com IA: respostas, citações e campos de resposta

> Cada taskType: qual campo do payload ele lê, o que retorna e quais flags include realmente têm efeito.

`taskType` seleciona o mecanismo. O envelope em volta do resultado é idêntico para todos; o que muda é o objeto
`response` dentro dele.

<Note>
  **Há nove superfícies de resposta disponíveis**: `CHATGPT`, `GEMINI`, `PERPLEXITY`, `BING_COPILOT`, `GOOGLE`,
  `AIMODE`, `BING_SEARCH`, `NAVER_AI_BRIEF` e `NAVER_AI_TAB`. `GOOGLE_SERP` retorna resultados do Google sem o
  AI Overview, `NAVER_SERP` retorna os resultados web do Naver e `REDDIT` retorna posts e comentários do Reddit.
</Note>

## Qual campo do payload cada mecanismo lê

A validação aceita `prompt` ou `query`, e cada mecanismo recorre ao outro, então uma requisição enviada com a chave
"errada" ainda é executada. Os dois cartões abaixo mostram o campo que cada mecanismo lê **primeiro**: o que a
referência da API documenta e o que o Playground do painel envia para aquele mecanismo.

<CardGroup cols={2}>
  <Card title="Lê prompt" icon="message-square">
    `CHATGPT` `PERPLEXITY` `GEMINI` `BING_COPILOT`

    Recorre a `query` se `prompt` estiver ausente.
  </Card>

  <Card title="Lê query" icon="search">
    `GOOGLE` `AIMODE` `GOOGLE_SERP` `NAVER_AI_BRIEF` `NAVER_AI_TAB` `NAVER_SERP` `BING_SEARCH` `REDDIT`

    Recorre a `prompt` se `query` estiver ausente.
  </Card>
</CardGroup>

## Opções de resposta

As respostas brutas vêm incluídas por padrão em todos os mecanismos de resposta. Defina `payload.include.rawResponse`
como `false` para omiti-las. As demais opções variam por mecanismo:

| Mecanismo | Flags respeitadas | Onde chega o bruto |
| - | - | - |
| `CHATGPT` | `markdown` `html` `rawResponse` `searchQueries` `ads` `shopping` | `rawResponse` |
| `PERPLEXITY` | `markdown` `rawResponse` `searchQueries` | `rawResponse` |
| `GEMINI` | `markdown` `rawResponse` | `rawResponse` |
| `BING_COPILOT` | `markdown` `rawResponse` | `rawResponse` |
| `BING_SEARCH` | `markdown` `rawResponse` | **`rawContent`** (HTML da página de resultados) |
| `GOOGLE_SERP` | `rawResponse` (desligado por padrão) | **`rawContent`** (HTML da página de resultados) |
| `GOOGLE` `AIMODE` `NAVER_AI_BRIEF` `NAVER_AI_TAB` | `rawResponse` | **`rawContent`** |
| `NAVER_SERP` `REDDIT` | nenhuma | sem payload bruto |

<Note>
  `rawResponse` contém eventos de stream já interpretados. Google AI Overviews, AI Mode e Bing Search retornam o HTML
  completo da página renderizada como `rawContent`; o Naver retorna o stream de eventos original como string
  `rawContent`. Esses campos podem ser grandes. Use `include.rawResponse: false` quando precisar só do resultado
  estruturado. `GOOGLE_SERP` é a exceção: só retorna o HTML da página quando você define `include.rawResponse: true`.
</Note>

`markdown` não é uma flag em todo mecanismo que o retorna: o Naver envia `markdown` sempre, porque para ele esse é o
formato real da resposta, e não uma cópia de `text`.

<Warning>
  Uma flag não respeitada é ignorada em silêncio: sem erro e sem campo. Em especial, `html` só é gerado pelo
  `CHATGPT`, embora vários mecanismos aceitem a flag.
</Warning>

## Formatos de resposta

<AccordionGroup>
  <Accordion title="PERPLEXITY">
    Lê `prompt`. Sempre retorna `text` e `sources[]`.

    ```json theme={null}
    {
      "text": "...",
      "sources": [{ "position": 1, "url": "https://...", "label": "...", "description": "..." }],
      "markdown": "...",
      "rawResponse": ["..."],
      "related_queries": ["..."],
      "search_model_queries": ["..."]
    }
    ```

    Extras opcionais quando o Perplexity os exibe: `videos`, `images`, `hotels`, `places`, `shopping_cards`.
  </Accordion>

  <Accordion title="GEMINI">
    Lê `prompt`. Sempre retorna `text` e `sources[]`.

    ```json theme={null}
    {
      "text": "...",
      "sources": [{ "position": 1, "url": "https://...", "label": "...", "confidence_level": "..." }],
      "markdown": "...",
      "rawResponse": ["..."],
      "model": "...",
      "shoppingCards": [{ "title": "...", "position": 1, "price": { "value": 249.99, "currency": "$", "raw": "$249.99" }, "store": "...",
                         "rating": 4.7, "reviews": "14292", "thumbnail": "https://...", "productLink": "https://google.com/search?...&ibp=oshop..." }],
      "inlineProducts": [{ "title": "...", "position": 1, "productLink": "https://google.com/search?...&ibp=oshop..." }]
    }
    ```

    Quando a resposta mostra produtos, `shoppingCards` (os cartões de produto que o Gemini desenha dentro da resposta) e `inlineProducts` (nomes de produto com link nas frases) os trazem com os mesmos campos da visão geral do GOOGLE. Os nomes dos cartões ficam em `text` e os links de produto apontam para a página de produto do Google.
  </Accordion>

  <Accordion title="GOOGLE: AI Overview dentro de um envelope de SERP">
    Lê `query`. **Não** é um objeto de AI Overview isolado: é um envelope de resultados de busca que traz o AI Overview
    como um membro anulável.

    ```json theme={null}
    {
      "aioverview": {
        "text": "...",
        "sources": [{ "position": 1, "url": "https://..." }],
        "shoppingCards": [{ "title": "...", "position": 1, "price": { "value": 299.99, "currency": "$", "raw": "$299.99" },
                            "oldPrice": { "value": 399.99, "currency": "$", "raw": "$399.99" }, "store": "...",
                            "rating": 4.5, "reviews": "2.3K", "thumbnail": "https://...", "productLink": "https://www.google.com/search?ibp=oshop..." }],
        "inlineProducts": [{ "title": "...", "position": 1, "productLink": "https://www.google.com/search?ibp=oshop..." }]
      },
      "organicResults": [{ "...": "..." }],
      "peopleAlsoAsk": [{ "...": "..." }],
      "relatedSearches": [{ "...": "..." }],
      "knowledgeGraph": { "...": "..." },
      "ads": [{ "...": "..." }],
      "serp": { "topStories": [], "videoResults": [], "localResults": [] }
    }
    ```

    <Warning>
      `aioverview: null` é o sinal documentado de que **o Google não exibiu um AI Overview** para aquela consulta. Não é
      erro, e os campos de SERP ao redor continuam preenchidos.
    </Warning>

    `text` e `sources` de nível superior são **aliases obsoletos** que duplicam `aioverview.text` e `aioverview.sources`.
    Eles existem para que quem consome o antigo formato de AIO isolado continue funcionando. Em código novo, leia `aioverview.*`.

    Os painéis da SERP são **omitidos** quando ausentes, em vez de vir como `null` ou `[]`: trate cada um como opcional.

    `aioverview.shoppingCards` e `aioverview.inlineProducts` só aparecem quando a visão geral mostra produtos. Os cartões são os blocos de produto que o Google desenha ao lado da resposta; os produtos inline são os nomes de produto com link dentro das frases. Os títulos dos cartões também ficam em `aioverview.text`. `price.currency` é o símbolo como exibido (`$`, `₩`, `円`), `reviews` mantém a abreviação do Google (`2.3K`) e `productLink` é a página de produto do Google.
  </Accordion>

  <Accordion title="AIMODE: Google AI Mode">
    Lê `query`. Formato fixo, sem markdown.

    ```json theme={null}
    {
      "text": "...",
      "sources": [{ "position": 1, "url": "https://...", "label": "..." }],
      "shoppingCards": [{ "...": "..." }],
      "inlineProducts": [{ "...": "..." }]
    }
    ```

    `shoppingCards` e `inlineProducts` só aparecem quando a resposta mostra produtos, com os mesmos campos da visão geral do GOOGLE.
  </Accordion>

  <Accordion title="GOOGLE_SERP: resultados do Google sem o AI Overview">
    Lê `query`. Retorna uma página de resultados do google.com no mesmo envelope do `GOOGLE`, mas sem o AI Overview: não
    há `aioverview`, `text` nem `sources`. Como não espera pelo overview, responde mais rápido que o `GOOGLE` e custa
    1 crédito. Defina `payload.page` (1-10) para páginas mais profundas.

    ```json theme={null}
    {
      "organicResults": [
        { "position": 11, "title": "...", "link": "https://...", "displayedLink": "...", "snippet": "...", "page": 2 }
      ],
      "peopleAlsoAsk": [{ "...": "..." }],
      "relatedSearches": [{ "...": "..." }],
      "ads": [{ "...": "..." }],
      "page": 2
    }
    ```

    `organicResults` está sempre presente. `position` conta através das páginas, então o primeiro resultado da página 2 é
    o 11, e cada linha traz a `page` de onde veio. Um `organicResults` vazio significa que o próprio Google não retornou
    resultados para a consulta. Os outros painéis são omitidos quando a página não os tem. Defina
    `include.rawResponse: true` para receber também o HTML da página como `rawContent`.
  </Accordion>

  <Accordion title="NAVER_SERP: resultados de busca do Naver">
    Lê `query`. Retorna uma página de resultados de documentos web do Naver (a aba 웹문서), 15 documentos por página, por
    1 crédito. Defina `payload.page` (1-10) para páginas mais profundas. `country` tem padrão `KR`.

    ```json theme={null}
    {
      "organicResults": [
        { "position": 16, "title": "...", "link": "https://...", "displayedLink": "example.com›path",
          "snippet": "...", "page": 2 }
      ]
    }
    ```

    `position` conta através das páginas, então o primeiro documento da página 2 é o 16. Um `organicResults` vazio em uma
    tarefa concluída significa que o próprio Naver não retornou documentos. Quando o Naver esconde os resultados atrás da
    verificação de idade, a resposta também traz um `notice` cujo `type` é `age_verification_required`.

    Para ler uma página do Naver em vez de buscar, envie `"action": "page"` com uma `url` do naver.com (blog, cafe,
    notícias, terms, kin ou qualquer outra página do naver.com). A resposta é `{ type, url, title, text, images, truncated }`,
    mais `author`, `publishedAt` ou `cafeName` quando a página os tiver. `text` é cortado em `maxChars` (1.000-50.000,
    padrão 20.000). Só URLs https do naver.com são aceitas (caso contrário, 422), e um redirecionamento que saia do
    naver.com faz a tarefa falhar. O mesmo vale para um artigo de cafe que só membros podem ler.

    Este mecanismo não retorna payload bruto, então as flags `include` não têm efeito.
  </Accordion>

  <Accordion title="REDDIT: posts, comentários e feeds do Reddit">
    Lê `query` e busca posts do Reddit por 1 crédito. Adicione `subreddit` (o nome sem `r/`) para buscar em um único subreddit.

    ```json theme={null}
    {
      "results": [
        { "postId": "1uzk9m4", "title": "...", "url": "https://www.reddit.com/r/.../comments/1uzk9m4/...",
          "subreddit": "AskRunningShoeGeeks", "preview": "..." }
      ]
    }
    ```

    Envie a `url` de um post (`https://www.reddit.com/r/{subreddit}/comments/{postId}/...`) em vez de `query` para ler o
    post com a primeira página de comentários, cerca de 20-25. `commentSort` (`top` por padrão, ou `new`,
    `controversial`, `old`, `qa`) ordena essa página e `commentMaxDepth` descarta respostas mais profundas (`0` mantém só
    os comentários de primeiro nível).

    ```json theme={null}
    {
      "post": { "postId": "1uer62n", "title": "...", "body": "...", "author": "...", "subreddit": "...",
                "score": 12, "upvoteRatio": 0.9, "commentCount": 48, "createdAt": "2026-06-24T21:51:21.586000+0000",
                "archived": false, "url": "https://www.reddit.com/r/..." },
      "comments": {
        "availableCount": 24, "returnedCount": 24,
        "items": [{ "commentId": "otlz8m5", "author": "...", "body": "...", "score": 5, "depth": 0,
                    "isSubmitter": false, "createdAt": "...", "url": "https://www.reddit.com/r/..." }]
      }
    }
    ```

    `post.commentCount` é o total de comentários do post; `comments` traz a página que foi lida. `archived` é estimado pela
    idade do post (o Reddit bloqueia comentários depois de uns 180 dias). `"action": "feed"` lista os posts mais recentes
    de `subreddit` (r/popular se não for informado), e `"action": "user_posts"` com `username` lista o que esse usuário
    publicou; ambos retornam `results` como uma busca, até `limit` (padrão 25).

    Um `results` vazio em uma tarefa concluída significa que o Reddit não encontrou nada. Este mecanismo não
    retorna payload bruto, então as flags `include` não têm efeito.
  </Accordion>

  <Accordion title="CHATGPT">
    Lê `prompt`. A resposta mais rica da API e a única em que todas as flags `include` funcionam. Todas as flags vêm
    ligadas por padrão.

    ```json theme={null}
    {
      "text": "...",
      "model": "...",
      "sources": [{ "position": 1, "url": "https://...", "label": "...", "footnote": "...", "datePublished": "..." }],
      "markdown": "...",
      "html": "...",
      "rawResponse": ["..."],
      "searchQueries": ["..."],
      "shoppingCards": [{ "...": "..." }],
      "inlineProducts": [{ "...": "..." }],
      "ads": [{ "...": "..." }],
      "entities": { "...": "..." },
      "citationPills": [{ "...": "..." }]
    }
    ```

    O ChatGPT também suporta conversas com vários turnos; veja a seção Vários turnos mais abaixo.
  </Accordion>

  <Accordion title="BING_COPILOT: Bing Copilot">
    Lê `prompt`. Retorna a resposta do chat do Copilot em copilot.com, com a busca na web sempre ligada. Não há conta nem
    login envolvidos. `COPILOT` continua aceito e é executado como `BING_COPILOT`.

    ```json theme={null}
    {
      "text": "Solar panels cut electricity bills ...",
      "sources": [{ "position": 1, "url": "https://...", "label": "..." }],
      "shoppingCards": [{ "type": "shoppingProducts", "layout": "inline", "products": [{ "position": 1, "name": "...", "url": "https://...", "price": { "amount": 69, "currencySymbol": "$" } }] }],
      "map": [{ "position": 1, "name": "...", "placeId": "...", "location": { "address": "...", "latitude": 40.75, "longitude": -73.98 }, "layerLabel": "..." }],
      "searchQueries": ["..."],
      "markdown": "...",
      "rawResponse": [{ "event": "appendText", "text": "..." }]
    }
    ```

    `sources` são as páginas que o Copilot citou; perguntas de compras muitas vezes não citam nada e retornam cartões de
    produto, então `sources: []` é uma resposta normal. `shoppingCards`, `map` e `searchQueries` estão sempre presentes e
    vazios quando o Copilot não os gerou. As posições dos produtos seguem em sequência por todos os cartões. `markdown` é
    retornado quando `include.markdown` é `true`.
  </Accordion>

  <Accordion title="BING_SEARCH: resultados do Bing com resumo de IA">
    Lê `query`. Retorna a página de resultados do bing.com no mesmo envelope do `GOOGLE`: resultados orgânicos, anúncios e
    buscas relacionadas, com o resumo de IA que o Bing mostra acima deles como `aioverview`. Não há conta nem login
    envolvidos. `BING` e `BING_COPILOT_SEARCH` continuam aceitos e são executados como `BING_SEARCH`.

    ```json theme={null}
    {
      "surface": "bing_search",
      "organicResults": [
        { "position": 1, "title": "...", "link": "https://...", "displayedLink": "...", "snippet": "...", "date": "Aug 3, 2026", "page": 1 }
      ],
      "ads": [{ "position": 1, "title": "...", "link": "https://...", "displayedLink": "...", "description": "...", "blockPosition": "top" }],
      "relatedSearches": [{ "query": "...", "link": "https://www.bing.com/search?q=..." }],
      "aioverview": {
        "text": "Heat pumps move heat instead of generating it [1]. ...",
        "sources": [{ "position": 1, "url": "https://...", "label": "..." }],
        "citationPills": [
          { "citationPillId": 1, "position": 1, "url": "https://...", "label": "...", "domain": "example.com" }
        ],
        "markdown": "..."
      },
      "rawContent": "<!DOCTYPE html>..."
    }
    ```

    <Warning>
      `aioverview: null` significa que **o Bing não exibiu um resumo de IA** para aquela consulta. Não é erro, e os campos
      de resultados ao redor continuam preenchidos.
    </Warning>

    Em `aioverview.text`, `[n]` se refere a `sources[n-1]`. Cada entrada de `citationPills[]` é uma fonte por trás de uma
    citação inline; fontes citadas juntas compartilham um `citationPillId`. O campo é omitido quando o resumo não tem
    citações inline. `markdown` preserva títulos, listas e tabelas e é retornado quando `include.markdown` é `true`.

    Quando o Bing mostra um resumo, ele move a maior parte dos resultados orgânicos para a página seguinte, então espere
    dois ou três `organicResults` com resumo e uns nove sem. `ads` e `relatedSearches` são omitidos quando a página não os
    tem. `rawContent` é a página de resultados inteira; defina `include.rawResponse: false` para omiti-la. `text` e
    `sources` de nível superior são cópias obsoletas de `aioverview.text` e `aioverview.sources` (vazias quando não há resumo).

    O Bing não escreve um resumo para toda consulta. Perguntas do tipo busca ("como funciona uma bomba de calor no frio")
    recebem resumo com muito mais frequência do que instruções ("Explique dois benefícios…"), e a cobertura fora do inglês
    é limitada.
  </Accordion>

  <Accordion title="NAVER_AI_BRIEF e NAVER_AI_TAB">
    Ambos leem `query` e compartilham o mesmo formato de resposta.

    ```json theme={null}
    {
      "text": "...",
      "sources": [{ "position": 1, "url": "https://...", "label": "...", "description": "..." }]
    }
    ```

    `NAVER_AI_BRIEF` é a caixa condicional de resumo de IA na SERP do Naver; ela pode não aparecer para uma consulta.
    `NAVER_AI_TAB` é a aba de IA conversacional sempre disponível e a principal superfície do Naver; seu `text` vem em
    formato markdown.

    `NAVER_AI_BRIEF` também retorna os documentos web orgânicos que ficam abaixo da caixa de resumo, em `organicResults`,
    o mesmo campo que o `GOOGLE` envia ao lado do seu AI Overview:

    ```json theme={null}
    {
      "organicResults": [
        { "position": 1, "title": "...", "link": "https://...", "displayedLink": "example.com",
          "snippet": "...", "date": "2026.7.30.", "page": 1 }
      ]
    }
    ```

    O resumo e os documentos vêm de dois endpoints diferentes do Naver, então `NAVER_AI_BRIEF` custa 2 créditos, o mesmo
    que `NAVER_AI_TAB`. Se a busca dos documentos falhar, o campo fica ausente em vez de vazio.

    <Note>
      `NAVER` é um alias obsoleto de `NAVER_AI_BRIEF`. Use o nome explícito.
    </Note>
  </Accordion>
</AccordionGroup>

## Vários turnos (ChatGPT)

O ChatGPT consegue manter uma conversa. Omita os dois campos para o comportamento padrão de turno único.

<Steps>
  <Step title="Inicie uma conversa">
    Envie `newConversation: true`. A resposta traz um `conversationId`.

    ```json theme={null}
    { "taskType": "CHATGPT", "payload": { "prompt": "...", "newConversation": true } }
    ```
  </Step>

  <Step title="Continue">
    Envie esse `conversationId` de volta no próximo turno.

    ```json theme={null}
    { "taskType": "CHATGPT", "payload": { "prompt": "...", "conversationId": "..." } }
    ```
  </Step>
</Steps>

<Warning>
  As conversas ficam vinculadas ao dispositivo que as criou e expiram após cerca de duas horas. Um `conversationId`
  expirado não pode ser retomado.
</Warning>

## Guias dos mecanismos

* [ChatGPT](https://querying.ai/pt/engines/chatgpt)
* [Gemini](https://querying.ai/pt/engines/gemini)
* [Perplexity](https://querying.ai/pt/engines/perplexity)
* [Bing Copilot](https://querying.ai/pt/engines/bing-copilot)
* [Google AI Overviews](https://querying.ai/pt/engines/google-ai-overviews)
* [Google AI Mode](https://querying.ai/pt/engines/google-ai-mode)
* [Naver AI Brief](https://querying.ai/pt/engines/naver-ai-brief)
* [Naver AI Tab](https://querying.ai/pt/engines/naver-ai-tab)
