For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
GuidesAPI ReferenceChangelogModel Versioning
GuidesAPI ReferenceChangelogModel Versioning
    • Getting Started
    • Authentication
    • API Versioning
    • SDKs
    • Deployments
    • Error Codes
    • Async Processing
  • Endpoints
  • Webhook Events
  • Migration Guides
      • Classify Endpoints
LogoLogo
On this page
  • What You Get
  • Quick Start: Common Patterns
  • Running a Classification
  • Listing Classify Runs
  • Endpoint Changes Summary
  • Request Changes
  • File Properties (All Endpoints)
  • Creating a Classify Run
  • Example: Create Request
  • Example: Overriding Classifier Config
  • Response Changes
  • Key Differences
  • Example: Response
  • SDK Method Reference
  • ClassifyRun Schema
  • ClassifyConfig Schema
  • Need Help?
  • Migration Guides
Migration Guides2026-02-09

Classify Runs Migration

Was this page helpful?
Previous

Changelog

Next
Built with

What You Get

  • Fully typed SDK responses — classifyRun.output is typed, no more casting
  • Run without a classifier — Pass your classifications inline with config
  • 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 a Classification

TypeScript
Python
Java
Before (2025-04-21)
1const run = await client.processorRun.create({
2 processorId: "dp_abc123",
3 file: { fileUrl: "https://example.com/doc.pdf" },
4 sync: true
5});
6if (run.success) {
7 console.log(run.processorRun.output);
8}
After (2026-02-09)
1const result = await client.classify({
2 classifier: { id: "cl_abc123" },
3 file: { url: "https://example.com/doc.pdf" }
4});
5console.log(result.output?.type); // Typed!
6
7// Override a classifier's config (config moved inside classifier object)
8const result = await client.classify({
9 classifier: {
10 id: "cl_abc123",
11 overrideConfig: {
12 classifications: [
13 { id: "invoice", type: "invoice", description: "An invoice" },
14 { id: "receipt", type: "receipt", description: "A receipt" }
15 ]
16 }
17 },
18 file: { url: "https://example.com/doc.pdf" }
19});
20
21// Or with inline config (no classifier needed)
22const result = await client.classify({
23 config: {
24 classifications: [
25 { id: "invoice", type: "invoice", description: "An invoice" },
26 { id: "receipt", type: "receipt", description: "A receipt" }
27 ]
28 },
29 file: { url: "https://example.com/doc.pdf" }
30});

Listing Classify Runs

TypeScript
Python
Java
Before
1const runs = await client.processorRun.list({ processorType: "CLASSIFY", processorId: "dp_abc123" });
After
1const runs = await client.classifyRuns.list({ classifierId: "cl_abc123" });

Endpoint Changes Summary

Old EndpointNew Endpoint
POST /processor_runs (type: CLASSIFY)POST /classify_runs
GET /processor_runs?processorType=CLASSIFYGET /classify_runs
GET /processor_runs/{id}GET /classify_runs/{id}
DELETE /processor_runs/{id}DELETE /classify_runs/{id}
POST /processor_runs/{id}/cancelPOST /classify_runs/{id}/cancel

Request Changes

File Properties (All Endpoints)

OldNew
file.fileUrlfile.url
file.fileIdfile.id
file.fileNamefile.name
rawTextfile.text

Creating a Classify Run

OldNewNotes
processorIdclassifier.idNested in object
versionclassifier.versionNested in object
config (with classifier)classifier.overrideConfigMoved inside classifier object. Top-level config is now only for inline classification without a classifier
sync: true(removed)Use POST /classify (sync, for testing), or createAndPoll() / webhooks for production
config.type: "CLASSIFY"(removed)Implicit from endpoint
config.parserparseConfigRenamed. Use config.parseConfig (inline) or classifier.overrideConfig.parseConfig (with classifier)

Breaking change: If you previously passed config alongside a processorId to override classifier settings, you must now pass it as classifier.overrideConfig inside the classifier object. The top-level config property is reserved for inline classification (without a classifier).

Additionally, config.parser has been renamed to parseConfig everywhere — use config.parseConfig for inline config or classifier.overrideConfig.parseConfig when overriding a classifier.

