Schema-driven structured extraction
Fetches `url` and extracts structured JSON conforming to the supplied JSON Schema (draft 2020-12) using an LLM. Fast-path only — slow-path rendering options (`wait_until=networkidle`, `cookies`, `delay_ms`, custom `headers`, `wait_for_selector`) cause a `400 unsupported_url`. Dual-axis billing: a fixed per-request credit charge **plus** the underlying page's bandwidth, billed exactly like `/v1/scrape`. The bandwidth is still billed when the scrape succeeds but extraction later fails; both axes are refunded only when the scrape itself never runs. Availability is gated by a server-side feature flag; when disabled the endpoint returns `404`.
Authorization
AuthorizationRequiredBearer <token>API key. Manage keys from the dashboard at app.bytekit.com.
In: header
Request Body
application/jsonRequiredurlRequiredstringTarget page URL (HTTP/HTTPS, SSRF-blocked, fast-path only).
"uri"schemaRequiredobjectJSON Schema (draft 2020-12) describing the desired output. Serialized size ≤ 50 KB, nesting depth ≤ 8, must compile under Ajv, and must be normalizable into Groq's strict-mode subset (root type: object; no pattern/format/if/then/else/ top-level oneOf/anyOf; $ref limited to #/$defs). A non-normalizable schema returns 422 schema_incompatible.
promptstringOptional natural-language extraction hint.
2000modelstringExtraction model. An out-of-list value returns 400 unsupported_model (not a Zod 422).
"openai/gpt-oss-20b"Value in: "openai/gpt-oss-20b" | "openai/gpt-oss-120b"wait_for_selectorstring | nullnullwait_untilstring"load"Value in: "load" | "domcontentloaded" | "networkidle"cookiesarray<object>[]delay_msinteger0Minimum: 0Maximum: 10000headersobject{}countrystring | nullTwo-letter country code, upper-cased. null is coerced to US.
"US"languagestring | nullnullExtraction completed (success or graceful extract failure).