Skip to content

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)

AreaSupported or partial
Request fields31/56 (+25 pluggable)
Response fields13/25 (+12 pluggable)
Browser actions18/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.

NameStatusApplies toNotes
urlโœ… supportedbothIP-address hosts are accepted too (Zyte rejects them).
requestHeadersโœ… supportedbothreferer, on HTTP and browser requests.
tagsโœ… supportedbothNo Stats API to send them to: they label the onRequest / onAttempt reports and request logs instead, for your own analytics.
ipType๐ŸŸก partialbothReaches the provider as ctx.ipType; byIpType() routes on it. Presets ignore it.
httpRequestMethodโœ… supportedHTTP only
httpRequestBodyโœ… supportedHTTP only
httpRequestTextโœ… supportedHTTP only
customHttpRequestHeadersโœ… supportedHTTP onlyA Cookie header is dropped, as on Zyte: cookies go in requestCookies (authentication). On a browser request, Zyte answers 422 (checked live).
httpResponseBodyโœ… supportedHTTP (makes it one)Truncated at 10 MB.
httpResponseHeadersโœ… supportedbothHTTP and browser (main document) requests.
browserHtmlโœ… supportedbrowser (makes it one)Playwright Chromium, or your own browser.launch.
screenshotโœ… supportedbrowser (makes it one)
screenshotOptionsโœ… supportedbrowser onlyformat, fullPage.
extractFrom๐Ÿ”Œ pluggableeither (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๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
articleOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
articleList๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
articleListOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
articleNavigation๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
articleNavigationOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
forumThread๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
forumThreadOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
jobPosting๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
jobPostingOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
jobPostingNavigation๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
jobPostingNavigationOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
pageContent๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
pageContentOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
markdownโœ… supportedeither (extractFrom)Built in and non-AI, like Zyte's: dependency-free converter with heuristic main-content detection. extractors.markdown overrides it.
markdownOptionsโœ… supportedeither (extractFrom)scope (mainContent / fullPage), extractFrom.
product๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
productOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
productList๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
productListOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
productNavigation๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
productNavigationOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
customAttributes๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
customAttributesOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
serp๐Ÿ”Œ pluggableeither (extractFrom)llmExtractors() with any LLM (Zyte output schema), or your own extractors.<field>; 400 without one.
serpOptions๐Ÿ”Œ pluggableeither (extractFrom)Passed to your extractor as options; extractFrom picks HTTP or browser.
geolocationโœ… supportedbothEncoded 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โœ… supportedbrowser only
actionsโœ… supportedbrowser onlyAll of them; searchKeyword, setLocation and interaction through handlers or zyteApi() (see Actions).
jobIdโœ… supportedbothEchoed back.
echoDataโœ… supportedboth
viewportโœ… supportedbrowser only
followRedirectโœ… supportedHTTP onlyHTTP requests (browsers always follow, as on Zyte).
sessionContextโœ… supportedbothA 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๐ŸŸก partialbothactions 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โœ… supportedbothSticky exit IP through the provider, plus a cookie jar kept in memory per process.
networkCaptureโœ… supportedbrowser onlyurl and resourceType filters; max 10 captures / 5 MiB.
deviceโœ… supportedbothMobile user agent and client hints; mobile viewport in the browser.
cookieManagementโœ… supportedboth
requestCookiesโœ… supportedboth
responseCookiesโœ… supportedboth
includeIframes๐ŸŸก partialbrowser onlyEach frame's document is written into its <iframe> element; Zyte doesn't document its exact format.

Response fields โ€‹

NameStatusNotes
urlโœ… supportedFinal URL after redirects.
statusCodeโœ… supported
httpResponseBodyโœ… supported
httpResponseHeadersโœ… supported
browserHtmlโœ… supported
markdownโœ… supported
sessionโœ… supportedEchoes 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โœ… supportedaction, elapsedTime, status, error; interactionLogs from your action handlers' log().
responseCookiesโœ… supported
networkCapture๐ŸŸก partialurl, statusCode, headers, httpResponseBody, filter; no request / interceptionStatus.
serp๐Ÿ”Œ pluggable

Actions โ€‹

NameStatusNotes
clickโœ… supportedbutton, delay, waitForNavigationTimeout.
doubleClickโœ… supported
evaluateโœ… supportedRuns as a script without awaiting its promises, like Zyte.
gotoโœ… supported
hideโœ… supported
hoverโœ… supported
interaction๐Ÿ”Œ pluggableZyte 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โœ… supportedtimeout, maxScrollDelay, maxPageHeight, maxScrollCount; scrollStep ignored.
scrollToโœ… supported
searchKeyword๐ŸŸก partialBuilt-in heuristic (searchBox: finds the search box, types, presses Enter); per-site handlers in actions.searchKeyword; Zyte's own with zyteApi().
selectโœ… supported
setLocation๐Ÿ”Œ pluggableLocation 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โœ… supportedAs the first action, configures the initial navigation.
waitForRequestโœ… supported
waitForResponseโœ… supported
waitForSelectorโœ… supported
waitForTimeoutโœ… supported

Errors โ€‹

NameStatusNotes
400 /request/invalidโœ… supportedMalformed requests (url format, header syntax), plus fields xyte doesn't support.
400 /request/invalid-jsonโœ… supportedServer only.
401 /auth/key-not-foundโœ… supportedServer with XYTE_API_KEYS.
403 /auth/account-suspendedโšช acceptedNo accounts.
421 /website/domain-unreachableโœ… supported
422 /request/unprocessableโœ… supportedIncompatible parameters (browserHtml + httpResponseBody, browser-only fields on HTTPโ€ฆ) and requests asking for nothing, as on api.zyte.com.
429 /limits/*โšช acceptedNo quotas; concurrency queues instead.
451 /download/domain-forbiddenโšช acceptedNever emitted.
500 /server/timed-out๐ŸŸก partialAttempt timeouts are retried, then reported as 520.
503 /limits/over-global-limitโšช acceptedNever emitted.
520 /download/temporary-errorโœ… supportedProxy failures and network errors after retries.
520 /download/website-banโœ… supportedBans (403/429/503, challenge pages) after retries. Checked against api.zyte.com.
521 /download/internal-errorโšช acceptedNever emitted.

Beyond /v1/extract โ€‹

NameStatusNotes
HTTP API POST /v1/extractโœ… supportedxyte serve, createHandler, toNodeHandler.
Zyte API as a providerโœ… supportedzyteApi() (full fidelity, e.g. as a fallback) or zyteProxy() (proxy mode).
Proxy mode (api.zyte.com:8011)โœ… supportedxyte 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๐ŸŸก partialGET /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

MIT licensed. A personal project, not affiliated with Zyte Group Ltd (disclaimer).