> 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.

# Evaluation Sets Migration

> Changes to evaluation sets and evaluation set runs

## What's Changed

* **New evaluation set runs endpoints** — `POST /evaluation_set_runs` to start an evaluation run and `GET /evaluation_set_runs/{id}` to retrieve it
* **Nested item paths** — `/evaluation_set_items` → `/evaluation_sets/{id}/items`
* **New get item endpoint** — `GET /evaluation_sets/{id}/items/{itemId}` (wasn't available before)
* **Entity objects** — `processorId` replaced with typed `entity` object

> **Info**
>
> If you don't use evaluation sets, you can skip this page.

---

## Quick Start: Common Patterns

#### TypeScript

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

```typescript title="Before (2025-04-21)"
// Evaluation Sets
const sets = await client.evaluationSet.list({ processorId: "dp_abc123" });
const set = await client.evaluationSet.get("ev_abc123");

// Evaluation Set Items
const items = await client.evaluationSetItem.list("ev_abc123");
await client.evaluationSetItem.update("evi_xyz789", { expectedOutput: {...} });
```

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

```typescript title="After (2026-02-09)"
// Evaluation Set Runs (new!)
const evalRun = await client.evaluationSetRuns.retrieve("bpr_abc123");

// Evaluation Sets
const sets = await client.evaluationSets.list({ entityId: "ex_abc123" });
const set = await client.evaluationSets.retrieve("ev_abc123");

// Evaluation Set Items
const items = await client.evaluationSetItems.list("ev_abc123");
const item = await client.evaluationSetItems.retrieve("ev_abc123", "evi_xyz789");
await client.evaluationSetItems.update("ev_abc123", "evi_xyz789", { expectedOutput: {...} });
```

#### Python

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

```python title="Before (2025-04-21)"
# Evaluation Sets
sets = client.evaluation_set.list(processor_id="dp_abc123")
set = client.evaluation_set.get("ev_abc123")

# Evaluation Set Items
items = client.evaluation_set_item.list("ev_abc123")
client.evaluation_set_item.update("evi_xyz789", expected_output={...})
```

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

```python title="After (2026-02-09)"
# Evaluation Set Runs (new!)
eval_run = client.evaluation_set_runs.retrieve("bpr_abc123")

# Evaluation Sets
sets = client.evaluation_sets.list(entity_id="ex_abc123")
set = client.evaluation_sets.retrieve("ev_abc123")

# Evaluation Set Items
items = client.evaluation_set_items.list("ev_abc123")
item = client.evaluation_set_items.retrieve("ev_abc123", "evi_xyz789")
client.evaluation_set_items.update("ev_abc123", "evi_xyz789", expected_output={...})
```

#### Java

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

```java title="After (2026-02-09)"
// Evaluation Set Runs (new!)
var evalRun = client.evaluationSetRuns().retrieve("bpr_abc123");

// Evaluation Sets
var sets = client.evaluationSets().list(EvaluationSetsListRequest.builder()
    .entityId("ex_abc123").build());
var set = client.evaluationSets().retrieve("ev_abc123");

// Evaluation Set Items
var items = client.evaluationSetItems().list("ev_abc123");
var item = client.evaluationSetItems().retrieve("ev_abc123", "evi_xyz789");
client.evaluationSetItems().update("ev_abc123", "evi_xyz789",
    EvaluationSetItemUpdateRequest.builder().expectedOutput(output).build());
```

---

## Endpoint Changes Summary

| Old Endpoint                        | New Endpoint                                  | Change                                         |
| ----------------------------------- | --------------------------------------------- | ---------------------------------------------- |
| `GET /batch_processor_runs/{id}`    | `GET /batch_processor_runs/{id}`              | Deprecated but still works                     |
| —                                   | `POST /evaluation_set_runs`                   | **New** for starting evaluation set runs       |
| —                                   | `GET /evaluation_set_runs/{id}`               | **New** for evaluation set runs                |
| `GET /evaluation_sets`              | `GET /evaluation_sets`                        | Query param `processorId` → `entityId`         |
| `POST /evaluation_sets`             | `POST /evaluation_sets`                       | Request body `processorId` → `entityId`        |
| `GET /evaluation_sets/{id}`         | `GET /evaluation_sets/{id}`                   | Response has `entity` instead of `processorId` |
| `GET /evaluation_sets/{id}/items`   | `GET /evaluation_sets/{id}/items`             | Returns summaries (no `expectedOutput`)        |
| —                                   | `GET /evaluation_sets/{id}/items/{itemId}`    | **New** for full item details                  |
| `POST /evaluation_set_items`        | `POST /evaluation_sets/{id}/items`            | Path changed, supports batch                   |
| `POST /evaluation_set_items/bulk`   | `POST /evaluation_sets/{id}/items`            | Consolidated into single endpoint              |
| `POST /evaluation_set_items/{id}`   | `POST /evaluation_sets/{id}/items/{itemId}`   | Path changed                                   |
| `DELETE /evaluation_set_items/{id}` | `DELETE /evaluation_sets/{id}/items/{itemId}` | Path changed                                   |

---

## Request Changes

### Evaluation Sets

| Old                        | New        | Notes   |
| -------------------------- | ---------- | ------- |
| `processorId` (query/body) | `entityId` | Renamed |

### Evaluation Set Items

| Old                                                         | New                                | Notes             |
| ----------------------------------------------------------- | ---------------------------------- | ----------------- |
| `POST /evaluation_set_items` with `evaluationSetId` in body | `POST /evaluation_sets/{id}/items` | ID moved to path  |
| Separate single/bulk endpoints                              | Unified endpoint (1-100 items)     | Use `items` array |

---

## 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.

### Key Differences

| Old                             | New                                            |
| ------------------------------- | ---------------------------------------------- |
| `success: true`                 | *(removed)* — Use HTTP status codes            |
| `{ "evaluationSet": {...} }`    | `{...}` (object returned directly)             |
| `processorId`                   | `entity` object with full details              |
| `fileId`                        | `file` object with full details                |
| List items returns full objects | List returns summaries (use retrieve for full) |

### Example: EvaluationSet Response

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

```json title="After (2026-02-09)"
{
  "object": "evaluation_set",
  "id": "ev_abc123",
  "name": "Invoice Test Set",
  "entity": {
    "object": "extractor",
    "id": "ex_xyz789",
    "name": "Invoice Extractor"
  },
  "createdAt": "2024-03-21T15:30:00Z",
  "updatedAt": "2024-03-21T16:45:00Z"
}
```

---

## SDK Method Reference

| Old Method                               | New Method                                             |
| ---------------------------------------- | ------------------------------------------------------ |
| `client.batchProcessorRun.get()`         | `client.batchProcessorRuns.retrieve()` *(deprecated)*  |
| —                                        | `client.evaluationSetRuns.retrieve()` *(new)*          |
| `client.evaluationSet.list()`            | `client.evaluationSets.list()`                         |
| `client.evaluationSet.get()`             | `client.evaluationSets.retrieve()`                     |
| `client.evaluationSet.create()`          | `client.evaluationSets.create()`                       |
| `client.evaluationSetItem.list()`        | `client.evaluationSetItems.list()`                     |
| —                                        | `client.evaluationSetItems.retrieve()` *(new)*         |
| `client.evaluationSetItem.create()`      | `client.evaluationSetItems.create()`                   |
| `client.evaluationSetItem.createBatch()` | `client.evaluationSetItems.create()` (supports arrays) |
| `client.evaluationSetItem.update()`      | `client.evaluationSetItems.update()`                   |
| `client.evaluationSetItem.delete()`      | `client.evaluationSetItems.delete()`                   |

---

#### Detailed Schema Changes

### EvaluationSetRun Schema (New)

| Property          | Old (BatchProcessorRun) | New (EvaluationSetRun) | Change                   |
| ----------------- | ----------------------- | ---------------------- | ------------------------ |
| `object`          | `"batch_processor_run"` | `"evaluation_set_run"` | Value changed            |
| `id`              | Required `string`       | Required `string`      | No change                |
| `evaluationSetId` | `sourceId` field        | Required `string`      | Renamed                  |
| `processorId`     | Required                | —                      | Removed, see `entity.id` |
| `entity`          | —                       | Required               | New                      |
| `entityVersion`   | —                       | Required               | New                      |
| `source`          | Required `"EVAL_SET"`   | —                      | Removed (implicit)       |
| `runCount`        | Required                | —                      | Removed                  |

### EvaluationSet Schema

| Property      | Old               | New      | Change                       |
| ------------- | ----------------- | -------- | ---------------------------- |
| `processorId` | Required `string` | —        | Removed                      |
| `entity`      | —                 | Required | New (replaces `processorId`) |

### EvaluationSetItem Schema

| Property | Old               | New                    | Change                  |
| -------- | ----------------- | ---------------------- | ----------------------- |
| `fileId` | Required `string` | —                      | Removed                 |
| `file`   | —                 | Required `FileSummary` | New (replaces `fileId`) |

### EvaluationSetItemSummary Schema (New)

Returned by list endpoint instead of full items:

| Property | Type                    |
| -------- | ----------------------- |
| `object` | `"evaluation_set_item"` |
| `id`     | Required `string`       |
| `file`   | Required `FileSummary`  |

---

## 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. |