# Fetch

Retrieve the page behind a citation as we archived it: each URL's most recent text snapshot at
or before a given date. 

  [Create an API key →](https://dashboard.talarion.com/api-keys)
  [Search →](/search)

## Request

#### curl

```bash
curl -X POST https://api.talarion.com/v1/fetch \
  -H "Authorization: Bearer $TALARION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://www.anthropic.com/news/claude-opus-4-8"],
    "as_of": "2026-06-01"
  }'
```

#### Python

```python
import os
import requests

resp = requests.post(
    "https://api.talarion.com/v1/fetch",
    headers={"Authorization": f"Bearer {os.environ['TALARION_API_KEY']}"},
    json={
        "urls": ["https://www.anthropic.com/news/claude-opus-4-8"],
        "as_of": "2026-06-01",
    },
)
resp.raise_for_status()

for doc in resp.json()["results"]:
    print(doc["url"], doc["content_date"])
    if doc["text"]:
        print(doc["text"][:500])
```

#### TypeScript

```typescript
const res = await fetch("https://api.talarion.com/v1/fetch", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TALARION_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    urls: ["https://www.anthropic.com/news/claude-opus-4-8"],
    as_of: "2026-06-01",
  }),
});

const { results } = await res.json();
console.log(results);
```

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | string[] | Yes | Up to **20 URLs**, deduplicated server-side; extras beyond 20 are dropped, not rejected. URLs are normalized before lookup (scheme, `www.`, trailing slashes, tracking parameters); other query parameters are significant. |
| `as_of` | date or datetime | No | Return each page's most recent snapshot at or before this instant, ISO 8601. Defaults to now (UTC). |

## Response

A JSON object with a `results` array, with one entry per URL. Each
entry carries the `url` as initially provided, `content_date` (the date the content is from — the
same date `as_of` filters on), and `text`, our extracted text of the page. `text` is `null`
when we hold nothing for that URL as of that date — that's the answer, not an error: don't
retry it.

```json
{
  "as_of": "2026-06-01T00:00:00Z",
  "results": [
    {
      "url": "https://www.anthropic.com/news/claude-opus-4-8",
      "content_date": "2026-05-15T09:31:44Z",
      "text": "Claude Opus 4.8 is our most capable model yet…"
    }
  ]
}
```

## Errors & limits

| Status | Meaning |
|--------|---------|
| `401` | Missing or invalid API key. |
| `402` | Fetch requires an active subscription. Add a payment method in [Billing](https://dashboard.talarion.com/billing). |
| `503` + `Retry-After` | A snapshot's bytes are seconds away from being readable. Retry after the given interval. |
