openapi: 3.1.0
info:
title: 'LandingAI Agentic Document Extraction (ADE) API v1: , Extract, Classify, Split, Section Classes Parse API'
version: 0.1.0
description: 'Convert documents such as PDFs, images, and Office files into structured data with LandingAI''s Agentic Document Extraction (ADE) v1 endpoints. Includes Parse (documents to Markdown and structured chunks with grounding), Extract (schema-based field extraction), Classify (page-level classification), Split (separate multi-document files), and Section (hierarchical table of contents), plus asynchronous jobs for parsing and extraction. Documentation: https://docs.landing.ai'
servers:
- url: https://api.va.landing.ai
description: Production vision tools API
tags:
- name: Parse
paths:
/v2/parse:
post:
tags:
- Parse
summary: ADE Parse
description: Parse a document and return the parse response inline.
operationId: parse_run_sync
responses:
'200':
description: The parse response
content:
application/json:
schema:
$ref: '#/components/schemas/ParseResponse'
'206':
description: Partial success (some pages failed to parse)
content:
application/json:
schema:
$ref: '#/components/schemas/ParseResponse'
'422':
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
document:
type: string
format: binary
description: The file to parse. The file must be a PDF or image; see the list of [supported file types](https://docs.landing.ai/dpt3/file-types). Provide either `document` or `document_url`, not both.
document_url:
type: string
description: A publicly accessible URL to the file to parse. The file must be a PDF or image; see the list of [supported file types](https://docs.landing.ai/dpt3/file-types). Provide either `document` or `document_url`, not both.
model:
type: string
description: The DPT-3 model snapshot to use for this request. Accepts a dated snapshot (for example, `dpt-3-pro-20260710`), the `dpt-3-pro-latest` alias, or the bare `dpt-3-pro` family name (equivalent to `dpt-3-pro-latest`). Defaults to the latest DPT-3 Pro snapshot.
options:
additionalProperties: false
properties:
pages:
anyOf:
- items:
type: integer
type: array
- type: 'null'
default: null
title: Pages
blocks:
$ref: '#/components/schemas/BlocksOptions'
atomic_grounding:
default: true
description: Include the fine-grained `atomic_grounding` array on leaf elements. Set `false` to omit the field entirely from every node.
title: Atomic Grounding
type: boolean
inline_markdown:
default: false
description: 'Include each node''s slice of the document `markdown` inline as a `markdown` field on every structure node: the document root, each page, and each element (including table cells). `atomic_grounding` entries do not carry it.'
title: Inline Markdown
type: boolean
password:
anyOf:
- type: string
- type: 'null'
default: null
description: Password for encrypted PDFs. Not currently supported — providing a value returns a 422 error; decrypt the file before uploading.
title: Password
title: ParseOptions
type: object
description: Optional object that customizes the parse. Use it to select which pages to process, adjust how content appears in the Markdown, or control how much detail the response includes. Sent as a JSON-serialized string in form data.
x-codeSamples:
- lang: cURL
label: cURL
source: "curl -X POST 'https://api.ade.landing.ai/v2/parse' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -F 'document=@document.pdf' \\\n -F 'model=dpt-3-pro-latest'"
- lang: Python
label: Python
source: 'import requests
url = ''https://api.ade.landing.ai/v2/parse''
headers = {''Authorization'': ''Bearer YOUR_API_KEY''}
files = {''document'': open(''document.pdf'', ''rb'')}
data = {''model'': ''dpt-3-pro-latest''}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())'
- lang: JavaScript
label: Node.js
source: "const axios = require('axios');\nconst FormData = require('form-data');\nconst fs = require('fs');\n\nconst form = new FormData();\nform.append('document', fs.createReadStream('document.pdf'));\nform.append('model', 'dpt-3-pro-latest');\n\naxios.post('https://api.ade.landing.ai/v2/parse', form, {\n headers: { 'Authorization': 'Bearer YOUR_API_KEY', ...form.getHeaders() }\n})\n .then(response => console.log(response.data))\n .catch(error => console.error(error));"
/v2/parse/jobs:
post:
tags:
- Parse
summary: ADE Parse Jobs
operationId: parse_create_job
responses:
'202':
description: Job created
content:
application/json:
schema:
type: object
required:
- job_id
- status
- created_at
properties:
job_id:
type: string
description: 'The unique identifier for the created parse job. Poll ``GET /v2/parse/jobs/{job_id}`` for its status and result. Format: ``<service>-<26-character Crockford base32 ULID>`` matching ``^(parse|extract)-[0-9a-hjkmnp-tv-z]{26}$``. Opaque, server-minted, and stable for the life of the job — the same id is returned on the sync response, the async 202, and every poll. Treat it as opaque; older id formats remain accepted indefinitely and are never re-issued.'
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: The job's status at creation — normally ``pending`` (a just-created job that is still running is reported as ``pending``), but may already be a terminal ``completed`` / ``failed`` if the job finished before the create response was rendered.
created_at:
type:
- string
- 'null'
description: ISO-8601 timestamp for when the job was created.
'422':
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: Parse a document asynchronously. Returns a job ID; use it to poll for the job's status and retrieve the parse result once processing completes.
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
document:
type: string
format: binary
description: The file to parse. The file must be a PDF or image; see the list of [supported file types](https://docs.landing.ai/dpt3/file-types). Provide either `document` or `document_url`, not both.
document_url:
type: string
description: A publicly accessible URL to the file to parse. The file must be a PDF or image; see the list of [supported file types](https://docs.landing.ai/dpt3/file-types). Provide either `document` or `document_url`, not both.
model:
type: string
description: The DPT-3 model snapshot to use for this request. Accepts a dated snapshot (for example, `dpt-3-pro-20260710`), the `dpt-3-pro-latest` alias, or the bare `dpt-3-pro` family name (equivalent to `dpt-3-pro-latest`). Defaults to the latest DPT-3 Pro snapshot.
options:
additionalProperties: false
properties:
pages:
anyOf:
- items:
type: integer
type: array
- type: 'null'
default: null
title: Pages
blocks:
$ref: '#/components/schemas/BlocksOptions'
atomic_grounding:
default: true
description: Include the fine-grained `atomic_grounding` array on leaf elements. Set `false` to omit the field entirely from every node.
title: Atomic Grounding
type: boolean
inline_markdown:
default: false
description: 'Include each node''s slice of the document `markdown` inline as a `markdown` field on every structure node: the document root, each page, and each element (including table cells). `atomic_grounding` entries do not carry it.'
title: Inline Markdown
type: boolean
password:
anyOf:
- type: string
- type: 'null'
default: null
description: Password for encrypted PDFs. Not currently supported — providing a value returns a 422 error; decrypt the file before uploading.
title: Password
title: ParseOptions
type: object
description: Optional object that customizes the parse. Use it to select which pages to process, adjust how content appears in the Markdown, or control how much detail the response includes. Sent as a JSON-serialized string in form data.
output_save_url:
type: string
description: Public URL the full response is delivered to; the API response then carries ``output_url`` instead of inline data.
service_tier:
type: string
enum:
- standard
- priority
description: Async service tier (``POST /jobs`` only). ``priority`` runs in the fast lane at the sync billing rate; absent → ``standard``.
x-codeSamples:
- lang: cURL
label: cURL
source: "curl -X POST 'https://api.ade.landing.ai/v2/parse/jobs' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -F 'document=@document.pdf' \\\n -F 'model=dpt-3-pro-latest'"
- lang: Python
label: Python
source: 'import requests
url = ''https://api.ade.landing.ai/v2/parse/jobs''
headers = {''Authorization'': ''Bearer YOUR_API_KEY''}
files = {''document'': open(''document.pdf'', ''rb'')}
data = {''model'': ''dpt-3-pro-latest''}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())'
- lang: JavaScript
label: Node.js
source: "const axios = require('axios');\nconst FormData = require('form-data');\nconst fs = require('fs');\n\nconst form = new FormData();\nform.append('document', fs.createReadStream('document.pdf'));\nform.append('model', 'dpt-3-pro-latest');\n\naxios.post('https://api.ade.landing.ai/v2/parse/jobs', form, {\n headers: { 'Authorization': 'Bearer YOUR_API_KEY', ...form.getHeaders() }\n})\n .then(response => console.log(response.data))\n .catch(error => console.error(error));"
get:
tags:
- Parse
summary: ADE List Parse Jobs
operationId: parse_list_jobs
parameters:
- name: page
in: query
required: false
schema:
type: integer
minimum: 0
description: Page number (0-indexed).
default: 0
title: Page
description: Page number (0-indexed).
- name: page_size
in: query
required: false
schema:
type: integer
maximum: 100
minimum: 1
description: Number of items per page.
default: 10
title: Page Size
description: Number of items per page.
- name: status
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Filter by job status.
title: Status
description: Filter by job status.
responses:
'200':
description: The caller's jobs, newest first
content:
application/json:
schema:
type: object
properties:
jobs:
type: array
description: The caller's parse jobs for this page, newest first.
items:
type: object
properties:
job_id:
type: string
description: 'The unique identifier for the parse job. Format: ``<service>-<26-character Crockford base32 ULID>`` matching ``^(parse|extract)-[0-9a-hjkmnp-tv-z]{26}$``. Opaque, server-minted, and stable for the life of the job — the same id is returned on the sync response, the async 202, and every poll. Treat it as opaque; older id formats remain accepted indefinitely and are never re-issued.'
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: 'The job''s current status: ``pending``, ``processing``, ``completed``, or ``failed``.'
created_at:
type:
- string
- 'null'
description: ISO-8601 timestamp for when the job was created.
completed_at:
type:
- string
- 'null'
description: ISO-8601 timestamp for when the job finished, if terminal.
model_version:
type:
- string
- 'null'
description: The model snapshot used to parse the document.
failure_reason:
type:
- string
- 'null'
description: The reason the job failed. Present only when ``status`` is ``failed``.
page:
type: integer
description: The 0-indexed page number.
page_size:
type: integer
description: Items per page.
has_more:
type: boolean
description: Whether more jobs exist beyond this page; request the next ``page`` to fetch them.
'422':
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-codeSamples:
- lang: cURL
label: cURL
source: "curl 'https://api.ade.landing.ai/v2/parse/jobs' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
- lang: Python
label: Python
source: 'import requests
url = ''https://api.ade.landing.ai/v2/parse/jobs''
headers = {''Authorization'': ''Bearer YOUR_API_KEY''}
response = requests.get(url, headers=headers)
print(response.json())'
- lang: JavaScript
label: Node.js
source: "const axios = require('axios');\n\naxios.get('https://api.ade.landing.ai/v2/parse/jobs', {\n headers: { 'Authorization': 'Bearer YOUR_API_KEY' }\n})\n .then(response => console.log(response.data))\n .catch(error => console.error(error));"
/v2/parse/jobs/{job_id}:
get:
tags:
- Parse
summary: ADE Get Parse Jobs
description: Get the status of an async parse job. Once the job has ``completed``, ``result`` carries the parse response (or ``output_url`` when ``output_save_url`` was set). Partial success (some pages failed) is reported in ``result.metadata.failed_pages``.
operationId: parse_get_job
parameters:
- name: job_id
in: path
required: true
schema:
type: string
description: The identifier of the job to retrieve, as returned by the create-job request.
title: Job Id
description: The identifier of the job to retrieve, as returned by the create-job request.
responses:
'200':
description: Job status / result
content:
application/json:
schema:
type: object
properties:
job_id:
type: string
description: 'The unique identifier for this parse job. Format: ``<service>-<26-character Crockford base32 ULID>`` matching ``^(parse|extract)-[0-9a-hjkmnp-tv-z]{26}$``. Opaque, server-minted, and stable for the life of the job — the same id is returned on the sync response, the async 202, and every poll. Treat it as opaque; older id formats remain accepted indefinitely and are never re-issued.'
status:
type: string
enum:
- pending
- processing
- completed
- failed
description: 'The job''s current status: ``pending``, ``processing``, ``completed``, or ``failed``.'
created_at:
type:
- string
- 'null'
description: ISO-8601 timestamp for when the job was created.
completed_at:
type: string
description: ISO-8601 timestamp; present once the job is terminal.
progress:
type: number
description: Job completion as a decimal from 0 (not started) to 1 (complete). Present while ``processing``.
result:
anyOf:
- $ref: '#/components/schemas/ParseResponse'
- type: 'null'
description: The parse response, present once the job has ``completed`` and ``output_save_url`` was not set. When ``output_save_url`` was set, the result is delivered there and ``output_url`` is returned instead.
output_url:
type:
- string
- 'null'
description: The URL the result was delivered to. Present once the job has ``completed`` and ``output_save_url`` was set, instead of inline ``result``.
error:
type: object
description: Present once the job has ``failed`` — the failure code + message.
properties:
code:
type: string
description: Stable error code.
message:
type: string
'404':
description: Job not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-codeSamples:
- lang: cURL
label: cURL
source: "curl 'https://api.ade.landing.ai/v2/parse/jobs/JOB_ID' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
- lang: Python
label: Python
source: 'import requests
url = ''https://api.ade.landing.ai/v2/parse/jobs/JOB_ID''
headers = {''Authorization'': ''Bearer YOUR_API_KEY''}
response = requests.get(url, headers=headers)
print(response.json())'
- lang: JavaScript
label: Node.js
source: "const axios = require('axios');\n\naxios.get('https://api.ade.landing.ai/v2/parse/jobs/JOB_ID', {\n headers: { 'Authorization': 'Bearer YOUR_API_KEY' }\n})\n .then(response => console.log(response.data))\n .catch(error => console.error(error));"
components:
schemas:
Document:
properties:
type:
const: document
default: document
description: The node type. Identifies this node as the root of the structure tree.
title: Type
type: string
children:
description: The pages of the document, in source order.
items:
$ref: '#/components/schemas/Page'
title: Children
type: array
markdown:
anyOf:
- type: string
- type: 'null'
default: null
description: The full document markdown — identical to the top-level `markdown` field, included so the structure tree is self-contained. Present only when `options.inline_markdown` is `true`.
title: Markdown
title: Document
type: object
Page:
properties:
type:
const: page
default: page
description: The node type. Identifies this node as a page in the structure tree.
title: Type
type: string
grounding:
$ref: '#/components/schemas/Grounding'
description: 'The page''s spatial data: `page` is the 1-indexed page number in the source document (not contiguous when `options.pages` filters out some pages); `range` covers this page''s content in the top-level `markdown` string (zero-length `start == end` for failed pages); `box` is always the full page `{0, 0, 1, 1}`.'
status:
default: ok
description: Whether this page was parsed successfully (`ok`) or failed (`failed`).
enum:
- ok
- failed
title: Status
type: string
reason:
anyOf:
- type: string
- type: 'null'
default: null
description: Failure reason. Present only when `status` is `failed`.
title: Reason
children:
description: The elements detected on this page, in reading order. Empty for failed pages.
items:
$ref: '#/components/schemas/Element'
title: Children
type: array
markdown:
anyOf:
- type: string
- type: 'null'
default: null
description: This page's slice of the top-level `markdown` string (`markdown[grounding.range.start:grounding.range.end]`). `""` for failed pages. Present only when `options.inline_markdown` is `true`.
title: Markdown
required:
- grounding
title: Page
type: object
FigureOptions:
additionalProperties: false
properties:
markdown:
default: true
title: Markdown
type: boolean
title: FigureOptions
type: object
Element:
description: 'Hierarchical document element. All non-page elements share this shape.
Keys off `type`; optional fields are excluded from the serialized JSON
via ``exclude_none=True`` when not set.'
properties:
type:
description: The element type. Determines which optional fields appear on this element.
enum:
- text
- table
- table_cell
- figure
- marginalia
- attestation
- logo
- card
- scan_code
title: Type
type: string
id:
description: Semantic element id, unique within the document. Format `<type>-<index>`, where `<index>` is a per-type 0-based counter assigned in reading order — `text-0` is the first text element in the document, `figure-0` the first figure, `table_cell-0` the first cell of the first table. Stable within a response but not across re-parses of the same document.
title: Id
type: string
grounding:
$ref: '#/components/schemas/Grounding'
description: 'The element''s spatial data: the page it appears on, its `[start, end)` range in the top-level `markdown` string, and its bounding box in normalized page coordinates.'
atomic_grounding:
anyOf:
- items:
$ref: '#/components/schemas/Grounding'
type: array
- type: 'null'
default: null
description: 'Fine-grained grounding segments at the model''s current granularity (visual lines today; finer in future versions, same schema). Present only on leaf elements — every type except `table`. `[]` only when segments are structurally impossible: `table_cell` (a cell has no finer granularity than itself) and elements whose markdown is suppressed via `blocks.<type>.markdown=false`. Any other leaf the model could not segment finer carries a single entry covering the element''s full range and box. Omitted entirely when `options.atomic_grounding` is `false`.'
title: Atomic Grounding
children:
anyOf:
- items:
$ref: '#/components/schemas/Element'
type: array
- type: 'null'
default: null
description: The cells (`table_cell` elements) of a `table` element. Present only when `type` is `table`.
title: Children
markdown:
anyOf:
- type: string
- type: 'null'
default: null
description: The element's slice of the top-level `markdown` string (`markdown[grounding.range.start:grounding.range.end]`). `""` for zero-length ranges (e.g. blocks suppressed via `blocks.<type>.markdown=false`). Present only when `options.inline_markdown` is `true`.
title: Markdown
row:
anyOf:
- type: integer
- type: 'null'
default: null
description: 0-indexed row position of this cell within its parent `table`. Present only on `table_cell` elements.
title: Row
col:
anyOf:
- type: integer
- type: 'null'
default: null
description: 0-indexed column position of this cell within its parent `table`. Present only on `table_cell` elements.
title: Col
colspan:
anyOf:
- type: integer
- type: 'null'
default: null
description: Number of columns this cell spans. `1` for unmerged cells. Present only on `table_cell` elements.
title: Colspan
rowspan:
anyOf:
- type: integer
- type: 'null'
default: null
description: Number of rows this cell spans. `1` for unmerged cells. Present only on `table_cell` elements.
title: Rowspan
required:
- type
- id
- grounding
title: Element
type: object
Box:
description: 'Axis-aligned bounding box in normalized page coordinates.
Every value is a fraction of the page''s width (`xmin`/`xmax`) or height
(`ymin`/`ymax`) in `[0, 1]`, with at most 8 decimal places. To convert to
pixels, multiply by the dimensions of whatever raster of the page you are
drawing on. Coordinates are clamped and rounded at construction so the
in-process value always equals the serialized one.'
properties:
xmin:
description: Left edge as a fraction of the page width, in `[0, 1]`.
title: Xmin
type: number
ymin:
description: Top edge as a fraction of the page height, in `[0, 1]`.
title: Ymin
type: number
xmax:
description: Right edge as a fraction of the page width, in `[0, 1]`.
title: Xmax
type: number
ymax:
description: Bottom edge as a fraction of the page height, in `[0, 1]`.
title: Ymax
type: number
required:
- xmin
- ymin
- xmax
- ymax
title: Box
type: object
ParseResponse:
description: 'The parse result: the full document as `markdown`, its hierarchical
`structure` (with per-node spatial `grounding` inline), and request
`metadata`.'
properties:
markdown:
description: The full document as a single Markdown string, in reading order.
title: Markdown
type: string
metadata:
$ref: '#/components/schemas/ParseMetadata'
description: 'Information about the request: model version, page count, duration, billing, and more.'
structure:
$ref: '#/components/schemas/Document'
description: 'The document''s hierarchical structure: pages and the elements detected on each page. Every node below the root carries its spatial data inline in a `grounding` object (`{page, range, box}`, normalized page coordinates); leaf elements additionally carry `atomic_grounding`.'
required:
- markdown
- metadata
- structure
title: ParseResponse
type: object
BlocksOptions:
additionalProperties: false
properties:
text:
$ref: '#/components/schemas/BaseElementOptions'
table:
$ref: '#/components/schemas/TableOptions'
figure:
$ref: '#/components/schemas/FigureOptions'
marginalia:
$ref: '#/components/schemas/BaseElementOptions'
attestation:
$ref: '#/components/schemas/BaseElementOptions'
logo:
$ref: '#/components/schemas/BaseElementOptions'
scan_code:
$ref: '#/components/schemas/BaseElementOptions'
card:
$ref: '#/components/schemas/BaseElementOptions'
title: BlocksOptions
type: object
BaseElementOptions:
additionalProperties: false
properties:
markdown:
default: true
title: Markdown
type: boolean
title: BaseElementOptions
type: object
ErrorResponse:
type: object
title: ErrorResponse
required:
- code
- message
properties:
code:
type: string
description: Stable snake_case error code (e.g. ``validation_error``, ``unknown_model_version``, ``invalid_url``, ``invalid_api_key``, ``rate_limit_exceeded``).
message:
type: string
description: Human-readable detail.
TableOptions:
additionalProperties: false
properties:
markdown:
default: true
title: Markdown
type: boolean
format:
default: html
enum:
- markdown
- html
title: Format
type: string
title: TableOptions
type: object
Range:
description: A `[start, end)` slice of the top-level `markdown` string.
properties:
start:
description: Inclusive start offset into the top-level `markdown` string, in the units declared by `metadata.range_units` (Unicode code points).
title: Start
type: integer
end:
description: Exclusive end offset into the top-level `markdown` string, in the units declared by `metadata.range_units` (Unicode code points).
title: End
# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/landingai/refs/heads/main/openapi/landingai-parse-api-openapi.yml