LandingAI Agentic Document Extraction (ADE) API v2

The current generation ADE API, powered by the DPT-3 document pre-trained transformer. Parse converts a PDF or image into reading-order Markdown plus a hierarchical block structure with per-block grounding; Extract pulls schema defined fields out of that Markdown with character-span grounding back into the source. Both run synchronously or as asynchronous Jobs, which raise the ceilings to 1 GiB and 6,000 pages per PDF and support standard and priority service tiers.

OpenAPI Specification

landingai-ade-v2-openapi-original.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "LandingAI Agentic Document Extraction (ADE) API v2: Parse and Extract Documents with DPT-3",
    "description": "Parse and extract data from documents with DPT-3, a document parsing model from LandingAI, using the Agentic Document Extraction (ADE) v2 endpoints. Parse converts PDFs and images into structured Markdown and elements with per-element grounding (page numbers and coordinates) for RAG, search, and extraction pipelines. Extract pulls specific fields from parsed Markdown using a JSON schema. Documentation: https://docs.landing.ai",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.ade.landing.ai",
      "description": "Production vision tools API"
    }
  ],
  "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\n\nurl = 'https://api.ade.landing.ai/v2/parse'\nheaders = {'Authorization': 'Bearer YOUR_API_KEY'}\n\nfiles = {'document': open('document.pdf', 'rb')}\ndata = {'model': 'dpt-3-pro-latest'}\n\nresponse = requests.post(url, headers=headers, files=files, data=data)\nprint(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\n\nurl = 'https://api.ade.landing.ai/v2/parse/jobs'\nheaders = {'Authorization': 'Bearer YOUR_API_KEY'}\n\nfiles = {'document': open('document.pdf', 'rb')}\ndata = {'model': 'dpt-3-pro-latest'}\n\nresponse = requests.post(url, headers=headers, files=files, data=data)\nprint(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\n\nurl = 'https://api.ade.landing.ai/v2/parse/jobs'\nheaders = {'Authorization': 'Bearer YOUR_API_KEY'}\n\nresponse = requests.get(url, headers=headers)\nprint(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\n\nurl = 'https://api.ade.landing.ai/v2/parse/jobs/JOB_ID'\nheaders = {'Authorization': 'Bearer YOUR_API_KEY'}\n\nresponse = requests.get(url, headers=headers)\nprint(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));"
          }
        ]
      }
    },
    "/v2/extract": {
      "post": {
        "tags": [
          "Extract"
        ],
        "summary": "ADE Extract",
        "description": "Extract structured data from a Markdown document according to a JSON schema, with character-span grounding into the source Markdown. Runs synchronously and returns the result inline.",
        "operationId": "v2-extract_run_sync",
        "responses": {
          "200": {
            "description": "v2-extract result",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Result returned by V2ExtractOperationWorkflow — the ``/v2/extract``\nresponse body (``docs/extract-v2-proposal.md`` → Response).\n\n``extraction`` and ``extraction_metadata`` mirror each other structurally:\nleaf values in ``extraction`` are replaced by ``ExtractionFieldMetadata``\nobjects in ``extraction_metadata``.",
                  "properties": {
                    "extraction": {
                      "additionalProperties": true,
                      "description": "Extracted values conforming to the request ``schema``.",
                      "title": "Extraction",
                      "type": "object"
                    },
                    "extraction_metadata": {
                      "additionalProperties": true,
                      "description": "Per-field metadata, mirroring ``extraction`` with leaf values replaced by ``{value, ranges}`` objects.",
                      "title": "Extraction Metadata",
                      "type": "object"
                    },
                    "markdown": {
                      "description": "Echoed input markdown.",
                      "title": "Markdown",
                      "type": "string"
                    },
                    "metadata": {
                      "$ref": "#/components/schemas/V2ExtractMetadata",
                      "description": "Request metadata (job_id, model_version, duration_ms, doc_id, billing)."
                    },
                    "schema_violation_error": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "default": null,
                      "description": "Set when ``options.strict`` is false and the schema contained fields the model could not extract — the extraction is partial.",
                      "title": "Schema Violation Error"
                    },
                    "warnings": {
                      "description": "Non-fatal warnings emitted during extraction.",
                      "items": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "title": "Warnings",
                      "type": "array"
                    }
                  },
                  "required": [
                    "extraction",
                    "extraction_metadata",
                    "markdown",
                    "metadata"
                  ],
                  "title": "V2ExtractResult",
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "description": "Input to V2ExtractOperationWorkflow.\n\nProvide the markdown as an inline ``markdown`` string, as a multipart file\npart named ``markdown`` (for large inputs — the gateway stages the upload\ninternally), or via a public ``markdown_url``. Exactly one source must be\nsupplied.",
                "properties": {
                  "schema": {
                    "additionalProperties": true,
                    "description": "JSON Schema describing the fields to extract. The schema must be an object type with a ``properties`` map of field names to their types and descriptions.",
                    "example": {
                      "properties": {
                        "revenue": {
                          "description": "Q1 revenue figure",
                          "type": "string"
                        },
                        "summary": {
                          "description": "Executive summary",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "title": "Schema",
                    "type": "object"
                  },
                  "markdown": {
                    "anyOf": [
                      {
                        "type": "string"

# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/landingai/refs/heads/main/openapi/landingai-ade-v2-openapi-original.json