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

# Trabajos asíncronos

> Los endpoints `jobs` encolan tareas de scraping y permiten consultar el estado y los resultados — ideal para alto volumen o páginas lentas.

## Primeros pasos

### URL base

```
https://scrape.cleariflow.com/v1/jobs
```

## Crear un trabajo

Encole un trabajo de scraping asíncrono con la misma carga `ScrapeRequest` que usa el endpoint síncrono.

### Solicitud de ejemplo

```bash theme={"system"}
curl -X POST 'https://scrape.cleariflow.com/v1/jobs' \
  -H 'Content-Type: application/json' \
  -d '{
    "request": {
      "api_key": "YOUR_UNIQUE_API_KEY",
      "url": "https://example.com"
    },
    "priority": 10
  }'
```

Esta solicitud exitosa devuelve un identificador de trabajo:

<ResponseExample>
  ```json theme={"system"}
  {
    "job_id": "550e8400-e29b-41d4-a716-446655440000"
  }
  ```
</ResponseExample>

### Parámetros para crear un trabajo

<ParamField body="request" type="Object" required>
  Un objeto `ScrapeRequest` con los mismos campos que el endpoint de scraping síncrono (`url`, `render`, `actions`, `cookies`, etc.).
</ParamField>

<ParamField body="priority" type="Integer">
  Prioridad del trabajo. Los valores más altos se procesan primero. Por defecto: 0.
</ParamField>

## Obtener estado del trabajo

Consulte un trabajo por ID para verificar su estado y recuperar resultados al completarse.

### URL base

```
https://scrape.cleariflow.com/v1/jobs/{job_id}
```

### Solicitud de ejemplo

```bash theme={"system"}
curl 'https://scrape.cleariflow.com/v1/jobs/550e8400-e29b-41d4-a716-446655440000'
```

Mientras el trabajo está en ejecución:

<ResponseExample>
  ```json theme={"system"}
  {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "running"
  }
  ```
</ResponseExample>

Cuando el trabajo se completa con éxito:

<ResponseExample>
  ```json theme={"system"}
  {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "done",
    "result": {
      "ok": true,
      "html": "<!DOCTYPE html><html>...</html>",
      "meta": {
        "elapsed_ms": 8123
      }
    }
  }
  ```
</ResponseExample>

### Valores de estado del trabajo

| Status    | Description                                         |
| --------- | --------------------------------------------------- |
| `queued`  | El trabajo está en cola de espera.                  |
| `running` | La sesión del navegador está activa.                |
| `done`    | Scraping completado; `result` contiene la salida.   |
| `failed`  | Scraping fallido; `error` contiene una descripción. |

### Parámetros de respuesta

<ResponseField name="job_id" type="String">
  Identificador único del trabajo asíncrono.
</ResponseField>

<ResponseField name="status" type="String">
  Estado actual del trabajo: `queued`, `running`, `done` o `failed`.
</ResponseField>

<ResponseField name="result" type="Object">
  El objeto de resultado del scraping (misma estructura que la respuesta del endpoint síncrono). Presente cuando `status` es `done`.
</ResponseField>

<ResponseField name="error" type="String">
  Mensaje de error. Presente cuando `status` es `failed`.
</ResponseField>

<ResponseField name="meta" type="Object">
  Metadatos adicionales sobre la ejecución del trabajo.
</ResponseField>
