> This page is for version v2026-02-09 (default).
> For other versions, use one of these documentation indexes:
> - v2026-02-09 (default): https://docs.extend.ai/2026-02-09/llms.txt
> - v2025-04-21: https://docs.extend.ai/2025-04-21/llms.txt
> - v2024-12-23: https://docs.extend.ai/2024-12-23/llms.txt

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.extend.ai/llms.txt
> Use this file to discover all available pages before exploring further.
>
> ## API version
> The current API version is `2026-02-09`, served at the site root (no version prefix in URLs).
> If this page URL contains `/2025-04-21/` or `/2024-12-23/`, you are reading an older API version.
> Prefer the current docs at https://docs.extend.ai/llms.txt unless the user explicitly needs that older version.
> Do not treat older-version pages as the source of truth for new integrations.

# Split Runs Migration

> Migrate from /processor_runs to /split_runs

## What You Get

* **Fully typed SDK responses** — `splitRun.output` is typed, no more casting
* **Run without a splitter** — Pass your split classifications inline with `config`
* **Cleaner request/response format** — Simpler property names, predictable nullable fields
* **Better IDE experience** — Autocomplete works out of the box

> **Note**
>
> 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 Split

#### TypeScript

**`Before (2025-04-21)`**

```typescript title="Before (2025-04-21)"
const run = await client.processorRun.create({
  processorId: "dp_abc123",
  file: { fileUrl: "https://example.com/packet.pdf" },
  sync: true
});
if (run.success) {
  console.log(run.processorRun.output.splits);
}
```

**`After (2026-02-09)`**

```typescript title="After (2026-02-09)"
const result = await client.split({
  splitter: { id: "spl_abc123" },
  file: { url: "https://example.com/packet.pdf" }
});
console.log(result.output?.splits);  // Typed!

// Override a splitter's config (config moved inside splitter object)
const result = await client.split({
  splitter: {
    id: "spl_abc123",
    overrideConfig: {
      splitClassifications: [
        { id: "invoice", name: "Invoice", description: "An invoice document" },
        { id: "receipt", name: "Receipt", description: "A receipt document" }
      ]
    }
  },
  file: { url: "https://example.com/packet.pdf" }
});

// Or with inline config (no splitter needed)
const result = await client.split({
  config: {
    splitClassifications: [
      { id: "invoice", name: "Invoice", description: "An invoice document" },
      { id: "receipt", name: "Receipt", description: "A receipt document" }
    ]
  },
  file: { url: "https://example.com/packet.pdf" }
});
```

#### Python

**`Before (2025-04-21)`**

```python title="Before (2025-04-21)"
run = client.processor_run.create(
    processor_id="dp_abc123",
    file={"file_url": "https://example.com/packet.pdf"},
    sync=True
)
if run.success:
    print(run.processor_run.output.splits)
```

**`After (2026-02-09)`**

```python title="After (2026-02-09)"
result = client.split(
    splitter={"id": "spl_abc123"},
    file={"url": "https://example.com/packet.pdf"}
)
print(result.output.splits)  # Typed!

# Override a splitter's config (config moved inside splitter object)
result = client.split(
    splitter={
        "id": "spl_abc123",
        "override_config": {
            "split_classifications": [
                {"id": "invoice", "name": "Invoice", "description": "An invoice document"},
                {"id": "receipt", "name": "Receipt", "description": "A receipt document"}
            ]
        }
    },
    file={"url": "https://example.com/packet.pdf"}
)

# Or with inline config (no splitter needed)
result = client.split(
    config={
        "split_classifications": [
            {"id": "invoice", "name": "Invoice", "description": "An invoice document"},
            {"id": "receipt", "name": "Receipt", "description": "A receipt document"}
        ]
    },
    file={"url": "https://example.com/packet.pdf"}
)
```

#### Java

**`After (2026-02-09)`**

```java title="After (2026-02-09)"
var result = client.split(SplitRequest.builder()
    .file(SplitRequestFile.of(FileFromUrl.builder().url("https://example.com/packet.pdf").build()))
    .splitter(SplitRequestSplitter.builder().id("spl_abc123").build())
    .build());
result.getOutput().ifPresent(output -> System.out.println(output.getSplits()));
```

### Listing Split Runs

#### TypeScript

**`Before`**

```typescript title="Before"
const runs = await client.processorRun.list({ processorType: "SPLITTER", processorId: "dp_abc123" });
```

**`After`**

```typescript title="After"
const runs = await client.splitRuns.list({ splitterId: "spl_abc123" });
```

#### Python

**`Before`**

```python title="Before"
runs = client.processor_run.list(processor_type="SPLITTER", processor_id="dp_abc123")
```

**`After`**

```python title="After"
runs = client.split_runs.list(splitter_id="spl_abc123")
```

#### Java

**`After`**

