# Formato de respuesta: todos los campos de una búsqueda, explicados

> Formato de respuesta de la API de búsqueda: campos de /search y /extract, states de content_status y target_status, con un ejemplo. Sin KYC, con criptomonedas.

- URL: https://llmwebsearch.com/es/docs/response/
- Última actualización: 2026-10-22
- Editor: LLMWebSearch (https://llmwebsearch.com)

La respuesta de una búsqueda es un único objeto JSON: unos cuantos campos sobre la llamada y luego un array `results` ordenado. Cada resultado indica si se leyó su página y, si es así, incluye el contenido. Aquí tienes todos los campos, con los estados que un agente debe gestionar.

**Respuesta rápida — ¿Qué devuelve la API de LLMWebSearch en una búsqueda?**

**LLMWebSearch** devuelve JSON con el `query`, `created_at`, `credits_used` y un array `results` ordenado. Cada resultado tiene su posición, título, URL, host y snippet, y un `content_status`; cuando es `ok`, el contenido principal de la página está en `content` con un `word_count`. Una búsqueda con hasta 3 páginas leídas cuesta 1 crédito, desde 1,20 US$/1K búsquedas a fecha de octubre de 2026. Sin KYC; paga con criptomonedas.

## ¿Qué campos describen la llamada?

Nivel superior de una respuesta `/search`.

| Campo | Tipo | Significado |
| --- | --- | --- |
| `query` | string | La consulta tal como la ejecutamos, tras recortar espacios |
| `created_at` | string | Cuándo se ejecutó la búsqueda, ISO 8601 en UTC |
| `credits_used` | entero | Lo que costó la llamada: 1, o 2 cuando `read` era de 4 a 10 |
| `results` | array | Resultados ordenados, del mejor al peor, como máximo `max_results` elementos |

## ¿Qué campos incluye cada resultado?

Un campo que ni la página ni el resultado de búsqueda proporcionan se omite en lugar de enviarse vacío.

| Campo | Tipo | Cuándo aparece | Significado |
| --- | --- | --- | --- |
| `position` | entero | Siempre | Posición en la búsqueda, empezando por 1 |
| `title` | string | Siempre | Título del resultado |
| `url` | string | Siempre | Dirección de la página |
| `host` | string | Siempre | Nombre del host de la página, útil para agrupar o citar |
| `snippet` | string | Siempre | Extracto corto que muestra la búsqueda |
| `published_at` | string | Cuando se conoce una fecha | Fecha de publicación de la página o del resultado de búsqueda |
| `content_status` | string | Siempre | Si se leyó la página y, si no, por qué |
| `content` | string | Cuando `content_status` es `ok` | Contenido principal en Markdown o texto plano, cortado en `max_chars` |
| `word_count` | entero | Cuando `content_status` es `ok` | Palabras de todo el texto extraído, contadas antes del corte |
| `target_status` | entero | Con `target_refused` | El código de estado HTTP con el que respondió el sitio, como 403 o 429 |

## ¿Qué significa cada content_status?

Nada de esto cambia el precio de la búsqueda. Describen una página, nunca la llamada completa.

| `content_status` | Significado | Qué debería hacer un agente |
| --- | --- | --- |
| `ok` | Se leyó la página; `content` contiene su texto principal | Úsalo y cita el `url` |
| `not_requested` | El resultado está más allá del recuento de `read` | Sube `read` o léelo a través de `/extract` si es necesario |
| `blocked_by_robots` | El robots.txt del sitio no permite nuestro lector en esta página | Apóyate en el snippet o en otra fuente |
| `blocked_by_site_policy` | El sitio declara `Content-Signal: ai-input=no` | Apóyate en el snippet o en otra fuente |
| `target_refused` | El sitio rechazó la solicitud; consulta `target_status` | No reintentes la página; usa otra fuente |
| `fetch_failed` | Error de DNS, TLS o de conexión, o la página ya no existe | Prueba otro resultado; un reintento posterior puede funcionar |
| `fetch_timeout` | La página no respondió en 15 segundos | Prueba otro resultado; un reintento posterior puede funcionar |
| `unsupported_content` | El enlace es un archivo que no podemos convertir en texto | Usa el snippet u otro resultado |

## ¿Cómo se ve una respuesta completa?

El ejemplo siguiente pidió 5 resultados con los primeros 4 leídos, así que costó 2 créditos. Se leyeron los resultados 1 y 3. El resultado 2 pertenece a un sitio cuyo robots.txt deja fuera a nuestro lector, el resultado 4 rechazó la solicitud y el resultado 5 queda más allá de `read`. Los títulos, las URL y los valores son ilustrativos.

*Respuesta de POST /search (ilustrativa)*

```json
{
  "query": "how to rotate api keys without downtime",
  "created_at": "2026-10-22T10:15:04Z",
  "credits_used": 2,
  "results": [
    {
      "position": 1,
      "title": "Rotating API keys",
      "url": "https://docs.example.com/security/key-rotation",
      "host": "docs.example.com",
      "snippet": "Create a second key, deploy it everywhere, then revoke the first one.",
      "published_at": "2026-09-30",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key.\n2. Deploy it to every service.\n3. Revoke the old key.",
      "word_count": 948
    },
    {
      "position": 2,
      "title": "Key rotation checklist",
      "url": "https://blog.example.org/key-rotation-checklist",
      "host": "blog.example.org",
      "snippet": "Keep two keys active during the switch and alert on the old one.",
      "content_status": "blocked_by_robots"
    },
    {
      "position": 3,
      "title": "Secrets management basics",
      "url": "https://security.example.net/secrets-basics",
      "host": "security.example.net",
      "snippet": "Never commit keys to a repository.",
      "content_status": "ok",
      "content": "# Secrets management basics\n\n**Never** commit keys to a repository.",
      "word_count": 1310
    },
    {
      "position": 4,
      "title": "Key management service guide",
      "url": "https://cloud.example.com/kms-guide",
      "host": "cloud.example.com",
      "snippet": "Store keys in a managed vault and rotate them on a schedule.",
      "content_status": "target_refused",
      "target_status": 403
    },
    {
      "position": 5,
      "title": "API key best practices",
      "url": "https://dev.example.com/api-key-best-practices",
      "host": "dev.example.com",
      "snippet": "Scope each key to one service and one environment.",
      "content_status": "not_requested"
    }
  ]
}
```

## ¿Qué resultados reciben un estado de página distinto de not_requested?

Solo los primeros `read` resultados y cada elemento de una llamada de `/extract`. Esas son las páginas que nuestro lector realmente intentó. Todo lo que va después del recuento de `read` se queda en `not_requested`, independientemente de lo que habría respondido el sitio.

El orden nunca cambia: el lector trabaja sobre las posiciones 1, 2, 3 y así sucesivamente, nunca sobre un resultado posterior en lugar de uno anterior que falló. Si un agente necesita un reemplazo para una página rechazada, puede leer el siguiente resultado mediante `/extract`.

## ¿Cómo es una respuesta de extract?

`/extract` devuelve `credits_used` y un array `results` en el orden de las URL que enviaste. Cada elemento tiene el `url` y un `content_status`; con `ok` añade `title`, `content` y `word_count`, y con `target_refused` añade `target_status`. No hay `position`, `host` ni `snippet`, porque no se ejecutó ninguna búsqueda.

La [referencia de extract](https://llmwebsearch.com/es/docs/extract/) muestra un ejemplo completo y explica cómo se cuentan sus créditos.

## ¿Cómo convierto los resultados en contexto para un modelo?

Numera las fuentes, mantén la URL junto a cada una y pasa solo lo que el modelo necesita. Un formato compacto funciona bien: `[1] title — url`, luego el contenido de esa página y después la siguiente fuente. Pide al modelo que cite con los mismos números.

Cuando un resultado no tiene contenido, dale al modelo su snippet en su lugar e indica que es solo un snippet. Así evitas respuestas basadas en una página que el modelo nunca vio. La [página de Python](https://llmwebsearch.com/es/docs/python/) tiene un bucle corto que hace todo esto dentro de un presupuesto de tokens.

## Formato de respuesta: preguntas frecuentes

### ¿El contenido siempre es Markdown?

Markdown por defecto. Envía `format: "text"` para obtener texto plano sin marcado, por ejemplo cuando solo cuentas palabras o clasificas páginas. El nombre del campo sigue siendo `content`.

### ¿Por qué falta published_at en algunos resultados?

Muchas páginas no indican ninguna fecha, y algunos resultados de búsqueda tampoco la muestran. En ese caso el campo se omite, así que comprueba si está presente antes de usarlo.

### ¿Pueden aparecer campos nuevos más adelante?

Sí. En la versión 1, los campos pueden añadirse, pero nunca se renombran ni se eliminan. Escribe tu parser para que ignore los campos que no conozca.

### ¿El contenido se almacena de vuestro lado?

No. No entrenamos ningún modelo con tus consultas ni con lo que devuelve la API, y no añadimos ninguna regla propia contra almacenar resultados; los derechos de los sitios cuyas páginas lees siguen aplicándose. Nuestro registro de solicitudes solo guarda un breve rastro de cada llamada, descrito en la [página de privacidad](https://llmwebsearch.com/es/privacy/).

---

LLMWebSearch: LLMWebSearch es una API de búsqueda web para agentes de IA que devuelve resultados clasificados con el contenido de las mejores páginas en Markdown, se paga con criptomonedas y sin subir documentos de identidad. Los créditos prepago desde 1,20 US$/1K búsquedas nunca caducan. Sin KYC: sin ID, sin selfie, sin documentos. Paga con criptomonedas.
