You don't usually call it yourself: your integration does. Knowing it helps you debug, build your own integration or check what a bot gets from a specific page. Each call counts as a served request in your plan, and if the page wasn't cached, also as a render.
Request
GET https://api.jazui.com/Render
| Parameter or header | Required | Description |
|---|---|---|
url | Yes* | Full page address, encoded. *If you can't put it in the query, send it in the X-Jazui-Url header. |
botAgent | No | The bot's user agent. If missing, the request's User-Agent is used. |
Authorization | Yes | Bearer with the account or site token. |
X-Jazui-Client-IP | No | The bot's IP. If a comma-separated list arrives, the first one is used. Used for metrics and to verify search engines. |
If-None-Match | No | The bot's ETag, to get a 304 if it hasn't changed. |
curl -i "https://api.jazui.com/Render?url=https%3A%2F%2Fmisitio.com%2Fprecios&botAgent=integration-test" \
-H "Authorization: Bearer $JAZUI_TOKEN" \
-H "X-Jazui-Client-IP: 66.249.66.1"Response
The page's HTML with its real status code: 200, 404 if your page is a 404, or the redirect (301, 302…) with its Location and no body.
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
X-Jazui: true
X-Jazui-Cache: HIT
ETag: "4812-638976215370000000"
Last-Modified: Mon, 02 Nov 2026 18:22:17 GMT
<!DOCTYPE html><html lang="es"><head><title>Precios | Mi sitio</title>…Other codes
| Code | Header | Reason |
|---|---|---|
400 | — | url is missing or invalid, or a rule excludes that address from rendering. |
401 | — | No token or token no longer valid. |
403 | — | Token from another site, or the site isn't verified. |
403 | X-Jazui-Blocked: ai-bot | You blocked that AI bot in the site settings. |
403 | X-Jazui-Blocked: rule | A rule blocks that bot. |
429 | X-Jazui-Limit: plan | The free plan has used up its renders or requests for the month. |
429 | X-Jazui-Limit: renders | No renders left this month for a new page, or the required badge is missing past the grace period. |
429 | X-Jazui-Limit: pages | The cached page limit has been reached. |
429 | — | More than 120 requests per minute. |
502 | Retry-After: 30 | Your website answered with a server error while rendering. |
503 | Retry-After: 30 | Rendering didn't finish in time. |
Conditional requests
Each page has an ETag. If you send the one you have in If-None-Match and the page hasn't changed, you get 304 Not Modified with no body (also with X-Jazui: true). That way bots that store pages don't download them again.
curl -i "https://api.jazui.com/Render?url=https%3A%2F%2Fmisitio.com%2F&botAgent=integration-test" \
-H "Authorization: Bearer $JAZUI_TOKEN" \
-H 'If-None-Match: "4812-638976215370000000"'
# HTTP/1.1 304 Not Modified (sin cuerpo)Reporting an unknown bot
Code-based integrations report with POST /Render/Seen when they see a bot-like user agent that isn't on the list. It always answers 204; each agent counts once a day, up to 500 different ones per account per day. If you build your own integration, you can use it the same way.
curl -X POST https://api.jazui.com/Render/Seen \
-H "Authorization: Bearer $JAZUI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"userAgent":"NuevoBot/1.0 (+https://nuevobot.ai)","url":"https://misitio.com/"}'
# 204 No ContentYour own integration
If your platform isn't listed, you can build one following the contract in Integrations: decide whether it's a bot with the /v2/bots list, call /Render with a maximum wait (20 s), pass the response on only if it has X-Jazui or is a 403 with X-Jazui-Blocked, and serve your website in any other case. Don't forward the bot's cookies or other headers.