> ## 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.

# Motores de búsqueda con IA: respuestas, citas y campos de respuesta

> Cada taskType: qué campo del payload lee, qué devuelve y qué flags include tienen efecto real.

`taskType` selecciona el motor. El sobre que rodea el resultado es idéntico para todos; lo que varía es el objeto
`response` que contiene.

<Note>
  **Hay nueve superficies de respuesta disponibles**: `CHATGPT`, `GEMINI`, `PERPLEXITY`, `BING_COPILOT`, `GOOGLE`,
  `AIMODE`, `BING_SEARCH`, `NAVER_AI_BRIEF` y `NAVER_AI_TAB`. `GOOGLE_SERP` devuelve resultados de Google sin el
  AI Overview, `NAVER_SERP` devuelve los resultados web de Naver y `REDDIT` devuelve publicaciones y comentarios de Reddit.
</Note>

## Qué campo del payload lee cada motor

La validación acepta `prompt` o `query`, y cada motor recurre al otro, así que una solicitud enviada con la clave
«equivocada» igualmente se ejecuta. Las dos tarjetas siguientes muestran el campo que cada motor lee **primero**: el
que documenta la referencia de la API y el que envía el Playground del panel para ese motor.

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

    Recurre a `query` si falta `prompt`.
  </Card>

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

    Recurre a `prompt` si falta `query`.
  </Card>
</CardGroup>

## Opciones de respuesta

Las respuestas en bruto se incluyen por defecto en todos los motores de respuesta. Pon `payload.include.rawResponse`
en `false` para omitirlas. Las demás opciones varían según el motor:

| Motor | Flags respetados | Dónde llega el 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 de la página de resultados) |
| `GOOGLE_SERP` | `rawResponse` (desactivado por defecto) | **`rawContent`** (HTML de la página de resultados) |
| `GOOGLE` `AIMODE` `NAVER_AI_BRIEF` `NAVER_AI_TAB` | `rawResponse` | **`rawContent`** |
| `NAVER_SERP` `REDDIT` | ninguno | sin payload en bruto |

<Note>
  `rawResponse` contiene eventos de stream ya parseados. Google AI Overviews, AI Mode y Bing Search devuelven el HTML
  completo de la página renderizada como `rawContent`; Naver devuelve el stream de eventos original como cadena
  `rawContent`. Estos campos pueden ser grandes. Usa `include.rawResponse: false` si solo necesitas el resultado
  estructurado. `GOOGLE_SERP` es la excepción: solo devuelve el HTML de la página si pones `include.rawResponse: true`.
</Note>

`markdown` no es un flag en todos los motores que lo devuelven: Naver envía `markdown` siempre, porque para él es la
forma real de la respuesta y no una copia de `text`.

<Warning>
  Un flag no respetado se ignora en silencio: sin error y sin campo. En particular, `html` solo lo produce `CHATGPT`,
  aunque varios motores acepten el flag.
</Warning>

## Formas de respuesta

