page-render
/api/v1/page-render
1 credits/call
web
catalog
Load a URL in a real browser and return its visible text, title, and full-size image URLs. Handles JavaScript-rendered supplier and retailer pages that return an empty shell to a plain fetch.
Sign in + create an API key on the keys page to authenticate calls.
curl -X POST https://api.fulcrumgo.com/api/v1/page-render \
-H "Authorization: Bearer mcpsk_<your_api_key>" \
-H "Content-Type: application/json" \
-d '{
"url": "",
"min_image_width": 300,
"scroll": true,
"max_text_chars": 60000,
"nav_timeout_seconds": 25.0
}'
Add this server to Claude Desktop's claude_desktop_config.json. The endpoint becomes a callable tool inside Claude. See the MCP setup guide for the full walk-through.
{
"mcpServers": {
"this-api": {
"url": "https://api.fulcrumgo.com/mcp",
"transport": "http",
"auth": {
"type": "bearer",
"token": "mcpsk_<your_api_key>"
}
}
}
}
Inside Claude this endpoint surfaces as the tool page-render.
Standard requests — no custom SDK needed. pip install requests first.
import requests
r = requests.post(
"https://api.fulcrumgo.com/api/v1/page-render",
headers={"Authorization": "Bearer mcpsk_<your_api_key>"},
json={
"url": "",
"min_image_width": 300,
"scroll": true,
"max_text_chars": 60000,
"nav_timeout_seconds": 25.0
},
)
r.raise_for_status()
print(r.json())
Plain fetch. Works in Node 18+, Deno, Bun, and any modern browser.
const r = await fetch("https://api.fulcrumgo.com/api/v1/page-render", {
method: "POST",
headers: {
"Authorization": "Bearer mcpsk_<your_api_key>",
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "",
"min_image_width": 300,
"scroll": true,
"max_text_chars": 60000,
"nav_timeout_seconds": 25.0
}),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string | required | — |
Public page to render. http/https only.
maxLength=2083
minLength=1
format=uri
|
| min_image_width | integer | optional | 300 |
Skip images narrower than this as rendered, which is how logos, icons and tracking pixels get dropped. Lower it if a page returns no images.
maximum=4000
minimum=1
|
| scroll | boolean | optional | True | Scroll to the bottom before reading. Required for pages that only load photos as you reach them. Off is faster. |
| max_text_chars | integer | optional | 60000 |
maximum=200000
minimum=500
|
| nav_timeout_seconds | number | optional | 25.0 |
maximum=45.0
minimum=5.0
|
Output
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| url | string | required | — | Final URL after redirects, which may differ from the input. |
| status | integer | required | — | HTTP status of the main document. 0 if unknown. |
| title | string | required | — | |
| text | string | required | — | Visible text of the rendered page. |
| images | array<string> | optional | — | |
| image_count | integer | required | — | |
| blocked | boolean | required | — | True when the site served an anti-bot challenge or a login page instead of content. The text and images are then NOT the page that was asked for — do not build products from them. |
| blocked_reason | string | optional | ||
| warnings | array<string> | optional | — |
Try it
Fires a real POST /api/v1/page-render from your browser. Charges 1 credit per call against your account.