```java title="After"
var runs = client.splitRuns().list(SplitRunsListRequest.builder()
    .splitterId("spl_abc123")
    .build());
```

---

## Endpoint Changes Summary

| Old Endpoint                                 | New Endpoint                   |
| -------------------------------------------- | ------------------------------ |
| `POST /processor_runs` (type: SPLITTER)      | `POST /split_runs`             |
| `GET /processor_runs?processorType=SPLITTER` | `GET /split_runs`              |
| `GET /processor_runs/{id}`                   | `GET /split_runs/{id}`         |
| `DELETE /processor_runs/{id}`                | `DELETE /split_runs/{id}`      |
| `POST /processor_runs/{id}/cancel`           | `POST /split_runs/{id}/cancel` |

---

## Request Changes

### File Properties

| Old             | New         |
| --------------- | ----------- |
| `file.fileUrl`  | `file.url`  |
| `file.fileId`   | `file.id`   |
| `file.fileName` | `file.name` |

### Creating a Split Run

| Old                       | New                       | Notes                                                                                                    |
| ------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------- |
| `processorId`             | `splitter.id`             | Nested in object                                                                                         |
| `version`                 | `splitter.version`        | Nested in object                                                                                         |
| `config` (with splitter)  | `splitter.overrideConfig` | **Moved inside splitter object.** Top-level `config` is now only for inline splitting without a splitter |
| `sync: true`              | *(removed)*               | Use `POST /split` (sync, for testing), or `createAndPoll()` / webhooks for production                    |
| `config.type: "SPLITTER"` | *(removed)*               | Implicit                                                                                                 |
| `config.parser`           | `parseConfig`             | **Renamed.** Use `config.parseConfig` (inline) or `splitter.overrideConfig.parseConfig` (with splitter)  |

> **Warning**
>
> **Breaking change:** If you previously passed `config` alongside a `processorId` to override splitter settings, you must now pass it as `splitter.overrideConfig` inside the splitter object. The top-level `config` property is reserved for inline splitting (without a splitter).
>
> Additionally, `config.parser` has been renamed to `parseConfig` everywhere — use `config.parseConfig` for inline config or `splitter.overrideConfig.parseConfig` when overriding a splitter.

### Example: Overriding Splitter Config

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

**`Before (2025-04-21)`**

```json title="Before (2025-04-21)"
{
  "processorId": "dp_abc123",
  "config": {
    "splitClassifications": [
      { "id": "invoice", "name": "Invoice", "description": "An invoice document" },
      { "id": "receipt", "name": "Receipt", "description": "A receipt document" }
    ],
    "parser": { "type": "SIMPLE" }
  },
  "file": { "fileUrl": "https://example.com/packet.pdf" },
  "sync": true
}
```

**`After (2026-02-09)`**

```json title="After (2026-02-09)"
{
  "splitter": {
    "id": "spl_abc123",
    "overrideConfig": {
      "splitClassifications": [
        { "id": "invoice", "name": "Invoice", "description": "An invoice document" },
        { "id": "receipt", "name": "Receipt", "description": "A receipt document" }
      ],
      "parseConfig": { "type": "SIMPLE" }
    }
  },
  "file": { "url": "https://example.com/packet.pdf" }
}
```

---

## Response Changes

