Extract Runs Migration
What You Get
- Fully typed SDK responses โ
extractRun.outputis typed, no more casting - Run without an extractor โ Pass your schema inline with
configinstead of creating an extractor first - Cleaner request/response format โ Simpler property names, predictable nullable fields
- Better IDE experience โ Autocomplete works out of the box
The old /processor_runs endpoint is still supported in this API version for backward compatibility. You can migrate incrementally.
Quick Start: Common Patterns
Running an Extraction
TypeScript
Python
Java
Listing Extract Runs
TypeScript
Python
Java
TypeScript: Typed Schemas with Zod
Define your extraction schema using Zod for fully typed output values. Pass a z.object() schema directly as config.schema โ the SDK automatically converts it to the APIโs JSON Schema format and infers the output type:
You can also use Zod schemas with an existing extractor by passing them via extractor.overrideConfig:
Available custom type helpers:
extendDate()โ Date fields (output is ISO formatyyyy-mm-dd)extendCurrency()โ Currency fields (output hasamountandiso_4217_currency_code)extendSignature()โ Signature detection fields (output hasprinted_name,signature_date,is_signed,title_or_role)
Endpoint Changes Summary
Extraction Schema Changes
Legacy โFieldsโ Format Removed
The legacy fields array format for defining extraction schemas is no longer supported in this API version. You must use the JSON Schema schema format instead.
See the JSON Schema guide for the full schema reference and examples.
Strict Nullable Validation
In previous API versions, passing a non-nullable primitive type (e.g. "type": "string") would be silently converted to its nullable form ("type": ["string", "null"]). Similarly, enum arrays without null would have null automatically appended.
In 2026-02-09, this is now a validation error. You must explicitly declare nullable types in your schema. This prevents a mismatch between your schema definition and the actual API response โ particularly important if youโre using SDK features like Zod schema validation in the TypeScript SDK, where a null return for a non-nullable field would cause a runtime error.
Breaking change: Schemas that previously worked due to silent conversion will now return a 400 Bad Request. Update your schemas before migrating.
Primitive types must use the nullable array form:
Enum arrays must include null:
This applies to all endpoints that accept an extraction schema: POST /extract, POST /extract_runs, POST /extractors, POST /extractors/{id}, and POST /extractors/{extractorId}/versions.
Request Changes
File Properties (All Endpoints)
Creating an Extract Run
Breaking change: If you previously passed config alongside a processorId to override extractor settings, you must now pass it as extractor.overrideConfig inside the extractor object. The top-level config property is reserved for inline extraction (without an extractor).
Additionally, config.parser has been renamed to parseConfig everywhere โ use config.parseConfig for inline config or extractor.overrideConfig.parseConfig when overriding an extractor.
Example: Create Request
Example: Overriding Extractor Config
If you previously passed config alongside processorId to override the extractorโs settings, this now moves inside the extractor object as overrideConfig:
Response Changes
Response shape changes: Single object responses are now returned directly (no wrapper key), and list responses use { "object": "list", "data": [...] } format. See Simplified Response Shapes for details.
Key Differences
Example: Response
Citation Format Change
If youโre using citations (bounding boxes), the page field structure has changed:
SDK Method Reference
Detailed Schema Changes
ExtractRun Schema
ExtractConfig Schema
ExtractRunSummary Schema (List Response)
Need Help?
If you encounter any issues while migrating, please contact our support team at support@extend.app.

