# Render > The API integrations use to ask Jazui for a bot's page. Source page: https://docs.jazui.com/api/render/en 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. | ```bash 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. `Successful response`: ```http 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 Precios | Mi sitio… ``` ## 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. ```bash 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. ```bash 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 Content ``` ## Your own integration If your platform isn't listed, you can build one following the contract in [Integrations](https://docs.jazui.com/llms/en/integrations.txt): 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.