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

# Your first scrape

> Make a single-URL request and understand every field in the response.

The shortest possible Reader request is a single URL. Let's make one, walk through what comes back, and know what each field means.

## Get a key

Sign up at [console.reader.dev](https://console.reader.dev) (free tier: 1,000 credits/month, no card). Copy your API key from the dashboard; it starts with `rdr_`.

```bash theme={null}
export READER_KEY="rdr_your_key"
```

## Make the request

```bash theme={null}
curl -X POST https://api.reader.dev/v1/read \
  -H "x-api-key: $READER_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com" }'
```

Or with the JS SDK:

```ts theme={null}
import { ReaderClient } from "@vakra-dev/reader-js";

const reader = new ReaderClient({ apiKey: process.env.READER_KEY! });
const result = await reader.read({ url: "https://example.com" });

if (result.kind === "scrape") {
  console.log(result.data.markdown);
}
```

Or Python:

```python theme={null}
from reader_py import ReaderClient

reader = ReaderClient(api_key=os.environ["READER_KEY"])
result = reader.read(url="https://example.com")

if result.kind == "scrape":
    print(result.data.markdown)
```

## The response

```json theme={null}
{
  "success": true,
  "data": {
    "url": "https://example.com",
    "rawHtml": "<html><head><title>Example Domain</title>...</head><body>...</body></html>",
    "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples...",
    "metadata": {
      "title": "Example Domain",
      "description": null,
      "statusCode": 200,
      "duration": 487,
      "cached": false,
      "proxyMode": "standard",
      "scrapedAt": "2026-04-04T12:00:00Z"
    }
  }
}
```

Field-by-field:

* `success: true`: the response envelope shape. Errors have `success: false`.
* `data.url`: canonical URL after any redirects
* `data.markdown`: the content, cleaned and converted to markdown
* `metadata.title` / `description`: extracted from the page's `<title>` and `<meta>` tags
* `metadata.statusCode`: HTTP status the target site returned
* `metadata.duration`: milliseconds Reader spent on the scrape
* `metadata.cached`: `true` if this came from cache (free), `false` if it was a fresh fetch
* `metadata.proxyMode`: which mode actually ran (`"standard"` or `"premium"`). See [Proxy modes](/home/concepts/proxy-modes).
* `metadata.scrapedAt`: when the content was captured (on cache hits, this is the original capture time)

## You just spent 1 credit

By default Reader used `proxyMode: "standard"` (1 credit). Your balance dropped by 1. Check it:

```bash theme={null}
curl https://api.reader.dev/v1/usage/credits -H "x-api-key: $READER_KEY"
```

## What's next

* Try [requesting HTML alongside markdown](/home/guides/getting-started/markdown-and-html)
* [Strip unwanted boilerplate](/home/guides/getting-started/main-content)
* [Fetch many URLs at once](/home/guides/advanced/batch-scraping)