> **Note**
>
> **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](/api-reference/migrations/2026-02-09/overview#simplified-response-shapes) for details.

| Old                        | New                                |
| -------------------------- | ---------------------------------- |
| `success: true`            | *(removed)*                        |
| `{ "splitRun": {...} }`    | `{...}` (object returned directly) |
| `processorRun.processorId` | `splitRun.splitter.id`             |
| `processorRun.files[]`     | `splitRun.file`                    |
| `processorRun.url`         | `splitRun.dashboardUrl`            |
| Optional fields            | Required but nullable              |

### Example: Response

**`Before (2025-04-21)`**

```json title="Before (2025-04-21)"
{
  "success": true,
  "processorRun": {
    "object": "document_processor_run",
    "id": "dpr_abc123",
    "processorId": "dp_xyz789",
    "processorVersionId": "dpv_456",
    "processorName": "Doc Splitter",
    "type": "SPLITTER",
    "status": "PROCESSED",
    "output": {
      "splits": [
        {
          "id": "invoice",
          "type": "Invoice",
          "fileId": "file_123",
          "startPage": 1,
          "endPage": 3
        }
      ]
    },
    "files": [{ "id": "file_456", "name": "packet.pdf" }],
    "url": "https://dashboard.extend.ai/runs/dpr_abc123"
  }
}
```

**`After (2026-02-09)`**

```json title="After (2026-02-09)"
{
  "object": "split_run",
  "id": "spr_abc123",
  "splitter": {
    "object": "splitter",
    "id": "spl_xyz789",
    "name": "Doc Splitter"
  },
  "splitterVersion": {
    "object": "splitter_version",
    "id": "splv_456",
    "version": "1.0"
  },
  "status": "PROCESSED",
  "output": {
    "splits": [
      {
        "id": "invoice",
        "type": "Invoice",
        "file": {
          "object": "file",
          "id": "file_123",
          "name": "split_page1-3.pdf"
        },
        "startPage": 1,
        "endPage": 3
      }
    ]
  },
  "file": { "id": "file_456", "name": "packet.pdf" },
  "dashboardUrl": "https://dashboard.extend.ai/runs/spr_abc123",
  "failureReason": null,
  "reviewedOutput": null
}
```

---

## SDK Method Reference

| Old Method                     | New Method                                 |
| ------------------------------ | ------------------------------------------ |
| `client.processorRun.create()` | `client.splitRuns.create()`                |
| `client.processorRun.get()`    | `client.splitRuns.retrieve()`              |
| `client.processorRun.list()`   | `client.splitRuns.list()`                  |
| `client.processorRun.delete()` | `client.splitRuns.delete()`                |
| `client.processorRun.cancel()` | `client.splitRuns.cancel()`                |
| —                              | `client.split()` *(new sync endpoint)*     |
| —                              | `client.splitRuns.createAndPoll()` *(new)* |

---

#### Detailed Schema Changes

### SplitRun Schema

| Property             | Old (ProcessorRun)         | New (SplitRun)                            | Change                            |
| -------------------- | -------------------------- | ----------------------------------------- | --------------------------------- |
| `object`             | `"document_processor_run"` | `"split_run"`                             | Value changed                     |
| `id`                 | Required `string`          | Required `string`                         | No change                         |
| `processorId`        | Required                   | —                                         | Removed, see `splitter.id`        |
| `processorVersionId` | Required                   | —                                         | Removed, see `splitterVersion.id` |
| `splitter`           | —                          | Required `SplitterSummary \| null`        | New                               |
| `splitterVersion`    | —                          | Required `SplitterVersionSummary \| null` | New                               |
| `type`               | Required `"SPLITTER"`      | —                                         | Removed (implicit)                |
| `status`             | Required                   | Required                                  | No change                         |
| `output`             | `SplitterOutput`           | `SplitOutput \| null`                     | Now nullable                      |
| `initialOutput`      | Optional                   | Required but nullable                     | Now required                      |
| `reviewedOutput`     | Optional                   | Required but nullable                     | Now required                      |
| `failureReason`      | Optional                   | Required but nullable                     | Now required                      |
| `config`             | `SplitterConfig`           | `SplitConfig`                             | No change                         |
| `files`              | Required `File[]`          | —                                         | Removed                           |
| `file`               | —                          | Required `FileSummary`                    | New                               |
| `url`                | Required                   | —                                         | Renamed                           |
| `dashboardUrl`       | —                          | Required                                  | New (replaces `url`)              |

### SplitConfig Schema

| Property               | Old (SplitterConfig)  | New (SplitConfig) | Change                  |
| ---------------------- | --------------------- | ----------------- | ----------------------- |
| `type`                 | Required `"SPLITTER"` | —                 | Removed                 |
| `baseProcessor`        | Optional              | Optional          | No change               |
| `splitClassifications` | Required              | Required          | No change               |
| `parser`               | Optional              | —                 | Renamed                 |
| `parseConfig`          | —                     | Optional          | New (replaces `parser`) |

---

## Need Help?

If you encounter any issues while migrating, please contact our support team at [support@extend.app](mailto:support@extend.app).

---

## Migration Guides

| Guide                            | Migrating From           | Migrating To                            |
| -------------------------------- | ------------------------ | --------------------------------------- |
| [Overview](./overview)           | —                        | What's new and how to upgrade           |
| [Extract Runs](./extract)        | `/processor_runs`        | `/extract_runs` + `/extract`            |
| [Classify Runs](./classify)      | `/processor_runs`        | `/classify_runs` + `/classify`          |
| [Split Runs](./split)            | `/processor_runs`        | `/split_runs` + `/split`                |
| [Parse Runs](./parse)            | `/parse`, `/parse/async` | `/parse_runs` + `/parse`                |
| [Edit Runs](./edit)              | `/edit`, `/edit/async`   | `/edit_runs` + `/edit`                  |
| [Extractors](./extractors)       | `/processors`            | `/extractors`                           |
| [Classifiers](./classifiers)     | `/processors`            | `/classifiers`                          |
| [Splitters](./splitters)         | `/processors`            | `/splitters`                            |
| [Files](./files)                 | `/files`                 | `/files` (breaking changes)             |
| [Evaluation Sets](./evaluation)  | evaluation endpoints     | Updated evaluation endpoints            |
| [Workflow Runs](./workflow-runs) | `/workflow_runs`         | `/workflow_runs` (breaking changes)     |
| [Webhooks](./webhooks)           | `processor_run.*` events | `extract_run.*`, `classify_run.*`, etc. |