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

# Introduction

> Cleariflow Web Scraping API delivers JavaScript-rendered page extraction through a modern RESTful JSON interface with SSRF protection and flexible rendering options.

## Getting started

<Card title="Synchronous scrape" icon="browser" href="scrape/scrape">
  The `scrape` endpoint runs a browser session and returns rendered HTML in a single request — ideal for low-latency integrations.
</Card>

<Card title="Async jobs" icon="clock" href="scrape/jobs">
  The `jobs` endpoints enqueue long-running scrapes and let you poll for status and results — ideal for high-volume or slow pages.
</Card>

### REST Architecture

The Web Scraping API follows REST principles, utilizing predictable resource-oriented URLs and standard HTTP status codes for seamless integration and error handling.

### HTTPS Security

All API communications are secured using TLS 1.2 or higher encryption protocols to ensure data integrity and privacy.

### API Versioning

The Web Scraping API maintains backward compatibility through versioning, currently operating on Version 1.

### Authentication

Your API key serves as the exclusive credential for accessing the Web Scraping API. Each Cleariflow service requires a unique key. Include your key in the JSON body as `api_key`.

### Base URL

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

### Page rendering

Pages are rendered in a real headless browser. JavaScript is fully executed before content is returned. Built-in SSRF protection blocks requests to localhost and private IP ranges.

## Response and error codes

When requests fail, the API returns structured JSON error responses with specific codes and descriptions for effective troubleshooting.

| Code | Type                  | Details                                                                                                                                                     |
| ---- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200  | OK                    | Everything worked as expected.                                                                                                                              |
| 202  | Accepted              | Async job was enqueued successfully.                                                                                                                        |
| 400  | Bad request           | Bad request — invalid URL, blocked target, or malformed payload.                                                                                            |
| 401  | Unauthorized          | The request was unacceptable. Typically due to the API key missing or incorrect.                                                                            |
| 422  | Quota reached         | The request was aborted due to insufficient API credits. (Free plans)                                                                                       |
| 429  | Too many requests     | The request was aborted due to the number of allowed requests per second being reached. This happens on free plans as requests are limited to 1 per second. |
| 500  | Internal server error | The request could not be completed due to an error on the server side.                                                                                      |
