> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bland.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Disposition Extractor Draft

> Edit an extractor's editable draft version.

### Overview

> [!NOTE]
>
> Dispositions are enabled per organization. If your organization does not have access, these endpoints return `404`.

Edits the extractor's `editable` version in place. Only the fields you send change; the merged draft is validated with the same rules as [Create Disposition Extractor](https://docs.bland.ai/api-v2/post/agents-id-dispositions-extractors.md). Published versions are never modified; to make the edited draft pinnable, call [Publish Disposition Extractor](https://docs.bland.ai/api-v2/post/agents-id-dispositions-extractors-extractor-id-publish.md).

Requires an admin, owner, operator, or prompter role.

### Headers

**authorization** `string` *required*

Your API key for authentication.

### Path Parameters

**agent\_id** `string` *required*

The agent's unique identifier. A malformed id returns `400` with the message `agentId must be a valid UUID`.

**extractor\_id** `string` *required*

The extractor's unique identifier. Must be organization-wide or scoped to this agent; otherwise returns `404` with the message `Disposition extractor not found`. A malformed id returns `400` with the message `extractorId must be a valid UUID`.

### Body Parameters

Unknown fields are rejected. A body that fails shape validation returns `400` with the message `Invalid request body`; a merged draft that breaks a prompt, schema, or model-profile rule returns `400` with the message `Extractor definition failed validation`. In both cases the error's `ext` field is a JSON string listing each problem.

**expectedVersionId** `string` *required*

The extractor's current `currentVersionId`. If another update or publish has moved it, the request returns `409 CONFLICT` with the message `Extractor draft changed; refresh and try again`.

**expectedDraftRevision** `integer` *required*

The extractor's current `draftRevision`. Minimum `1`. A stale value returns the same `409 CONFLICT`.

**name** `string`

New display name, 1 to 120 characters. Updates both the extractor record and the draft version.

**description** `string | null`

New description, up to 2000 characters. Send `null` to clear it. Updates both the extractor record and the draft version.

**systemPromptMd** `string`

New system prompt in Markdown. Up to 8000 characters and 8000 UTF-8 bytes.

**promptMd** `string`

New extraction prompt in Markdown. 1 to 8000 characters, up to 8000 UTF-8 bytes, and must contain non-whitespace text. `systemPromptMd` and `promptMd` together may not exceed 16000 UTF-8 bytes.

**outputSchema** `object`

Replaces the whole output schema. Same shape and limits as on [Create Disposition Extractor](https://docs.bland.ai/api-v2/post/agents-id-dispositions-extractors.md).

**inferenceConfig** `object`

Replaces the whole inference configuration, so `contextSources` is required inside it. Same fields and limits as on [Create Disposition Extractor](https://docs.bland.ai/api-v2/post/agents-id-dispositions-extractors.md). `modelProfileKey` defaults to `balanced` when omitted.

### Response

**data.extractor** `object`

The extractor record after the update, with `draftRevision` incremented by `1`.

**extractor object**

**id** `string`

Unique identifier for the extractor.

**agentId** `string | null`

`null` for an organization-wide extractor. Otherwise the id of the one agent it is scoped to.

**key** `string`

Stable machine key, unique within your organization.

**name** `string`

The extractor's display name.

**description** `string | null`

Optional description.

**currentVersionId** `string`

Unchanged by this call; the same id as `data.currentVersion.id`.

**activeVersionId** `string | null`

The most recently published version, or `null` if never published. Unchanged by this call.

**draftRevision** `integer`

The new revision. Pass it as `expectedDraftRevision` on your next update or publish.

**createdAt** `string`

ISO 8601 timestamp of creation.

**updatedAt** `string`

ISO 8601 timestamp of this update.

**data.currentVersion** `object`

The updated `editable` version.

**version object**

**id** `string`

Unique identifier for the version.

**extractorId** `string`

The extractor this version belongs to.

**versionNumber** `integer`

Unchanged by this call.

**state** `string`

Always `editable` here.

**name** `string`

Display name after the update.

**description** `string | null`

Description after the update.

**systemPromptMd** `string`

System prompt after the update. Empty string when none is set.

**promptMd** `string`

Extraction prompt after the update.

**outputSchema** `object`

Output schema after the update.

**inferenceConfig** `object`

Inference configuration after the update: `modelProfileKey`, `contextSources`, and, when set, `temperature`, `maxOutputTokens`, and `thinking`.

**createdAt** `string`

ISO 8601 timestamp of creation.

**updatedAt** `string`

ISO 8601 timestamp of this update.

**errors** `null | array`

`null` on success, or a list of error objects if the request failed.

```json Response theme={null}
{
  "data": {
    "extractor": {
      "id": "0f1f5c7b-3d6e-47b0-981b-d121f6853552",
      "agentId": "a1250a05-0ae1-45ca-91e6-1ef7930f0093",
      "key": "callback_window",
      "name": "Callback window",
      "description": "When the caller asked to be called back.",
      "currentVersionId": "cc5a57dc-1f76-4007-a9ea-47378e50de0c",
      "activeVersionId": null,
      "draftRevision": 2,
      "createdAt": "2026-09-08T10:21:37.902Z",
      "updatedAt": "2026-09-10T17:05:12.446Z"
    },
    "currentVersion": {
      "id": "cc5a57dc-1f76-4007-a9ea-47378e50de0c",
      "extractorId": "0f1f5c7b-3d6e-47b0-981b-d121f6853552",
      "versionNumber": 1,
      "state": "editable",
      "name": "Callback window",
      "description": "When the caller asked to be called back.",
      "systemPromptMd": "You extract scheduling details from customer service calls.",
      "promptMd": "Find the day and time window the caller asked for a callback. Leave fields empty if the caller did not ask for one.",
      "outputSchema": {
        "kind": "object",
        "properties": {
          "requested": { "kind": "boolean", "description": "Whether the caller asked for a callback." },
          "window_start": { "kind": "string", "format": "date-time" },
          "window_end": { "kind": "string", "format": "date-time" }
        },
        "required": ["requested"]
      },
      "inferenceConfig": {
        "modelProfileKey": "high_accuracy",
        "temperature": 0,
        "thinking": "medium",
        "contextSources": ["transcript"]
      },
      "createdAt": "2026-09-08T10:21:37.902Z",
      "updatedAt": "2026-09-10T17:05:12.446Z"
    }
  },
  "errors": null
}
```

```json Conflict theme={null}
{
  "data": null,
  "errors": [
    {
      "error": "CONFLICT",
      "message": "Extractor draft changed; refresh and try again"
    }
  ]
}
```

```json Not Found theme={null}
{
  "data": null,
  "errors": [
    {
      "error": "NOT_FOUND",
      "message": "Disposition extractor not found"
    }
  ]
}
```

***

Docs for agents: [llms.txt](https://docs.bland.ai/llms.txt)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.