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

# Classifiers Migration

> Migrate from /processors to /classifiers for classifier management

## What You Get

* **Dedicated `/classifiers` endpoints** — No more `type: "CLASSIFY"` filters
* **New `GET /classifiers/{id}` endpoint** — Retrieve a single classifier (not available in old API)
* **Typed SDK responses** — `classifier` objects are typed, no casting needed
* **Simpler config** — No more `type` field required

> **Note**
>
> The old `/processors` endpoint is still supported in this API version for backward compatibility. You can migrate incrementally.

---

## Quick Start: Common Patterns

### Creating a Classifier

#### TypeScript

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

```typescript title="Before (2025-04-21)"
const processor = await client.processor.create({
  name: "Document Classifier",
  type: "CLASSIFY",
  config: { type: "CLASSIFY", classifications: [...] }
});
```

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

```typescript title="After (2026-02-09)"
const classifier = await client.classifiers.create({
  name: "Document Classifier",
  config: { classifications: [...] }
});
```

#### Python

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

```python title="Before (2025-04-21)"
processor = client.processor.create(
    name="Document Classifier",
    type="CLASSIFY",
    config={"type": "CLASSIFY", "classifications": [...]}
)
```

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

```python title="After (2026-02-09)"
classifier = client.classifiers.create(
    name="Document Classifier",
    config={"classifications": [...]}
)
```

#### Java

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

```java title="After (2026-02-09)"
var classifier = client.classifiers().create(ClassifiersCreateRequest.builder()
    .name("Document Classifier")
    .config(ClassifyConfig.builder().classifications(classifications).build())
    .build());
```

### Retrieving a Classifier (New!)

#### TypeScript

```typescript
const classifier = await client.classifiers.retrieve("cl_abc123");
console.log(classifier.draftVersion.config);
```

#### Python

```python
classifier = client.classifiers.retrieve("cl_abc123")
print(classifier.draft_version.config)
```

#### Java

```java
var classifier = client.classifiers().retrieve("cl_abc123");
System.out.println(classifier.getDraftVersion().getConfig());
```

### Listing Classifiers

#### TypeScript

**`Before`**

```typescript title="Before"
const processors = await client.processor.list({ type: "CLASSIFY" });
```

**`After`**

```typescript title="After"
const classifiers = await client.classifiers.list();
```

#### Python

**`Before`**

```python title="Before"
processors = client.processor.list(type="CLASSIFY")
```

**`After`**

```python title="After"
classifiers = client.classifiers.list()
```

#### Java

**`After`**

```java title="After"
var classifiers = client.classifiers().list();
```

### Publishing a Version

#### TypeScript

**`Before`**

```typescript title="Before"
const version = await client.processorVersion.create("dp_abc123", { releaseType: "minor" });
```

**`After`**

```typescript title="After"
const version = await client.classifierVersions.create("cl_abc123", { releaseType: "minor" });
```

#### Python

**`Before`**

```python title="Before"
version = client.processor_version.create("dp_abc123", release_type="minor")
```

**`After`**

```python title="After"
version = client.classifier_versions.create("cl_abc123", release_type="minor")
```

#### Java

**`After`**

```java title="After"
var version = client.classifierVersions().create("cl_abc123",
    ClassifierVersionsCreateRequest.builder().releaseType(ReleaseType.MINOR).build());
```

---

## Endpoint Changes Summary

| Old Endpoint                                | New Endpoint                                           |
| ------------------------------------------- | ------------------------------------------------------ |
| `POST /processors` (type: CLASSIFY)         | `POST /classifiers`                                    |
| `GET /processors?type=CLASSIFY`             | `GET /classifiers`                                     |
| *(not available)*                           | `GET /classifiers/{id}` **(new!)**                     |
| `POST /processors/{id}`                     | `POST /classifiers/{id}`                               |
| `POST /processors/{id}/publish`             | `POST /classifiers/{classifierId}/versions`            |
| `GET /processors/{id}/versions`             | `GET /classifiers/{classifierId}/versions`             |
| `GET /processors/{id}/versions/{versionId}` | `GET /classifiers/{classifierId}/versions/{versionId}` |

---

## Request Changes

| Old                       | New                    | Notes                  |
| ------------------------- | ---------------------- | ---------------------- |
| `type: "CLASSIFY"`        | *(removed)*            | Implicit from endpoint |
| `cloneProcessorId`        | `cloneClassifierId`    | Renamed                |
| `config.type: "CLASSIFY"` | *(removed)*            | Implicit               |
| `config.parser`           | `config.parseConfig`   | Renamed                |
| `config.baseProcessor`    | `config.baseProcessor` | No change (optional)   |

> **Warning**
>
> **`cloneClassifierId` and `config` are mutually exclusive.** You can either clone an existing classifier or provide a config, but not both. The API will return a validation error if both are provided.

---

## 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)*                         |
| `{ "classifier": {...} }`  | `{...}` (object returned directly)  |
| `processors`               | `classifiers`                       |
| `processorVersion`         | `classifierVersion`                 |
| `versions`                 | `classifierVersions`                |
| `draftVersion.processorId` | `draftVersion.classifierId`         |
| List includes `versions[]` | *(removed)* — Use versions endpoint |

---

## SDK Method Reference

| Old Method                         | New Method                               |
| ---------------------------------- | ---------------------------------------- |
| `client.processor.create()`        | `client.classifiers.create()`            |
| `client.processor.list()`          | `client.classifiers.list()`              |
| `client.processor.update()`        | `client.classifiers.update()`            |
| —                                  | `client.classifiers.retrieve()` *(new!)* |
| `client.processorVersion.create()` | `client.classifierVersions.create()`     |
| `client.processorVersion.list()`   | `client.classifierVersions.list()`       |
| `client.processorVersion.get()`    | `client.classifierVersions.retrieve()`   |

---

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