<AccordionGroup>
  <Accordion title="PERPLEXITY">
    Lee `prompt`. Siempre devuelve `text` y `sources[]`.

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

    Extras opcionales cuando Perplexity los muestra: `videos`, `images`, `hotels`, `places`, `shopping_cards`.
  </Accordion>

  <Accordion title="GEMINI">
    Lee `prompt`. Siempre devuelve `text` y `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..." }]
    }
    ```

    Cuando la respuesta muestra productos, `shoppingCards` (las tarjetas de producto que Gemini dibuja dentro de la respuesta) e `inlineProducts` (nombres de producto enlazados en sus frases) los incluyen con los mismos campos que el resumen de GOOGLE. Los nombres de las tarjetas se conservan en `text` y los enlaces de producto apuntan a la página de producto de Google.
  </Accordion>

  <Accordion title="GOOGLE: AI Overview dentro de un sobre SERP">
    Lee `query`. **No** es un objeto AI Overview suelto: es un sobre de resultados de búsqueda que incluye el AI Overview
    como un miembro anulable.

    ```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` es la señal documentada de que **Google no mostró un AI Overview** para esa consulta. No es un
      error, y los campos SERP de alrededor siguen rellenados.
    </Warning>

    `text` y `sources` de nivel superior son **alias obsoletos** que duplican `aioverview.text` y `aioverview.sources`.
    Existen para que los consumidores de la antigua forma AIO suelta sigan funcionando. En código nuevo lee `aioverview.*`.

    Los paneles SERP se **omiten** cuando no existen, en lugar de emitirse como `null` o `[]`; trata cada uno como opcional.

    `aioverview.shoppingCards` y `aioverview.inlineProducts` solo aparecen cuando el resumen muestra productos. Las tarjetas son las fichas de producto que Google dibuja junto a la respuesta; los productos en línea son los nombres de producto enlazados dentro de sus frases. Los títulos de las tarjetas también se conservan en `aioverview.text`. `price.currency` es el símbolo tal como se muestra (`$`, `₩`, `円`), `reviews` conserva la abreviatura de Google (`2.3K`) y `productLink` es la página de producto de Google.
  </Accordion>

  <Accordion title="AIMODE: Google AI Mode">
    Lee `query`. Forma fija, sin markdown.

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

    `shoppingCards` e `inlineProducts` solo aparecen cuando la respuesta muestra productos, con los mismos campos que el resumen de GOOGLE.
  </Accordion>

  <Accordion title="GOOGLE_SERP: resultados de Google sin el AI Overview">
    Lee `query`. Devuelve una página de resultados de google.com en el mismo sobre que `GOOGLE`, pero sin el AI Overview:
    no hay `aioverview`, `text` ni `sources`. No espera al overview, así que responde más rápido que `GOOGLE` y cuesta
    1 crédito. Usa `payload.page` (1-10) para páginas más profundas.

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

    `organicResults` siempre está presente. `position` cuenta a través de las páginas, así que el primer resultado de la
    página 2 es el 11, y cada fila lleva la `page` de la que procede. Un `organicResults` vacío significa que Google no
    devolvió resultados para la consulta. Los demás paneles se omiten si la página no los tiene. Pon
    `include.rawResponse: true` para recibir también el HTML de la página como `rawContent`.
  </Accordion>

  <Accordion title="NAVER_SERP: resultados de búsqueda de Naver">
    Lee `query`. Devuelve una página de resultados de documentos web de Naver (la pestaña 웹문서), 15 documentos por página,
    por 1 crédito. Usa `payload.page` (1-10) para páginas más profundas. `country` vale `KR` por defecto.

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

    `position` cuenta a través de las páginas, así que el primer documento de la página 2 es el 16. Un `organicResults`
    vacío en una tarea completada significa que Naver no devolvió ningún documento. Cuando Naver oculta los resultados
    tras su verificación de edad, la respuesta también incluye un `notice` cuyo `type` es `age_verification_required`.

    Para leer una página de Naver en lugar de buscar, envía `"action": "page"` con una `url` de naver.com (blog, cafe,
    noticias, terms, kin o cualquier otra página de naver.com). La respuesta es `{ type, url, title, text, images, truncated }`,
    más `author`, `publishedAt` o `cafeName` cuando la página los tiene. `text` se recorta a `maxChars` (1.000-50.000, por
    defecto 20.000). Solo se aceptan URL https de naver.com (422 en otro caso), y una redirección que salga de naver.com hace
    fallar la tarea. Lo mismo ocurre con un artículo de cafe que solo pueden leer los miembros.

    Este motor no devuelve payload en bruto, así que los flags `include` no tienen efecto.
  </Accordion>

  <Accordion title="REDDIT: publicaciones, comentarios y feeds de Reddit">
    Lee `query` y busca publicaciones de Reddit por 1 crédito. Añade `subreddit` (el nombre sin `r/`) para buscar en un solo subreddit.

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

    Envía la `url` de una publicación (`https://www.reddit.com/r/{subreddit}/comments/{postId}/...`) en lugar de `query`
    para leerla con su primera página de comentarios, unos 20-25. `commentSort` (`top` por defecto, o `new`,
    `controversial`, `old`, `qa`) ordena esa página y `commentMaxDepth` descarta respuestas más profundas (`0` conserva
    solo los comentarios de primer nivel).

    ```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` es el total de comentarios de la publicación; `comments` contiene la página leída. `archived` se
    estima a partir de la antigüedad de la publicación (Reddit bloquea los comentarios tras unos 180 días).
    `"action": "feed"` lista las publicaciones más recientes de `subreddit` (r/popular si no se indica), y
    `"action": "user_posts"` con `username` lista lo que publicó ese usuario; ambos devuelven `results` como una búsqueda,
    hasta `limit` (25 por defecto).

    Un `results` vacío en una tarea completada significa que Reddit no encontró nada. Este motor no devuelve
    payload en bruto, así que los flags `include` no tienen efecto.
  </Accordion>

  <Accordion title="CHATGPT">
    Lee `prompt`. La respuesta más rica de la API y la única en la que funcionan todos los flags `include`. Todos los
    flags están activados por defecto.

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

    ChatGPT también admite conversaciones de varios turnos; consulta la sección Varios turnos más abajo.
  </Accordion>

  <Accordion title="BING_COPILOT: Bing Copilot">
    Lee `prompt`. Devuelve la respuesta del chat de Copilot en copilot.com, con la búsqueda web siempre activa. No
    interviene ninguna cuenta ni inicio de sesión. `COPILOT` se sigue aceptando y se ejecuta 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` son las páginas que Copilot citó; las preguntas de compras a menudo no citan nada y devuelven tarjetas de
    producto, así que `sources: []` es una respuesta normal. `shoppingCards`, `map` y `searchQueries` siempre están
    presentes y vacíos cuando Copilot no los generó. Las posiciones de producto son correlativas entre todas las tarjetas.
    `markdown` se devuelve cuando `include.markdown` es `true`.
  </Accordion>

  <Accordion title="BING_SEARCH: resultados de Bing con resumen de IA">
    Lee `query`. Devuelve la página de resultados de bing.com en el mismo sobre que `GOOGLE`: resultados orgánicos,
    anuncios y búsquedas relacionadas, con el resumen de IA que Bing muestra encima como `aioverview`. No interviene
    ninguna cuenta ni inicio de sesión. `BING` y `BING_COPILOT_SEARCH` se siguen aceptando y se ejecutan 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 **Bing no mostró un resumen de IA** para esa consulta. No es un error, y los campos
      de resultados de alrededor siguen rellenados.
    </Warning>

    En `aioverview.text`, `[n]` remite a `sources[n-1]`. Cada entrada de `citationPills[]` es una fuente detrás de una cita
    en línea; las fuentes citadas juntas comparten un `citationPillId`. El campo se omite si el resumen no tiene citas en
    línea. `markdown` conserva títulos, listas y tablas y se devuelve cuando `include.markdown` es `true`.

    Cuando Bing muestra un resumen, mueve la mayoría de los resultados orgánicos a la página siguiente, así que espera dos
    o tres `organicResults` con resumen y unos nueve sin él. `ads` y `relatedSearches` se omiten si la página no los tiene.
    `rawContent` es la página de resultados completa; pon `include.rawResponse: false` para omitirla. `text` y `sources` de
    nivel superior son copias obsoletas de `aioverview.text` y `aioverview.sources` (vacías si no hay resumen).

    Bing no escribe un resumen para cada consulta. Las preguntas de tipo búsqueda («cómo funciona una bomba de calor con
    frío») lo obtienen con mucha más frecuencia que las instrucciones («Explica dos ventajas…»), y la cobertura fuera del
    inglés es limitada.
  </Accordion>

  <Accordion title="NAVER_AI_BRIEF y NAVER_AI_TAB">
    Ambos leen `query` y comparten la misma forma de respuesta.

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

    `NAVER_AI_BRIEF` es el recuadro condicional de resumen de IA en la SERP de Naver; puede no aparecer para una consulta
    dada. `NAVER_AI_TAB` es la pestaña conversacional de IA siempre disponible y la superficie principal de Naver; su `text`
    está en formato markdown.

    `NAVER_AI_BRIEF` también devuelve los documentos web orgánicos que hay bajo el recuadro de resumen, en `organicResults`,
    el mismo campo que `GOOGLE` envía junto a su AI Overview:

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

    El resumen y los documentos vienen de dos endpoints distintos de Naver, así que `NAVER_AI_BRIEF` cuesta 2 créditos, igual
    que `NAVER_AI_TAB`. Si falla la obtención de documentos, el campo está ausente en lugar de vacío.

    <Note>
      `NAVER` es un alias obsoleto de `NAVER_AI_BRIEF`. Usa el nombre explícito.
    </Note>
  </Accordion>
</AccordionGroup>

## Varios turnos (ChatGPT)

ChatGPT puede mantener una conversación. Omite ambos campos para el comportamiento por defecto de un solo turno.

<Steps>
  <Step title="Inicia un hilo">
    Envía `newConversation: true`. La respuesta incluye un `conversationId`.

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

  <Step title="Continúalo">
    Devuelve ese `conversationId` en el siguiente turno.

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

<Warning>
  Las conversaciones están ligadas al dispositivo que las creó y caducan tras unas dos horas. Un `conversationId`
  caducado no se puede reanudar.
</Warning>

## Guías de motores

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