# Extract API

Fetch readable text from URLs you already know — 1 to 20 public URLs in one call, with per-URL failure reporting and automatic refunds. No search runs and no answer is generated.

**POST** `/v1/extract`

Legacy alias: POST https://searchpipe.tech/extract (permanent, same handler and billing).

## Authorize

Authenticate with your sp- API key in the `Authorization: Bearer sp-YOUR_KEY` header; `X-API-Key: sp-YOUR_KEY` is also accepted. Create or rotate keys in [API Keys](https://searchpipe.tech/dashboard/api-keys).

## Request

Send `Content-Type: application/json` with a `urls` array. `urls` is the only field.

### Body parameters

**Body**

| Parameter | Type | Description |
| --- | --- | --- |
| `urls` | string[] · required | Required array of 1–20 URLs; each URL is limited to 2,048 characters. Only public HTTP(S) URLs are allowed. |

### Request example

```
curl -X POST "https://searchpipe.tech/v1/extract" \
  -H "Authorization: Bearer sp-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "urls": [
    "https://fastapi.tiangolo.com/tutorial/"
  ]
}'
```

## Response

A partial or fully failed extraction can still return HTTP 200 — always inspect `failed_results` instead of relying on the status code.

**Response fields**

| Field | Meaning |
| --- | --- |
| `results[]` | Successful items contain url and raw_content (extracted text, not HTML). |
| `failed_results[]` | Failed items contain url and error. A partial or fully failed extraction can still return HTTP 200; inspect this array. |

```
{
  "results": [
    {
      "url": "https://fastapi.tiangolo.com/tutorial/",
      "raw_content": "FastAPI is a modern, fast (high-performance) web framework..."
    }
  ],
  "failed_results": [
    {
      "url": "https://expired-example.test/page",
      "error": "fetch failed after retries"
    }
  ]
}
```

Illustrative example: one succeeded URL and one refused URL. `raw_content` is extracted readable text, not the original HTML.

## Billing and refunds

- **Default: 1 credit / URL; failed URLs refunded.** Credits are deducted before fetching.
- **Failed URLs are refunded** automatically; if every URL in the batch fails, the whole charge is refunded. A batch's net cost is the number of pages actually extracted.
- Extract does not run LLM summarization or reranking and does not use the search result cache — there is no depth tier and no cache-hit billing.

## Limits and guards

- 1–20 URLs per request; each URL is limited to 2,048 characters.
- Only public HTTP(S) URLs are allowed — private and reserved addresses (intranets, localhost, link-local ranges) are refused before any network call, and redirects are re-validated hop by hop.
- Downloads are bounded per page; very large documents are truncated rather than rejected, and the URL still counts as succeeded.

## Related pages

[Extract API product page](https://searchpipe.tech/extract-api)[Search API reference](https://searchpipe.tech/docs/search)[Verify API reference](https://searchpipe.tech/docs/verify)[Docs home](https://searchpipe.tech/docs)
