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

# Inicio rápido

AI Search le da a tu aplicación acceso en vivo a la web a través de una única pasarela de Novita. En lugar de registrarte con cada proveedor de búsqueda, gestionar claves separadas y aprender distintos esquemas de autenticación, llamas a Novita con una sola clave de API y eliges el motor de búsqueda que quieras en cada solicitud.

Esta guía te lleva desde cero hasta una búsqueda web funcional en unos minutos. Te autenticarás con una sola clave de API de Novita, ejecutarás una búsqueda y verás cómo cambiar de proveedor sin modificar tu configuración.

## Antes de empezar

1. Una cuenta de Novita y una clave de API. Consulta [Gestión de claves de API](/docs/es/api-reference/basic-authentication) para crear una.
2. Exporta tu clave para que los ejemplos siguientes puedan usarla. `NOVITA_API_KEY` es simplemente tu clave de API de Novita del paso 1; la misma clave funciona para todos los proveedores:

```bash theme={"system"}
export NOVITA_API_KEY="<Your API Key>"
```

Todos los endpoints de AI Search comparten la misma URL base y autenticación:

* **URL base:** `https://api.novita.ai`
* **Encabezado de autenticación:** `Authorization: Bearer <api_key>`
* **Tipo de contenido:** `application/json`

## Tu primera búsqueda

El siguiente ejemplo ejecuta una búsqueda de Exa. Cada solicitud es simplemente una ruta más un cuerpo JSON.

<CodeGroup>
  ```bash curl theme={"system"}
  curl -X POST 'https://api.novita.ai/v3/exa/search' \
    -H "Authorization: Bearer ${NOVITA_API_KEY}" \
    -H 'Content-Type: application/json' \
    -d '{
      "query": "latest open-source LLM releases",
      "numResults": 5
    }'
  ```

  ```python Python theme={"system"}
  import os
  import requests

  resp = requests.post(
      "https://api.novita.ai/v3/exa/search",
      headers={
          "Authorization": f"Bearer {os.environ['NOVITA_API_KEY']}",
          "Content-Type": "application/json",
      },
      json={
          "query": "latest open-source LLM releases",
          "numResults": 5,
      },
  )
  resp.raise_for_status()

  for result in resp.json()["results"]:
      print(result["title"], "-", result["url"])
  ```

  ```javascript JavaScript theme={"system"}
  const resp = await fetch("https://api.novita.ai/v3/exa/search", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.NOVITA_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      query: "latest open-source LLM releases",
      numResults: 5,
    }),
  });

  const data = await resp.json();
  for (const result of data.results) {
    console.log(`${result.title} - ${result.url}`);
  }
  ```
</CodeGroup>

## Cambiar de motor de búsqueda

Cambiar de motor de búsqueda significa cambiar la **ruta** y el **cuerpo de la solicitud** para que coincidan con el proveedor; tu clave, host y encabezado de autenticación siguen siendo los mismos. Aquí está la misma intención expresada para Tavily:

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/tavily/search' \
  -H "Authorization: Bearer ${NOVITA_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "latest open-source LLM releases",
    "max_results": 5
  }'
```

Observa las pequeñas diferencias: Exa usa `numResults`, Tavily usa `max_results`. La lista completa de parámetros de cada proveedor está en su referencia de API.

## Trae tu propio SDK del proveedor

AI Search es una integración passthrough, por lo que el SDK oficial de un proveedor funciona siempre que te permita sobrescribir la URL base: apúntalo a la ruta de pasarela correspondiente y pasa tu clave de Novita. El SDK de Python de Exa, por ejemplo, acepta un `base_url`:

```python theme={"system"}
import os
from exa_py import Exa

exa = Exa(
    api_key=os.environ["NOVITA_API_KEY"],
    base_url="https://api.novita.ai/v3/exa",
)

results = exa.search("latest open-source LLM releases", num_results=5)
for r in results.results:
    print(r.title, "-", r.url)
