{"slug":"jina-reader-api","name":"Jina Reader API","category":"scraping-api","provider_slug":null,"publisher":"Jina AI","publisher_type":"official","website":"https://jina.ai/reader/","summary":"Choose Jina Reader’s main-content or full-page Markdown, JSON response wrapper and cache controls. Check URL fragments, selectors and output-token billing.","tools":["http-api"],"capabilities":["javascript-rendering","css-selectors","web-scraping"],"outputs":["markdown","text","html","json"],"connection":"http-api","billing_basis":"Basic anonymous URL reading is rate-limited. Keyed Reader usage draws from the supplied API key’s output-token balance; optional modes can change token usage. Jina documents no token deduction for failed requests. Check the current key quota and rate table.","facts":[{"label":"Known URL first","value":"Prefix a complete URL with https://r.jina.ai/ to read that page, for example https://r.jina.ai/https://example.com. The separately authenticated s.jina.ai search endpoint has its own terms.","source_ids":["reader","repository"]},{"label":"Main content or full page","value":"The default content mode extracts readable page content as Markdown. X-Respond-With: markdown returns full-page Markdown without the readability filter. Use the default for an article body; choose full-page mode when surrounding page text matters.","source_ids":["repository","spec"]},{"label":"JSON wrapper versus fields","value":"Accept: application/json requests a JSON response with page URL, title and content. It does not ask Reader to extract your own JSON Schema fields. X-Respond-With selects the content representation inside the response.","source_ids":["reader","repository","spec"]},{"label":"HTML and text choices","value":"Set X-Respond-With: html for HTML or X-Respond-With: text for plain text. Select the representation your application will process before comparing output size or token usage.","source_ids":["repository","spec"]},{"label":"Freshness","value":"Use X-No-Cache: true or X-Cache-Tolerance: 0 when cached output is unsuitable. Published sources give different cache lifetimes, so do not rely on one universal default TTL.","source_ids":["reader","repository","spec"]},{"label":"Missing dynamic content","value":"For a page that needs browser rendering, explicitly choose X-Engine: browser. X-Wait-For-Selector waits for an expected element; X-Target-Selector limits returned content and X-Remove-Selector removes unwanted elements.","source_ids":["reader","repository","spec"]},{"label":"Hash-based routes","value":"A URL fragment after # is normally kept by the HTTP client. For a route such as https://example.com/#/route, POST the full URL in the request body to https://r.jina.ai/ so Reader receives the fragment.","source_ids":["repository","spec"]},{"label":"Reject or truncate","value":"X-Token-Budget rejects a request when the resulting token cost would exceed the limit. X-Max-Tokens truncates returned content. Choose rejection when completeness matters; use truncation only when partial output is acceptable.","source_ids":["repository","spec"]},{"label":"Authentication and limits","value":"Basic Reader requests can omit credentials. Send Authorization: Bearer YOUR_JINA_API_KEY for the supplied key’s token balance and rate limits. Anonymous limits are tracked by IP; keyed requests use the key’s limits.","source_ids":["reader","spec"]}],"setup":["Choose a known public URL and whether the application needs main-content Markdown, full-page Markdown, HTML or plain text.","Start with the simple GET example. Add Accept: application/json for a machine-readable wrapper; add Authorization: Bearer YOUR_JINA_API_KEY in your private client if using that key’s quota.","Use the POST example for hash-based routes. If content is missing, check the target and cache first, then choose browser rendering or an appropriate wait/target selector.","Inspect the returned URL, content and any error before storing the response. Set a token budget when oversized output should be rejected; do not treat truncated text as a complete page."],"limitations":["This record covers known-URL reading through hosted r.jina.ai. Jina’s search, embeddings, self-hosted Reader and specialized OCR paths have different requirements.","A JSON response wrapper or CSS content selection does not establish arbitrary schema-guided field extraction.","Rendering and selection controls are documented capabilities, not a measured success rate for protected or dynamic pages. A paid key does not guarantee access to a blocked target.","The request examples were checked against documentation and parsed locally; no target-page fetch, paid API request or performance test was run."],"request_examples":[{"label":"Read a known page — curl","code":"curl --fail-with-body 'https://r.jina.ai/https://example.com'","source_ids":["repository"]},{"label":"Fresh full-page Markdown in JSON — curl","code":"curl --fail-with-body 'https://r.jina.ai/https://example.com' \\\n  -H 'Accept: application/json' \\\n  -H 'X-Respond-With: markdown' \\\n  -H 'X-No-Cache: true'","source_ids":["repository","spec"]},{"label":"Preserve a hash route — curl","code":"curl --fail-with-body 'https://r.jina.ai/' \\\n  --data-urlencode 'url=https://example.com/#/route'","source_ids":["repository","spec"]}],"sources":[{"id":"reader","label":"Jina Reader: product options, rates and billing FAQ","url":"https://jina.ai/reader/","checked_at":"2026-09-28"},{"id":"repository","label":"Official Reader guide: formats, selectors and URL fragments","url":"https://github.com/jina-ai/reader","checked_at":"2026-09-28"},{"id":"spec","label":"Live Reader OpenAPI: headers and request schema","url":"https://r.jina.ai/openapi.json","checked_at":"2026-09-28"}],"checked_at":"2026-09-28","review_due":"2026-10-28","evidence":"documented","url":"https://workingproxysites.info/tools/jina-reader-api","provider_url":null,"review_overdue":false}