*** September 2026 Major Release ***Read and watch
For developers

Run a sample document yourself

Every document type page is backed by a real sample published on GitHub — the document, its schema, and the parse and extract output ADE returned. These instructions reproduce any of them, and work the same way on your own documents.

Six ways in

Use it however you work

The same two calls sit behind all of these. Pick whichever fits how you already build.

Claude Skill

Point Claude Code or the Claude desktop app at the ADE skill and describe the document you want processed. The skill knows the v2 APIs, schema design and grounding, so it writes the pipeline for you.

Install the skill

CLI

Parse and extract from a terminal without writing any code. Useful for a first look at a document, and for batch runs over a folder.

CLI reference

Docs MCP server

Connects an AI tool to the ADE documentation and the ADE skills. Your agent searches the docs and picks up the skills with no further setup, so it writes against the current API rather than what it remembers.

Connect the docs MCP

REST API

Call the endpoints directly from any language. Synchronous for single documents, or the jobs API for large files and the cheaper standard service tier.

API reference

Python library

The landingai-ade package wraps both APIs, handles auth and polling, and takes a Pydantic model or a JSON schema directly.

Python library docs

TypeScript library

The same surface for Node and the browser-adjacent stack, with types generated from the API schema.

TypeScript library docs
Step by step

Reproduce any sample

1

Get an API key

Create a free account and copy your key from the API key page. Set it as VISION_AGENT_API_KEY in your environment — the libraries read it automatically. A new account comes with enough credits to parse several hundred pages.
2

Pick a sample

Open the collection on GitHub and choose a folder. Each one holds the source document, a schema.json, and the parse and extract output from the run shown on its page — so you can compare what you get against what we got.
3

Parse, then extract

Parsing turns the document into structured Markdown. Extraction applies the schema to that Markdown and returns typed values, each with the page, bounding box and character range it came from.
4

Check the grounding

Every value carries its source location. Use it to draw the box back onto the page, route low-confidence values to a reviewer, or store the citation alongside the data.
The code

Copy, paste, run

These run as written against the published sample. Change the slug and the filename to use a different one.

Python
import json
import urllib.request

from landingai_ade import LandingAIADE

client = LandingAIADE()  # reads VISION_AGENT_API_KEY

# Any sample from the collection works — swap the slug and the filename.
SLUG = "consolidated-1099"
BASE = ("https://raw.githubusercontent.com/landing-ai/ade-sample-projects"
        f"/main/document-types/collection/{SLUG}")

parse = client.v2.parse(
    document_url=f"{BASE}/source/consolidated-1099-edward-jones-redacted.pdf",
    model="dpt-3-pro-latest",
)

# The schema lives in the same folder, so fetch it rather than keeping a copy
with urllib.request.urlopen(f"{BASE}/schema.json") as response:
    schema = json.load(response)

result = client.v2.extract(
    markdown=parse.markdown,
    schema=schema,
    model="extract-latest",
)

print(result.extraction)

# Grounding: where each value came from
for path, meta in result.extraction_metadata.items():
    for span in meta["ranges"] or []:
        print(path, result.markdown[span["start"]:span["end"]])
TypeScript
import { LandingAIADE } from "landingai-ade";

const client = new LandingAIADE(); // reads VISION_AGENT_API_KEY

const SLUG = "consolidated-1099";
const BASE =
  `https://raw.githubusercontent.com/landing-ai/ade-sample-projects/main/document-types/collection/${SLUG}`;

const parse = await client.v2.parse({
  document_url: `${BASE}/source/consolidated-1099-edward-jones-redacted.pdf`,
  model: "dpt-3-pro-latest",
});

// The schema lives in the same folder, so fetch it rather than keeping a copy
const schema = await fetch(`${BASE}/schema.json`).then((r) => r.json());

const result = await client.v2.extract({
  markdown: parse.markdown,
  schema,
  model: "extract-latest",
});

console.log(result.extraction);
cURL
curl -X POST 'https://api.ade.landing.ai/v2/parse' \
  -H "Authorization: Bearer $VISION_AGENT_API_KEY" \
  -F 'document_url=https://raw.githubusercontent.com/landing-ai/ade-sample-projects/main/document-types/collection/consolidated-1099/source/consolidated-1099-edward-jones-redacted.pdf' \
  -F 'model=dpt-3-pro-latest'

Start extracting in minutes

Reliable, structured outputs with full traceability in minutes