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

# Inicio rápido de la API de datos de búsqueda con IA

> Envía una tarea y recibe el resultado, por webhook o mediante sondeo.

[Guía de inicio](https://querying.ai/es/guides/quickstart) · [Planes y créditos de la API](https://querying.ai/es/pricing)

## 1. Configura tus credenciales

```bash theme={null}
export BASE="https://api.querying.ai"
export API_KEY="<your-key>"
```

## 2. Envía una tarea

Hazle una pregunta a Gemini. `taskType` elige el motor; `payload.prompt` es lo que preguntas.

```bash theme={null}
curl -X POST "$BASE/v1/async/task" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "taskType": "GEMINI",
    "payload": { "prompt": "best wireless earbuds 2026", "country": "US" }
  }'
```

La tarea se acepta y entra en cola:

```json theme={null}
{
  "success": true,
  "task": {
    "id": "8f2c1e40-...",
    "taskType": "GEMINI",
    "status": "QUEUED",
    "priority": 1,
    "createdAt": "2026-07-09T04:12:00.000Z"
  },
  "credits": { "creditsToCharge": 0, "creditsCharged": 0 }
}
```

<Note>
  `credits` forma parte del sobre de respuesta. Al enviar y al sondear siempre vale cero; el webhook informa el
  coste en créditos de cada motor (1–2 créditos para los motores de respuesta públicos y 12 para Prompt Research; Source Influence se mide
  por separado). Los saldos se ven en el panel.
</Note>

## 3. Recoge el resultado

<Tabs>
  <Tab title="Webhook (recomendado)">
    Añade `webhook.url` al enviar. Cuando la tarea llega a un estado final enviamos allí el resultado completo por
    POST y nunca tienes que sondear.

    ```bash theme={null}
    curl -X POST "$BASE/v1/async/task" \
      -H "Authorization: Bearer $API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "taskType": "GEMINI",
        "payload": { "prompt": "best wireless earbuds 2026" },
        "webhook": { "url": "https://your-server.example.com/hook" }
      }'
    ```

    Tu endpoint recibe `{ task, credits, response }`. Consulta [Webhooks](/es/concepts/webhooks) para el contrato
    de entrega y reintentos.
  </Tab>

  <Tab title="Sondeo">
    Omite `webhook` y consulta la tarea por id. `response` no aparece hasta que la tarea termina.

    ```bash theme={null}
    curl "$BASE/v1/async/task/8f2c1e40-..." \
      -H "Authorization: Bearer $API_KEY"
    ```

    ```json theme={null}
    {
      "success": true,
      "task": { "id": "8f2c1e40-...", "status": "COMPLETED", "...": "..." },
      "credits": { "creditsToCharge": 0, "creditsCharged": 0 },
      "response": {
        "text": "The best wireless earbuds in 2026 are ...",
        "sources": [{ "position": 1, "url": "https://...", "label": "..." }]
      }
    }
    ```

    <Warning>
      El sondeo público está disponible durante 24 horas tras la finalización. Sondea dentro de ese plazo o una
      tarea completada devolverá 404 por caducidad.
    </Warning>
  </Tab>
</Tabs>

## 4. Envío en lote

`POST /v1/async/task/batch` acepta un **array** JSON de los mismos objetos de tarea, hasta 500 por solicitud.
Puedes mezclar motores libremente en un mismo lote.

```bash theme={null}
curl -X POST "$BASE/v1/async/task/batch" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    { "taskType": "GEMINI",     "payload": { "prompt": "best wireless earbuds 2026" } },
    { "taskType": "PERPLEXITY", "payload": { "prompt": "best wireless earbuds 2026" } },
    { "taskType": "GOOGLE",     "payload": { "query":  "best wireless earbuds 2026" } }
  ]'
```

Un lote bien formado siempre devuelve `200`. Los fallos individuales aparecen como `results[].success = false`,
así que una tarea errónea nunca arrastra al resto. Consulta [Envío en lote](/es/api-reference/create-task-batch).

<Note>
  Los motores de la familia Google (`GOOGLE`, `AIMODE`, `NAVER_*`) leen `payload.query`. Los motores LLM leen
  `payload.prompt`. Enviar cualquiera de los dos supera la validación, pero cada motor lee primero el que espera.
</Note>

## Siguientes pasos

<CardGroup cols={2}>
  <Card title="Elige un motor" icon="cpu" href="/es/engines/overview">
    Cada `taskType` y lo que devuelve.
  </Card>

  <Card title="Gestiona los fallos" icon="triangle-alert" href="/es/concepts/errors">
    Códigos de error, códigos de estado y qué se puede reintentar.
  </Card>
</CardGroup>
