import type { Metadata } from "next"; import { CodeBlock } from "@/components/ui/code-block"; import { DocPage } from "@/components/docs/doc-page"; import { A, Code, H2, Li, P, Ul } from "@/components/docs/prose"; import { Callout, ComingSoon } from "@/components/docs/callout"; import { Endpoint } from "@/components/docs/endpoint"; import { ResponseExample } from "@/components/docs/response-example"; export const metadata: Metadata = { title: "Extraction", description: "Structured data extraction (POST /v1/extract) is coming soon. This page describes the planned schema format and what the endpoint returns today.", }; export default function ExtractionPage() { return ( POST /v1/extract exists as a reserved route but performs no extraction. Everything below the “Current behaviour” section is design intent, published so you can plan integrations; names and shapes may change before launch.

Current behaviour

Any call, with any body, returns a 400 with an explanatory message. No fetch is performed and nothing is counted against your quota.

In the meantime, the pragmatic path is {`format: "text"`} for readable content, or {`format: "json"`} against the JSON endpoints most modern sites expose. See the{" "} Examples.

Planned request

The request will accept every /v1/fetch field plus a schema describing the output. Field types are expressed as short strings; arrays and nested objects are supported. Optional natural-language hints help disambiguate fields.

  • data follows your schema exactly; missing values are null rather than omitted.
  • The fetch part behaves like /v1/fetch: blocked targets return success: false with no data, and the usual error codes apply.
  • Extraction will be priced per successful extraction on top of the underlying fetch. Plan availability will be announced at launch.
If you have a concrete extraction use case, email hello@fetcha.co with an example URL and the fields you want. Early feedback shapes the schema.
); }