## Create Extract Job

`ExtractV2Job Extract.Create(ExtractCreateParamsparameters, CancellationTokencancellationToken = default)`

**post** `/api/v2/extract`

Create an extraction job.

Extracts structured data from a document using either a saved
configuration or an inline JSON Schema.

## Input

Provide exactly one of:

- `configuration_id` — reference a saved extraction config
- `configuration` — inline configuration with a `data_schema`

## Document input

Set `file_input` to a file ID (`dfl-...`) or a
completed parse job ID (`pjb-...`).

The job runs asynchronously. Poll `GET /extract/{job_id}` or
register a webhook to monitor completion.

### Parameters

- `ExtractCreateParams parameters`

  - `required string fileInput`

    Body param: File ID or parse job ID to extract from

  - `string? organizationID`

    Query param

  - `string? projectID`

    Query param

  - `ExtractConfiguration? configuration`

    Body param: Extract configuration combining parse and extract settings.

  - `string? configurationID`

    Body param: Saved configuration ID

  - `IReadOnlyList<WebhookConfiguration>? webhookConfigurations`

    Body param: Outbound webhook endpoints to notify on job status changes

    - `IReadOnlyList<WebhookEvent>? WebhookEvents`

      Events to subscribe to (e.g. 'parse.success', 'extract.error'). If null, all events are delivered.

      - `"classify.cancelled"ClassifyCancelled`

      - `"classify.error"ClassifyError`

      - `"classify.partial_success"ClassifyPartialSuccess`

      - `"classify.pending"ClassifyPending`

      - `"classify.running"ClassifyRunning`

      - `"classify.success"ClassifySuccess`

      - `"extract.cancelled"ExtractCancelled`

      - `"extract.error"ExtractError`

      - `"extract.partial_success"ExtractPartialSuccess`

      - `"extract.pending"ExtractPending`

      - `"extract.success"ExtractSuccess`

      - `"parse.cancelled"ParseCancelled`

      - `"parse.error"ParseError`

      - `"parse.partial_success"ParsePartialSuccess`

      - `"parse.pending"ParsePending`

      - `"parse.running"ParseRunning`

      - `"parse.success"ParseSuccess`

      - `"sheets.cancelled"SheetsCancelled`

      - `"sheets.error"SheetsError`

      - `"sheets.partial_success"SheetsPartialSuccess`

      - `"sheets.pending"SheetsPending`

      - `"sheets.success"SheetsSuccess`

      - `"split.cancelled"SplitCancelled`

      - `"split.error"SplitError`

      - `"split.pending"SplitPending`

      - `"split.processing"SplitProcessing`

      - `"split.success"SplitSuccess`

      - `"unmapped_event"UnmappedEvent`

    - `IReadOnlyDictionary<string, string>? WebhookHeaders`

      Custom HTTP headers sent with each webhook request (e.g. auth tokens)

    - `string? WebhookOutputFormat`

      Response format sent to the webhook: 'string' (default) or 'json'

    - `string? WebhookSigningSecret`

      Shared signing secret used to sign webhook deliveries. When set, each request includes an HMAC-SHA256 signature of the request body in the 'LC-Signature' header (value 'sha256=<hex>'). Recompute the HMAC over the raw request body with this secret to verify the delivery is authentic.

    - `string? WebhookUrl`

      URL to receive webhook POST notifications

### Returns

