JustSERPDocs
Web page

Any web page by its URL

The page at `url`: its body (HTML, or markdown with `format: "markdown"`; JSON, RSS, XML and other text as the site sent it; anything else base64), the address it ended on, the redirects on the way (five at most), four of its headers and how it was got.

GET
/v1/web/page

The page at url: its body (HTML, or markdown with format: "markdown"; JSON, RSS, XML and other text as the site sent it; anything else base64), the address it ended on, the redirects on the way (five at most), four of its headers and how it was got.

When a plain fetch meets a bot wall, a refusal (401, 403, 407, 429), a server error or a page that is only a script, the page is rendered in full (method says which). Any other status is the site's answer and is returned as it is: a 404 page is a 200 with status_code: 404.

A URL that one of our engines reads (a Google search, a Google Maps search or place, a Yelp business, a Trustpilot or Tripadvisor profile, an Eventbrite event, ...) is answered by that engine: the answer is that engine's own, with method: "engine". use_engines: false asks for the page itself instead.

Authorization

headerX-API-Key<token>

Your API key.

Query Parameters

cancel_token?string

A name you make up for this request (a UUID is fine), so you can later GET /v1/cancel with it. Only you know it, so only you can cancel. Use a new one for every request, retries included: a cancelled token stays cancelled for a few minutes.

Length1 <= length <= 128
url*string

The page. Fetched as sent; on the public web only (a private or local address is a 400, also as a redirect's target).

Match^https?://
Lengthlength <= 2048
format?string

markdown converts an HTML page; other bodies are returned as they are.

Default"html"
Value in"html""markdown"
only_main_content?boolean

With format: "markdown": the page's content alone (navigation, footers and the like left out), or the whole page with false.

Defaulttrue
use_engines?boolean

A URL one of our engines reads is answered by that engine. false fetches the page itself.

Defaulttrue
country?string

The country the page is loaded from. The US when left out.

Match^[A-Za-z]{2}$

Response Body

The page, or, for a URL an engine reads, that engine's answer (method is engine).

application/json
  1. response

The first three keys of every parsed 200 (the answer is the document itself, no success/data envelope): what the search was (search_metadata), what it asked (search_parameters), the parser's own search_information ({} when it has none). The engine's blocks follow, at the same level. An engine whose answer is a list puts it under results.

search_metadata*
search_parameters*

The request's own fields as sent, engine first, without cancel_token.

search_information*

The parser's own, e.g. yelp_search's; otherwise {}.

url*string

The address asked for.

final_url*string

Where the redirects ended.

status_code*|

The site's HTTP status for the final page (a 404 page is returned, with 404 here).

method*string

How the page was got.

Value in"non-browser""browser"
redirects*array<>

Every hop, in order. kind is client for a redirect by script or meta refresh (rendered pages only).

Itemsitems <= 5
headers*

Four of the final response's headers, each key always present, null when the site did not send it.

title*|

An HTML page's title element.

body_format*string

html as served, or as drawn after its scripts ran when the page was rendered; markdown converted from it; text a body that is not HTML, as sent (JSON, RSS, XML, CSV, plain text); base64 anything else (a PDF, an image).

Value in"html""markdown""text""base64"
body*string
truncated*boolean

The body was longer than 10MB and was cut.

Example Request
curl -X GET 'https://api.justserp.com/v1/web/page?url=https%3A%2F%2Fhnrss.org%2Ffrontpage&format=html'
Example Response
{  "search_metadata": {    "id": "search_0f3a9c1d7b2e4a65c8d91f20",    "status": "Success",    "created_at": "2026-10-26T09:14:03Z",    "request_url": "https://hnrss.org/frontpage"  },  "search_parameters": {    "engine": "web_page",    "url": "https://hnrss.org/frontpage",    "format": "html"  },  "search_information": {},  "url": "https://hnrss.org/frontpage",  "final_url": "https://hnrss.org/frontpage",  "status_code": 200,  "method": "non-browser",  "redirects": [],  "headers": {    "content-type": "application/xml; charset=utf-8",    "etag": null,    "last-modified": "Sat, 17 Oct 2026 04:08:27 GMT",    "retry-after": null  },  "title": null,  "body_format": "text",  "body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss version=\"2.0\" ...",  "truncated": false}