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

# API de ChatGPT: respuestas, fuentes y consultas de búsqueda

> Hazle una pregunta a ChatGPT y obtén su respuesta, las fuentes citadas, las consultas de búsqueda, los productos y conversaciones de seguimiento.

`CHATGPT` pregunta a ChatGPT con la búsqueda web activada y devuelve la respuesta, todas las fuentes que encontró, las búsquedas que ejecutó y las tarjetas de productos y lugares que dibujó.

| | |
| - | - |
| taskType | `CHATGPT` |
| Lee | `prompt` (recurre a `query`) |
| Créditos | 1 por respuesta |
| País | Opcional, por defecto `US`. `CN` y `HK` se preguntan desde una salida en Singapur con una ubicación de dispositivo local. |
| Ubicación | Acepta `payload.location`. Consulta [Regiones y ubicación](/es/engines/capacity.md). |

## Solicitud

```bash theme={"theme":"css-variables"}
curl -X POST https://api.querying.ai/v1/async/task \
  -H "Authorization: Bearer $QUERYING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskType": "CHATGPT", "payload": { "prompt": "best CRM for a small team", "country": "US" } }'
```

## Respuesta

| Campo | Tipo | Descripción |
| - | - | - |
| `text` | string | La respuesta como texto plano. |
| `markdown` | string | La respuesta en Markdown, con las fotos en el lugar de su tarjeta. Activado por defecto. |
| `model` | string | El modelo con el que respondió ChatGPT. |
| `sources` | array | Todas las fuentes: `position`, `url`, `label`, `footnote`, `datePublished`, `searchQueries`, `cited`, `citedText`. |
| `searchQueries` | string\[] | Las búsquedas web que ejecutó ChatGPT. Activado por defecto. |
| `shoppingCards`, `inlineProducts` | array | Tarjetas de producto y nombres de producto enlazados en la respuesta. Activado por defecto (`include.shopping`). |
| `ads` | array | Elementos patrocinados en la respuesta. Activado por defecto (`include.ads`). |
| `entities` | array | Lugares y productos nombrados en las tarjetas, cada uno con su `type`, como `local_business` o `product`, y su `name`. |
| `entityDetails` | array | El panel de detalle de cada tarjeta. Solo con `include.entityDetails`. Consulta [Detalles de tarjetas](#detalles-de-tarjetas). |
| `map` | array | Lugares mostrados en tarjetas: dirección, coordenadas, teléfono, valoración y el emoji `icon` con el que ChatGPT los marca. `provider` es el feed del que procede el registro (`serp` y `bright-feed` para Google Maps, `yelp-feed` para Yelp, `tripadvisor-feed` para Tripadvisor); `placeId` y `providerUrl` son el ID y la página del lugar en ese feed. `resolvedBy: "address"` marca un lugar que ChatGPT encontró por la dirección que escribió el modelo. `localName` es el otro nombre del registro, como el nombre coreano de una tienda en Corea, y `closed` es `permanently` o `temporarily`. |
| `citationPills` | array | Las fuentes detrás de cada chip de cita en línea. |
| `layout` | object | La disposición en tarjetas, cuando ChatGPT dibuja la respuesta como tarjetas. Ver abajo. |
| `forms` | array | Formularios de seguimiento de la respuesta, cuando los hay. Consulta [Conversaciones](#continuar-una-conversación-más-tarde). |
| `conversation` | object | `id`, `turn` y `expiresAt` de la conversación a la que pertenece la respuesta. |
| `html` | object | La pantalla que mostró ChatGPT. Solo con `include.html`. |
| `rawResponse` | array | Eventos de stream parseados. Solo con `include.rawResponse`. |

Por ejemplo, una respuesta recortada:

```json theme={"theme":"css-variables"}
{
  "text": "For a small team, HubSpot CRM and Pipedrive are the usual picks ...",
  "markdown": "For a small team, **HubSpot CRM** and **Pipedrive** are the usual picks ...",
  "model": "gpt-5-3",
  "sources": [
    {
      "position": 1,
      "url": "https://www.example.com/best-crm-small-business",
      "label": "The best CRM software for small businesses",
      "searchQueries": ["best CRM for small teams"],
      "cited": true,
      "citedText": ["HubSpot CRM and Pipedrive are the usual picks"]
    }
  ],
  "searchQueries": ["best CRM for small teams"],
  "conversation": { "id": "8f6c1d2e-...", "turn": 1, "expiresAt": "2026-10-19T12:00:00.000Z" }
}
```

Cada fuente incluye `searchQueries` (las búsquedas cuyos resultados la incluyeron), `cited` (si la respuesta la cita en el texto) y `citedText` (el texto de la respuesta que respalda cada cita). Las fuentes que no devolvió ninguna búsqueda, como los productos, no llevan `searchQueries`.

### Disposición en tarjetas

`layout` aparece cuando ChatGPT dibuja la respuesta como tarjetas. Sus `nodes` siguen el orden en que ChatGPT los muestra:

| Nodo | Contiene |
| - | - |
| `row`, `box` | Grupos de tarjetas. |
| `title`, `text`, `badge` | El texto de la tarjeta. |
| `image` | La foto: `images[].url`, `thumbnailUrl` y `pageUrl`. |
| `markdown` | El resto de la respuesta. |
| `map` | En `places`, la `position` de cada lugar que muestra. |
| `form` | Un formulario que te pide elegir una pregunta de seguimiento. Sus nodos `choice` contienen las opciones y la seleccionada al inicio; su nodo `button` contiene la pregunta que ChatGPT enviaría a continuación (`prompt`). Los formularios quedan fuera de `text` y `markdown`. |

## Flags include

`CHATGPT` respeta todos los flags de respuesta. Todos están activados por defecto salvo `rawResponse` y `html`; envía `false` para desactivar uno.

| Flag | Por defecto | Efecto |
| - | - | - |
| `markdown` | `true` | Añade `markdown`. |
| `searchQueries` | `true` | Añade `searchQueries`. |
| `shopping` | `true` | Añade las tarjetas de producto. |
| `ads` | `true` | Añade `ads`. |
| `rawResponse` | `false` | Añade `rawResponse`. Consulta [Respuestas en Markdown y en bruto](/es/engines/response-options.md). |
| `html` | `false` | Añade `html`, 0,25 créditos cuando se guarda la página. Se rechaza con `422 EVIDENCE_UNSUPPORTED` junto con `location`, `CN`, `HK` o `continueFrom`. Consulta [Páginas HTML](/es/engines/html-pages.md). |
| `analysis` | `false` | Añade `analysis`, 1 crédito. Consulta [Análisis de la respuesta](/es/engines/answer-analysis.md). |
| `citationAnalysis` | `false` | Ejecuta un [Citation Analysis](/es/research/citation-analysis.md) sobre la respuesta. |
| `entityDetails` | `false` | Añade `entityDetails` sin créditos adicionales. Consulta [Detalles de tarjetas](#detalles-de-tarjetas). |

## Detalles de tarjetas

Con `include.entityDetails`, cada tarjeta de la respuesta (un producto, lugar, app o marca) llega con el panel de detalle que ChatGPT abre cuando el lector hace clic en ella: descripción, especificaciones, reseñas y las páginas que las respaldan. Los paneles citan sus propias páginas, así que muestran fuentes que el texto de la respuesta no incluye.

| Campo | Descripción |
| - | - |
| `name`, `category`, `query` | La tarjeta tal como la muestra la respuesta, su tipo (`product`, `local_business`, `software`, `organization`) y el nombre con el que ChatGPT la buscó. |
| `status` | `ok`, o `failed` con un `error`. |
| `markdown` | El panel en Markdown, con los chips de cita escritos como en la respuesta. |
| `sources` | Cada página citada una vez, en el orden de su primera cita: `position`, `url`, `label`, `site`, `description`. |
| `products` | La ficha de compra con la que abre el panel de un producto: `title`, `price`, `merchant`, `rating`, `num_reviews`, `url` y `offers`, con la forma de `shoppingCards[].products`. Solo cuando el panel la muestra. |
| `images` | Las fotos del panel. |
| `complete` | `false` cuando ChatGPT dejó de escribir el panel antes de terminarlo. Incluye el texto y las fuentes hasta ese punto. |

`error` es `ENTITY_DETAIL_FAILED` si falla la solicitud del panel, `ENTITY_DETAIL_EMPTY` si el panel no contiene texto y `ENTITY_DETAIL_UNAVAILABLE` si faltan los datos de la conversación o las credenciales del turno necesarios para abrirlo. Los detalles también funcionan con `payload.location`, `CN`, `HK`, respuestas de la vía alternativa e `include.html`.

Un panel que ChatGPT ya escribió antes llega en un segundo aproximadamente; uno que escribe al pedirlo tarda de 10 a 30 segundos, con hasta 4 paneles a la vez. Se abren hasta 20 tarjetas por respuesta. Los paneles no suman créditos, y cada respuesta de seguimiento recibe sus propios paneles.

```json theme={"theme":"css-variables"}
"entityDetails": [
  {
    "name": "Brooks Adrenaline GTS 25",
    "category": "product",
    "query": "Brooks Adrenaline GTS 25",
    "status": "ok",
    "markdown": "## Brooks Adrenaline GTS 25\n\nThe **Brooks Adrenaline GTS 25** is a **stability road running shoe** ... ([Brooks Running](https://www.brooksrunning.com/...))\n\n### Key specifications\n\n| Feature | Details |\n| --- | --- |\n| Heel-to-toe drop | 10 mm |\n...",
    "sources": [
      { "position": 1, "url": "https://www.brooksrunning.com/...", "label": "Men's Adrenaline GTS 25 Running Shoes | Brooks Running", "site": "Brooks Running" },
      { "position": 2, "url": "https://www.rei.com/product/249691/...", "label": "Brooks Adrenaline GTS 25 Road-Running Shoes - Men's | REI Co-op", "site": "REI" }
    ],
    "images": ["https://images.openai.com/..."],
    "complete": true
  }
]
```

## Preguntas de seguimiento

`payload.followUps` hace hasta 4 preguntas más en la misma conversación después de la primera respuesta, en orden. Cada elemento es uno de estos:

* `{ "prompt": "..." }`: una pregunta propia.
* `{ "select": { "button": 0, "choices": { "budget": "Under $100" } } }`: pulsa el botón de un formulario de seguimiento de la respuesta anterior.

`button` cuenta los botones de la respuesta desde 0 y por defecto es el primero. `choices` elige opciones por el `name` de cada nodo `choice`, o como un array en el orden del formulario; cada elección es el `value` o el `label` de una opción, o su posición desde 0. Lo que no elijas conserva la opción que ChatGPT dejó seleccionada, así que `{ "select": {} }` envía el `prompt` propio del botón.

```json theme={"theme":"css-variables"}
{
  "taskType": "CHATGPT",
  "payload": {
    "prompt": "best CRM for a small team",
    "country": "US",
    "followUps": [{ "prompt": "Which of these has the best free plan?" }]
  }
}
```

Los campos de nivel superior siguen siendo la primera respuesta. `followUps` en la respuesta lista cada respuesta adicional con la pregunta que se envió (`prompt`), lo que pulsó un `select` (`selection`: el `label` del botón y el valor de cada elección) y los mismos campos que la primera respuesta.

Cuando no se puede pulsar un `select`, las preguntas de seguimiento restantes no se hacen y `followUpsStopped` indica el `index` de esa pregunta, un `code` y un `message`:

| Código | Significado |
| - | - |
| `NO_FOLLOW_UP_FORM` | La respuesta anterior no mostró ningún formulario. |
| `BUTTON_NOT_FOUND` | No hay ningún botón en ese índice. |
| `CHOICE_NOT_FOUND` | No hay ninguna elección con ese nombre. |
| `OPTION_NOT_FOUND` | Ninguna opción coincide con la elección. |
| `PROMPT_UNAVAILABLE` | El botón no tenía ninguna pregunta que enviar. |

La tarea se completa igualmente con las respuestas obtenidas. Cada respuesta cuesta 1 crédito: la tarea reserva créditos para cada pregunta de seguimiento y solo cobra las respuestas que devuelve. `include.analysis`, `include.citationAnalysis` e `include.html` se aplican a la primera respuesta. Los demás motores rechazan `followUps` con `400 VALIDATION_ERROR`.

## Continuar una conversación más tarde

Para leer una respuesta antes de elegir la siguiente pregunta, envía una nueva tarea `CHATGPT` con `payload.continueFrom` igual al id de una tarea completada y, además, un `prompt` o un `select` que pulse un formulario de la última respuesta de esa tarea (las mismas reglas que en `followUps`).

```json theme={"theme":"css-variables"}
{
  "taskType": "CHATGPT",
  "payload": {
    "continueFrom": "8f6c1d2e-...",
    "select": { "button": 0 }
  }
}
```

* Una respuesta que muestra un formulario incluye `forms`: los `buttons` de cada formulario, cuyo orden es `select.button`, y sus `choices` con su `name`, la opción seleccionada al principio y las `options`.
* `conversation.id` es la tarea que abrió la conversación, `turn` cuenta sus respuestas hasta ahora y `expiresAt` es el último momento para continuarla, 3 horas después de su primera respuesta.
* Una continuación pregunta bajo la última respuesta de la tarea que indiques, así que indicar la misma tarea dos veces ramifica la conversación.
* Conserva el `country` y la `location` originales. Omítelos o envía los mismos valores.
* Una tarea de otra cuenta o de otro motor, una tarea que no se ha completado o un `select` no válido se rechazan con `400 VALIDATION_ERROR`. Una conversación caducada se rechaza con `400 CONVERSATION_EXPIRED`. Ninguno de los dos casos se cobra.
* Una continuación cuesta lo mismo que cualquier tarea de ChatGPT.

## Relacionado

* [Página de producto de ChatGPT](https://querying.ai/es/engines/chatgpt)
* [Resumen de motores](/es/engines/overview.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.