- `class ExtractV2Job:`

  An extraction job.

  - `required string ID`

    Unique job identifier (job_id)

  - `required DateTimeOffset CreatedAt`

    Creation timestamp

  - `required string FileInput`

    File ID or parse job ID that was extracted

  - `required string ProjectID`

    Project this job belongs to

  - `required string Status`

    Current job status.

    - `PENDING` — queued, not yet started
    - `RUNNING` — actively processing
    - `COMPLETED` — finished successfully
    - `FAILED` — terminated with an error
    - `CANCELLED` — cancelled by user

  - `required DateTimeOffset UpdatedAt`

    Last update timestamp

  - `ExtractConfiguration? Configuration`

    Extract configuration combining parse and extract settings.

    - `required IReadOnlyDictionary<string, DataSchema?> DataSchema`

      JSON Schema defining the fields to extract. Validate with the /schema/validate endpoint first.

      - `IReadOnlyDictionary<string, JsonElement>`

      - `IReadOnlyList<JsonElement>`

      - `string`

      - `Double`

      - `Boolean`

    - `Boolean CiteSources`

      Include citations in results

    - `Boolean ConfidenceScores`

      Include confidence scores in results

    - `ExtractionTarget ExtractionTarget`

      Granularity of extraction: per_doc returns one object per document, per_page returns one object per page, per_table_row returns one object per table row

      - `"per_doc"PerDoc`

      - `"per_page"PerPage`

      - `"per_table_row"PerTableRow`

    - `Long? MaxPages`

      Maximum number of pages to process. Omit for no limit.

    - `string? ParseConfigID`

      Saved parse configuration ID to control how the document is parsed before extraction

    - `string? ParseTier`

      Parse tier to use before extraction. Defaults to the extract tier if not specified.

    - `string? SystemPrompt`

      Custom system prompt to guide extraction behavior

    - `string? TargetPages`

      Comma-separated page numbers or ranges to process (1-based). Omit to process all pages.

    - `Tier Tier`

      Extract tier: cost_effective (5 credits/page), agentic (15 credits/page), or agentic_plus (50 credits/page)

      - `"agentic"Agentic`

      - `"agentic_plus"AgenticPlus`

      - `"cost_effective"CostEffective`

    - `string Version`

      Use 'latest' for the latest release for the selected tier or a date string (YYYY-MM-DD format) to pin to the nearest release at or before that date. Job responses always report the concrete resolved version the job runs, fixed at job creation; saved configurations keep the value as provided.

  - `string? ConfigurationID`

    Saved extract configuration ID used for this job, if any

  - `string? ErrorMessage`

    Error details when status is FAILED

  - `ExtractJobMetadata? ExtractMetadata`

    Extraction metadata.

    - `ExtractedFieldMetadata? FieldMetadata`

      Metadata for extracted fields including document, page, and row level info.

      - `IReadOnlyDictionary<string, DocumentMetadata?>? DocumentMetadata`

        Per-field metadata keyed by field name from your schema. Scalar fields (e.g. `vendor`) map to a FieldMetadataEntry with citation and confidence. Array fields (e.g. `items`) map to a list where each element contains per-sub-field FieldMetadataEntry objects, indexed by array position. Nested objects contain sub-field entries recursively.

        - `IReadOnlyDictionary<string, JsonElement>`

        - `IReadOnlyList<JsonElement>`

        - `string`

        - `Double`

        - `Boolean`

      - `IReadOnlyList<IReadOnlyDictionary<string, PageMetadata?>>? PageMetadata`

        Per-page metadata when extraction_target is per_page

        - `IReadOnlyDictionary<string, JsonElement>`

        - `IReadOnlyList<JsonElement>`

        - `string`

        - `Double`

        - `Boolean`

      - `IReadOnlyList<IReadOnlyDictionary<string, RowMetadata?>>? RowMetadata`

        Per-row metadata when extraction_target is per_table_row

        - `IReadOnlyDictionary<string, JsonElement>`

        - `IReadOnlyList<JsonElement>`

        - `string`

        - `Double`

        - `Boolean`

    - `string? ParseJobID`

      Reference to the ParseJob ID used for parsing

    - `string? ParseTier`

      Parse tier used for parsing the document

  - `ExtractResult? ExtractResult`

    Extracted data conforming to the data_schema. Returns a single object for per_doc, or an array for per_page / per_table_row.

    - `IReadOnlyDictionary<string, UnionMember0Item?>`

      - `IReadOnlyDictionary<string, JsonElement>`

      - `IReadOnlyList<JsonElement>`

      - `string`

      - `Double`

      - `Boolean`

    - `IReadOnlyList<IReadOnlyDictionary<string, UnnamedSchemaWithArrayParent1Item?>>`

      - `IReadOnlyDictionary<string, JsonElement>`

      - `IReadOnlyList<JsonElement>`

      - `string`

      - `Double`

      - `Boolean`

  - `Metadata? Metadata`

    Job-level metadata.

    - `ExtractJobUsage? Usage`

      Extraction usage metrics.

      - `Long? NumPagesBilled`

        Number of effective pages billed

      - `Long? NumPagesExtracted`

        Number of pages extracted

### Example

```csharp
ExtractCreateParams parameters = new()
{
    FileInput = "dfl-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
};

var extractV2Job = await client.Extract.Create(parameters);

Console.WriteLine(extractV2Job);
```

#### Response

```json
{
  "id": "ext-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "created_at": "2019-12-27T18:11:19.117Z",
  "file_input": "dfl-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "project_id": "prj-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "status": "COMPLETED",
  "updated_at": "2019-12-27T18:11:19.117Z",
  "configuration": {
    "data_schema": {
      "foo": {
        "foo": "bar"
      }
    },
    "cite_sources": true,
    "confidence_scores": true,
    "extraction_target": "per_doc",
    "max_pages": 10,
    "parse_config_id": "cfg-11111111-2222-3333-4444-555555555555",
    "parse_tier": "fast",
    "system_prompt": "Extract all monetary values in USD. If a currency is not specified, assume USD.",
    "target_pages": "1,3,5-7",
    "tier": "cost_effective",
    "version": "latest"
  },
  "configuration_id": "cfg-11111111-2222-3333-4444-555555555555",
  "error_message": "error_message",
  "extract_metadata": {
    "field_metadata": {
      "document_metadata": {
        "items": [
          {
            "amount": {
              "citation": [
                {
                  "matching_text": "$10.00",
                  "page": 1
                }
              ],
              "confidence": 1
            },
            "description": {
              "citation": [
                {
                  "matching_text": "$10/month",
                  "page": 1
                }
              ],
              "confidence": 0.998
            }
          }
        ],
        "total": {
          "citation": "bar",
          "confidence": "bar"
        },
        "vendor": {
          "citation": "bar",
          "confidence": "bar",
          "extraction_confidence": "bar",
          "parsing_confidence": "bar"
        }
      },
      "page_metadata": [
        {
          "foo": {
            "foo": "bar"
          }
        }
      ],
      "row_metadata": [
        {
          "foo": {
            "foo": "bar"
          }
        }
      ]
    },
    "parse_job_id": "parse_job_id",
    "parse_tier": "parse_tier"
  },
  "extract_result": {
    "foo": {
      "foo": "bar"
    }
  },
  "metadata": {
    "usage": {
      "num_pages_billed": 0,
      "num_pages_extracted": 0
    }
  }
}
```
