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

# Processor output types

> Understanding different output types for document processors.

Legacy extraction outputs follow a standardized format that you'll encounter when working with evaluation sets, webhooks, and API responses.

## Extraction output type (Fields Array)

> **Note**
>
> This section is relevant for the Fields Array config type. If you are using
> the JSON Schema config type, please see the [Extraction output type (JSON Schema)](#extraction-output-type-json-schema) documentation. If you aren't
> sure which config type you are using, please see the [Migrating to JSON Schema](/2025-04-21/product/migrating-to-json-schema).

For processors using the legacy Fields Array configuration, the extraction output is a flat dictionary where each key is the `fieldName` (or sometimes the `id` if names aren't unique) you defined in the configuration, and the value is an `ExtractionFieldResult` object containing the extracted data and associated details.

### Type definition

Each `ExtractionFieldResult` object contains the core `id`, `type`, and extracted `value`. It can also include the following optional details:

* `schema`: The schema definition for nested fields (like objects or array items).
* `insights`: Reasoning or explanations from the model (if enabled).
* `references`: Location information, including the page number and specific **Bounding Boxes** relevant to the legacy Fields Array configuration (see [Bounding Boxes Guide](/2025-04-21/product/legacy/bounding-boxes-legacy)).
* `enum`: The available options if the field type is `enum`.

```typescript
type ExtractionOutput = {
  [fieldName: string]: ExtractionFieldResult;
};

type ExtractionFieldResult = {
  id: string;
  type:
    | "string"
    | "number"
    | "currency"
    | "boolean"
    | "date"
    | "enum"
    | "array"
    | "object"
    | "signature";
  value:
    | string
    | number
    | Currency
    | boolean
    | Date
    | ExtractionValueArray
    | ExtractionValueObject
    | Signature
    | null;

  /* The following fields are included in outputs, but not required for creating an evaluation set item */

  /* Includes the field schema of nested fields (e.g. array fields, object fields, signature fields etc) */
  schema: ExtractionFieldSchemaValue[];

  /* Insights the reasoning and other insights outputs of the model (when reasoning is enabled) */
  insights: Insight[];

  /* References for the extracted field, always includes the page number for all fields, and might include bounding boxes and citations when available. */
  references: ExtractionFieldResultReference[];

  /* The enum options for enum fields, only set when type=enum */
  enum: EnumOption[];
};

type Currency = {
  amount: number;
  iso_4217_currency_code: string;
};

type Signature = {
  printed_name: string;
  signature_date: string;
  is_signed: boolean;
  title_or_role: string;
};

type EnumOption = {
  value: string; // The enum value (e.g. "ANNUAL", "MONTHLY", etc.)
  description: string; // The description of the enum value
};

type ExtractionValueArray = Array<ExtractionValueObject>;
type ExtractionValueObject = Record<string, any>;
```

#### References

```typescript
type ExtractionFieldResultReference = {
  /* The field id. When nested for arrays, this is the index of the row number */
  id: string;
  /* The field name */
  fieldName: string;
  /* The page number (starting at 1) that this bounding box is from */
  page: number;
  /**
   * Array of bounding box references for this field.
   * There can be multiple is the extraction result was drawn from multiple distinct sources on the page.
   */
  boundingBoxes: BoundingBox[];
};

/* See the Bounding boxes guide for information on how to use/interpret this data */
type BoundingBox = {
  /* The left most position of the bounding box */
  left: number;
  /* The top most position of the bounding box */
  top: number;
  /* The right most position of the bounding box */
  right: number;
  /* The bottom most position of the bounding box */
  bottom: number;
};
```

### Examples

#### Basic Field Types

```json
{
  "invoice_number": {
    "id": "field_123",
    "type": "string",
    "value": "INV-2024-001"
  },
  "amount_due": {
    "id": "field_456",
    "type": "currency",
    "value": {
      "amount": 1250.5,
      "iso_4217_currency_code": "USD"
    }
  }
}
```

#### Nested Structures with References and Insights

```json
{
  "line_items": {
    "id": "field_789",
    "type": "array",
    "value": [
      {
        "item": "Widget A",
        "quantity": 5,
        "price": {
          "amount": 10.0,
          "iso_4217_currency_code": "USD"
        }
      },
      {
        "item": "Widget B",
        "quantity": 2,
        "price": {
          "amount": 15.0,
          "iso_4217_currency_code": "USD"
        }
      }
    ],
    "schema": [
      // Schema definition for the items in the array
      {
        "id": "item",
        "name": "Item Name",
        "type": "string",
        "description": "..."
      },
      {
        "id": "quantity",
        "name": "Quantity",
        "type": "number",
        "description": "..."
      },
      {
        "id": "price",
        "name": "Price",
        "type": "currency",
        "description": "..."
      }
    ]
  },
  "signature_block": {
    "id": "field_101",
    "type": "signature",
    "value": {
      "printed_name": "John Smith",
      "signature_date": "2024-03-15",
      "is_signed": true,
      "title_or_role": "Purchasing Manager"
    },
    "schema": [
      // Schema for the signature object fields
      {
        "id": "printed_name",
        "name": "Printed Name",
        "type": "string",
        "description": "..."
      },
      {
        "id": "signature_date",
        "name": "Signature Date",
        "type": "date",
        "description": "..."
      },
      {
        "id": "is_signed",
        "name": "Is Signed",
        "type": "boolean",
        "description": "..."
      },
      {
        "id": "title_or_role",
        "name": "Title/Role",
        "type": "string",
        "description": "..."
      }
    ],
    "insights": [
      {
        "type": "reasoning",
        "content": "Signature block found at the bottom of page 2. 'is_signed' is true based on visual confirmation."
      }
    ],
    "references": [
      {
        "id": "signature_block", // Refers to the top-level field ID
        "fieldName": "Signature Block",
        "page": 2,
        "boundingBoxes": [
          // Box around the whole signature area
          { "left": 100, "top": 700, "right": 400, "bottom": 780 }
        ]
      }
    ]
  }
}
```

## Shared Types

Certain types are shared across different processor outputs. These provide additional context and information about the processor's decisions.

### Type Definition

```typescript
type Insight = {
  type: "reasoning" | "issue" | "review_summary";
  content: string;
};
```

### Example

```json
{
  "insights": [
    {
      "type": "reasoning",
      "content": "This was classified as an invoice because it contains standard invoice elements including an invoice number, billing details, and itemized charges."
    }
  ]
}
```

Insights can appear in both Extraction and Classification outputs to provide transparency into the model's decision-making process. They are particularly useful when debugging or validating processor results.