Example: Create Request

1{
2 "processorId": "dp_abc123",
3 "version": "latest",
4 "file": {
5 "fileUrl": "https://example.com/document.pdf",
6 "fileName": "document.pdf"
7 },
8 "sync": true
9}

Example: Overriding Classifier Config

If you previously passed config alongside processorId to override the classifier’s settings, this now moves inside the classifier object as overrideConfig:

1{
2 "processorId": "dp_abc123",
3 "config": {
4 "classifications": [
5 { "id": "invoice", "type": "invoice", "description": "An invoice" },
6 { "id": "receipt", "type": "receipt", "description": "A receipt" }
7 ],
8 "parser": { "type": "SIMPLE" }
9 },
10 "file": { "fileUrl": "https://example.com/document.pdf" },
11 "sync": true
12}

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

OldNew
success: true(removed) — Use HTTP status codes
{ "classifyRun": {...} }{...} (object returned directly)
processorRun.processorIdclassifyRun.classifier.id
processorRun.processorVersionIdclassifyRun.classifierVersion.id
processorRun.files[]classifyRun.file (single object)
processorRun.urlclassifyRun.dashboardUrl
Optional fieldsRequired but nullable

Example: Response

1{
2 "success": true,
3 "processorRun": {
4 "object": "document_processor_run",
5 "id": "dpr_abc123",
6 "processorId": "dp_xyz789",
7 "processorVersionId": "dpv_456",
8 "processorName": "Doc Classifier",
9 "type": "CLASSIFY",
10 "status": "PROCESSED",
11 "output": {
12 "id": "invoice",
13 "type": "invoice",
14 "confidence": 0.95
15 }
16 }
17}

SDK Method Reference

Old MethodNew Method
client.processorRun.create()client.classifyRuns.create()
client.processorRun.get()client.classifyRuns.retrieve()
client.processorRun.list()client.classifyRuns.list()
client.processorRun.delete()client.classifyRuns.delete()
client.processorRun.cancel()client.classifyRuns.cancel()
—client.classify() (new sync endpoint)
—client.classifyRuns.createAndPoll() (new)

Detailed Schema Changes

ClassifyRun Schema

PropertyOld (ProcessorRun)New (ClassifyRun)Change
object"document_processor_run""classify_run"Value changed
idRequired stringRequired stringNo change
processorIdRequired—Removed, see classifier.id
processorVersionIdRequired—Removed, see classifierVersion.id
classifier—Required ClassifierSummary | nullNew
classifierVersion—Required ClassifierVersionSummary | nullNew
typeRequired "CLASSIFY"—Removed
outputClassifierOutputClassifyOutput | nullNow nullable
initialOutputOptionalRequired but nullableNow required
reviewedOutputOptionalRequired but nullableNow required
failureReasonOptionalRequired but nullableNow required
configClassificationConfigClassifyConfigNo change
filesRequired array—Removed
file—Required FileSummaryNew
editsRequired—Removed
urlRequired—Renamed to dashboardUrl
dashboardUrl—RequiredNew

ClassifyConfig Schema

PropertyOld (ClassificationConfig)New (ClassifyConfig)Change
typeRequired "CLASSIFY"—Removed
baseProcessorOptionalOptionalNo change
classificationsRequiredRequiredNo change
parserOptional—Renamed
parseConfig—OptionalNew

Need Help?

If you encounter any issues while migrating, please contact our support team at support@extend.app.


Migration Guides

GuideMigrating FromMigrating To
Overview—What’s new and how to upgrade
Extract Runs/processor_runs/extract_runs + /extract
Classify Runs/processor_runs/classify_runs + /classify
Split Runs/processor_runs/split_runs + /split
Parse Runs/parse, /parse/async/parse_runs + /parse
Edit Runs/edit, /edit/async/edit_runs + /edit
Extractors/processors/extractors
Classifiers/processors/classifiers
Splitters/processors/splitters
Files/files/files (breaking changes)
Evaluation Setsevaluation endpointsUpdated evaluation endpoints
Workflow Runs/workflow_runs/workflow_runs (breaking changes)
Webhooksprocessor_run.* eventsextract_run.*, classify_run.*, etc.