Zyte API coverage โ
How much of the Zyte API xyte implements, field by field, from the OpenAPI spec in spec/zyte-openapi.json. A test fails when the spec has an entry not listed here.
โ supported ยท ๐ก partial ยท ๐ pluggable (bring an extractor) ยท โช accepted, no effect ยท โ not supported (request fields: rejected with a 400)
| Area | Supported or partial |
|---|---|
| Request fields | 31/56 (+25 pluggable) |
| Response fields | 13/25 (+12 pluggable) |
| Browser actions | 18/20 |
Request fields โ
A request is an HTTP request (httpResponseBody, httpResponseHeaders, or extraction from HTTP) or a browser request (browserHtml, screenshot, or extraction from the browser). Applies to says which kind each field belongs to: a field of the other kind is a 422 /request/unprocessable, as on Zyte.
| Name | Status | Applies to | Notes |
|---|---|---|---|
url | โ supported | both | IP-address hosts are accepted too (Zyte rejects them). |
requestHeaders | โ supported | both | referer, on HTTP and browser requests. |
tags | โ supported | both | No Stats API to send them to: they label the onRequest / onAttempt reports and request logs instead, for your own analytics. |
ipType | ๐ก partial | both | Reaches the provider as ctx.ipType; byIpType() routes on it. Presets ignore it. |
httpRequestMethod | โ supported | HTTP only | |
httpRequestBody | โ supported | HTTP only | |
httpRequestText | โ supported | HTTP only | |
customHttpRequestHeaders | โ supported | HTTP only | A Cookie header is dropped, as on Zyte: cookies go in requestCookies (authentication). On a browser request, Zyte answers 422 (checked live). |
httpResponseBody | โ supported | HTTP (makes it one) | Truncated at 10 MB. |
httpResponseHeaders | โ supported | both | HTTP and browser (main document) requests. |
browserHtml | โ supported | browser (makes it one) | Playwright Chromium, or your own browser.launch. |
screenshot | โ supported | browser (makes it one) | |
screenshotOptions | โ supported | browser only | format, fullPage. |
extractFrom | ๐ pluggable | either (extractFrom) | httpResponseBody, browserHtml, or userHtml (from <field>Options.userHtml: with a local extractor there is no download at all). Unset, xyte extracts from HTTP; Zyte currently defaults to browserHtml for AI extraction, so set it to match. |
article | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
articleOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
articleList | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
articleListOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
articleNavigation | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
articleNavigationOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
forumThread | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
forumThreadOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
jobPosting | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
jobPostingOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
jobPostingNavigation | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
jobPostingNavigationOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
pageContent | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
pageContentOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
markdown | โ supported | either (extractFrom) | Built in and non-AI, like Zyte's: dependency-free converter with heuristic main-content detection. extractors.markdown overrides it. |
markdownOptions | โ supported | either (extractFrom) | scope (mainContent / fullPage), extractFrom. |
product | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
productOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
productList | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
productListOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
productNavigation | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
productNavigationOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
customAttributes | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
customAttributesOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
serp | ๐ pluggable | either (extractFrom) | llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one. |
serpOptions | ๐ pluggable | either (extractFrom) | Passed to your extractor as options; extractFrom picks HTTP or browser. |
geolocation | โ supported | both | Encoded into the provider credentials. With direct(), plain proxyUrl() or a template() without {country} it can't be applied: the request runs with an X-Xyte-Warning header / onWarning. |
javascript | โ supported | browser only | |
actions | โ supported | browser only | All of them; searchKeyword, setLocation and interaction through handlers or zyteApi() (see Actions). |
jobId | โ supported | both | Echoed back. |
echoData | โ supported | both | |
viewport | โ supported | browser only | |
followRedirect | โ supported | HTTP only | HTTP requests (browsers always follow, as on Zyte). |
sessionContext | โ supported | both | A pool per context (default 8 sessions; retired after 4 h or 3 bans, as on Zyte). In process, or shared across instances with sessions.store / XYTE_REDIS_URL. |
sessionContextParameters | ๐ก partial | both | actions run once per new session in a browser at the request URL, through the provider resolved for it (an API provider keeps its own sessions: no local init). Zyte's own actions run through actions handlers; without one, skipped with a warning, or a 400 with unsupportedActions: 'error' (no pass-overs during init). |
session | โ supported | both | Sticky exit IP through the provider, plus a cookie jar kept in memory per process. |
networkCapture | โ supported | browser only | url and resourceType filters; max 10 captures / 5 MiB. |
device | โ supported | both | Mobile user agent and client hints; mobile viewport in the browser. |
cookieManagement | โ supported | both | |
requestCookies | โ supported | both | |
responseCookies | โ supported | both | |
includeIframes | ๐ก partial | browser only | Each frame's document is written into its <iframe> element; Zyte doesn't document its exact format. |
Response fields โ
| Name | Status | Notes |
|---|---|---|
url | โ supported | Final URL after redirects. |
statusCode | โ supported | |
httpResponseBody | โ supported | |
httpResponseHeaders | โ supported | |
browserHtml | โ supported | |
markdown | โ supported | |
session | โ supported | Echoes the request session. |
screenshot | โ supported | |
article | ๐ pluggable | |
articleList | ๐ pluggable | |
articleNavigation | ๐ pluggable | |
forumThread | ๐ pluggable | |
jobPosting | ๐ pluggable | |
jobPostingNavigation | ๐ pluggable | |
pageContent | ๐ pluggable | |
product | ๐ pluggable | |
productList | ๐ pluggable | |
productNavigation | ๐ pluggable | |
customAttributes | ๐ pluggable | |
echoData | โ supported | |
jobId | โ supported | |
actions | โ supported | action, elapsedTime, status, error; interactionLogs from your action handlers' log(). |
responseCookies | โ supported | |
networkCapture | ๐ก partial | url, statusCode, headers, httpResponseBody, filter; no request / interceptionStatus. |
serp | ๐ pluggable |
Actions โ
| Name | Status | Notes |
|---|---|---|
click | โ supported | button, delay, waitForNavigationTimeout. |
doubleClick | โ supported | |
evaluate | โ supported | Runs as a script without awaiting its promises, like Zyte. |
goto | โ supported | |
hide | โ supported | |
hover | โ supported | |
interaction | ๐ pluggable | Zyte runs scripts from its cloud IDE by id: with zyteApi() it does; elsewhere actions.interaction maps ids to your own scripts. Without one: skipped with a warning (or a 400 with unsupportedActions: 'error'). |
keyPress | โ supported | |
reload | โ supported | |
scrollBottom | โ supported | timeout, maxScrollDelay, maxPageHeight, maxScrollCount; scrollStep ignored. |
scrollTo | โ supported | |
searchKeyword | ๐ก partial | Built-in heuristic (searchBox: finds the search box, types, presses Enter); per-site handlers in actions.searchKeyword; Zyte's own with zyteApi(). |
select | โ supported | |
setLocation | ๐ pluggable | Location forms differ per site: per-site handlers in actions.setLocation, Zyte's own with zyteApi(). Without one: skipped with a warning (or a 400 with unsupportedActions: 'error'). |
type | โ supported | |
waitForNavigation | โ supported | As the first action, configures the initial navigation. |
waitForRequest | โ supported | |
waitForResponse | โ supported | |
waitForSelector | โ supported | |
waitForTimeout | โ supported |
Errors โ
| Name | Status | Notes |
|---|---|---|
400 /request/invalid | โ supported | Malformed requests (url format, header syntax), plus fields xyte doesn't support. |
400 /request/invalid-json | โ supported | Server only. |
401 /auth/key-not-found | โ supported | Server with XYTE_API_KEYS. |
403 /auth/account-suspended | โช accepted | No accounts. |
421 /website/domain-unreachable | โ supported | |
422 /request/unprocessable | โ supported | Incompatible parameters (browserHtml + httpResponseBody, browser-only fields on HTTPโฆ) and requests asking for nothing, as on api.zyte.com. |
429 /limits/* | โช accepted | No quotas; concurrency queues instead. |
451 /download/domain-forbidden | โช accepted | Never emitted. |
500 /server/timed-out | ๐ก partial | Attempt timeouts are retried, then reported as 520. |
503 /limits/over-global-limit | โช accepted | Never emitted. |
520 /download/temporary-error | โ supported | Proxy failures and network errors after retries. |
520 /download/website-ban | โ supported | Bans (403/429/503, challenge pages) after retries. Checked against api.zyte.com. |
521 /download/internal-error | โช accepted | Never emitted. |
Beyond /v1/extract โ
| Name | Status | Notes |
|---|---|---|
HTTP API POST /v1/extract | โ supported | xyte serve, createHandler, toNodeHandler. |
| Zyte API as a provider | โ supported | zyteApi() (full fidelity, e.g. as a fallback) or zyteProxy() (proxy mode). |
Proxy mode (api.zyte.com:8011) | โ supported | xyte serve --proxy-port: Zyte-* headers, HTTPS with its own CA (xyte ca), Zyte-Request-ID / Zyte-Error-* headers (proxy mode). No HTTPS proxy interface (:8014). |
| CDP headless browser | โ unsupported | |
| Stats API | ๐ก partial | GET /api/stats and /api/v1/stats (USD), with the same parameters and shape, from the requests the server handled; p80s are approximate (histograms); domain_health is null; requested_features, extraction_type, apikey_labels filters are accepted and ignored. |
| Search API | โ unsupported |
