The endpoint path is
/web/enrich/live (not /web/fetch/live) because it
follows the Crustdata convention where “enrich” means adding data to a known
identifier — in this case, enriching a URL with its page content.Request body
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
urls | string[] | Yes | — | URLs to fetch. Min: 1, max: 10. Must include http:// or https://. |
solveCloudflare | boolean | No | false | Attempt to bypass Cloudflare protection. |
Response body
The response is an array (not an object) — one entry per URL in your request.| Field | Type | Description |
|---|---|---|
success | boolean | Whether this URL was fetched successfully. |
url | string? | The URL that was fetched. null if the fetch failed. |
timestamp | integer? | Unix timestamp (seconds) when fetched. null on failure. |
pageTitle | string? | The <title> tag content. null on failure. |
content | string? | Full HTML content of the page. null on failure. |
Timestamps: Fetch timestamps are in seconds. Search timestamps are in milliseconds. Account for this when comparing timestamps across endpoints.
Two kinds of failure, two places to check:
- Request-level errors (
400,401) — the entire request failed. You get an error object, not an array. Caused by missing fields, empty arrays, or bad auth. - Per-URL failures within a
200— individual entries withsuccess: falseandnullfields. Caused by unreachable URLs, timeouts, or bot protection.
success for each entry in the array.Fetch a single URL
The simplest request fetches one URL and returns its HTML content.The
content field is trimmed here. It contains the full HTML of the fetched page.content using an HTML parser (BeautifulSoup for Python, Cheerio for Node.js) to extract specific elements like text, links, or metadata.
Fetch multiple URLs
Pass up to 10 URLs to fetch their content in parallel.Current platform behavior: The response array order may differ from the
request order. Match successful results by their
url field, not by array index.Handle partial failures
When some URLs succeed and others fail, the request still returns200. Failed URLs have success: false with all other fields as null.
Correlating failures to input URLs
Failed entries haveurl: null, so you cannot directly identify which input URL failed. To correlate failures:
- Track the URLs you sent.
- Collect the
urlvalues from all successful entries. - Any input URL not in the successful set is the one that failed.
Bypass Cloudflare protection
Some websites use Cloudflare to block automated requests. SetsolveCloudflare: true to attempt to bypass this protection.
Current platform behavior: Cloudflare bypass is not guaranteed. Some
sites have additional protections that may still block the request.
Processing fetched content
Thecontent field returns raw HTML. Here are common next steps:
| Task | Approach |
|---|---|
| Extract text | Parse HTML and strip tags (BeautifulSoup, Cheerio, etc.) |
| Extract links | Find all <a> tags and their href attributes |
| Extract metadata | Parse <meta> tags for SEO data (description, og:title, etc.) |
| Detect changes | Fetch periodically and diff the content or pageTitle fields |
| Resolve relative URLs | Combine relative paths with the base url from the response |
Error handling
Fetch returns request-level errors for invalid input or auth failures. These are separate from per-URLsuccess: false entries within a 200 response.
Common gotchas
| Mistake | Fix |
|---|---|
Omitting http:// or https:// in URLs | All URLs must include the protocol prefix. |
| Sending more than 10 URLs | The API accepts a maximum of 10 URLs per request. Batch larger lists. |
| Assuming response order matches request | Match results by the url field, not by array index. |
Treating a 200 as all-success | A 200 can contain failed entries. Check success for each item. |
Sending an empty urls array | Returns 400: "urls: This list may not be empty.". |
| Expecting JavaScript-rendered content | Current platform behavior: The API fetches server-side HTML. JavaScript-heavy SPAs may return minimal HTML. |
| Comparing Search and Fetch timestamps | Search uses milliseconds, Fetch uses seconds. Divide Search by 1000 to compare. |
Next steps
- Web Search — search the web to find URLs to fetch.
- Web API Examples — ready-to-copy patterns for common workflows.