```

<Note>
  Si un SDK no expone una configuración de URL base, simplemente llama a los endpoints REST directamente con cualquier cliente HTTP, como se muestra arriba; ese camino siempre funciona.
</Note>

## Cómo funciona

Novita expone cada proveedor como un endpoint passthrough. Tu solicitud se autentica con tu clave de API de Novita y luego se reenvía al proveedor upstream usando el formato de solicitud y respuesta propio del proveedor.

* **Una credencial.** Usa tu clave de API de Novita existente como `Bearer <api_key>` para todos los proveedores.
* **Cuerpos nativos del proveedor.** Las formas de solicitud y respuesta coinciden con el proveedor upstream, por lo que los ejemplos y formatos de solicitud propios del proveedor se mantienen; simplemente apunta la URL base a Novita.
* **Cambia de motor por solicitud.** Cambiar de proveedor significa cambiar la ruta y el cuerpo, no tu autenticación ni la configuración de tu cuenta.

Esto es útil siempre que un modelo necesite información con la que no fue entrenado: eventos actuales, documentación que cambia rápidamente, precios o cualquier dato que esté en la web abierta. Combínalo con la [LLM API](/docs/es/guides/llm-api) para crear generación aumentada por recuperación (RAG), agentes de investigación y asistentes fundamentados en la web.

## Proveedores compatibles

<CardGroup cols={2}>
  <Card title="Exa" icon="brain">
    Búsqueda web neuronal y semántica con extracción de contenido y síntesis de respuestas integradas. Potente para investigación, encontrar páginas por significado y generar salida estructurada.
  </Card>

  <Card title="Tavily" icon="bolt">
    Búsqueda y recuperación rápidas, optimizadas para LLM, con rastreo y mapeo de sitios. Potente para temas de noticias y finanzas, pipelines de extracción y consultas de baja latencia.
  </Card>
</CardGroup>

## Capacidades de un vistazo

| Capacidad               | Qué hace                                              |                           Exa                          |                           Tavily                          |
| ----------------------- | ----------------------------------------------------- | :----------------------------------------------------: | :-------------------------------------------------------: |
| Búsqueda                | Encuentra páginas relevantes a partir de una consulta |   [Búsqueda](/docs/es/api-reference/model-apis-exa-search)  |   [Búsqueda](/docs/es/api-reference/model-apis-tavily-search)  |
| Extracción de contenido | Extrae texto limpio/metadata desde URLs               | [Contenido](/docs/es/api-reference/model-apis-exa-contents) | [Extracción](/docs/es/api-reference/model-apis-tavily-extract) |
| Síntesis de respuestas  | Genera una respuesta citada a partir de resultados    |  [Respuesta](/docs/es/api-reference/model-apis-exa-answer)  |                 mediante `include_answer`                 |
| Rastreo de sitios       | Sigue enlaces para recopilar muchas páginas           |                            —                           |    [Rastreo](/docs/es/api-reference/model-apis-tavily-crawl)   |
| Mapeo de sitios         | Descubre las URLs accesibles de un sitio              |                            —                           |      [Mapa](/docs/es/api-reference/model-apis-tavily-map)      |

## Referencia de endpoints

| Proveedor | Endpoint                                                  | Ruta                      |
| --------- | --------------------------------------------------------- | ------------------------- |
| Exa       | [Búsqueda](/docs/es/api-reference/model-apis-exa-search)       | `POST /v3/exa/search`     |
| Exa       | [Contenido](/docs/es/api-reference/model-apis-exa-contents)    | `POST /v3/exa/contents`   |
| Exa       | [Respuesta](/docs/es/api-reference/model-apis-exa-answer)      | `POST /v3/exa/answer`     |
| Tavily    | [Búsqueda](/docs/es/api-reference/model-apis-tavily-search)    | `POST /v3/tavily/search`  |
| Tavily    | [Extracción](/docs/es/api-reference/model-apis-tavily-extract) | `POST /v3/tavily/extract` |
| Tavily    | [Rastreo](/docs/es/api-reference/model-apis-tavily-crawl)      | `POST /v3/tavily/crawl`   |
| Tavily    | [Mapa](/docs/es/api-reference/model-apis-tavily-map)           | `POST /v3/tavily/map`     |

## Solución de problemas

* **400 Bad Request** — un parámetro no coincide con el esquema del proveedor. Comprueba que estés usando los nombres de campo de ese proveedor (por ejemplo, `numResults` frente a `max_results`).
* **429 Too Many Requests** — has alcanzado un límite de frecuencia. Espera y vuelve a intentarlo, o reduce el volumen de solicitudes.

Para ver la lista completa, consulta la sección de errores en cualquier página de [referencia de API](/docs/es/api-reference/model-apis-tavily-search) de AI Search.

## Adónde ir después

<Card title="Respuestas fundamentadas en la web y RAG" icon="link" href="/docs/es/guides/ai-search-grounded-answers">
  Envía los resultados de búsqueda a la LLM API para crear pipelines de generación aumentada por recuperación (RAG) con respuestas citadas.
</Card>
