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.
/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.
Request
Send Content-Type: application/json with a urls array. urls is the only field.
Body parameters
| 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.
| 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.