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.
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 skillCLI
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 referenceDocs 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 MCPREST 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 referencePython library
The landingai-ade package wraps both APIs, handles auth and polling, and takes a Pydantic model or a JSON schema directly.
Python library docsTypeScript library
The same surface for Node and the browser-adjacent stack, with types generated from the API schema.
TypeScript library docsReproduce any sample
Get an API key
VISION_AGENT_API_KEY in your environment — the libraries read it automatically. A new account comes with enough credits to parse several hundred pages.Pick a sample
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.Parse, then extract
Check the grounding
Copy, paste, run
These run as written against the published sample. Change the slug and the filename to use a different one.
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"]])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 -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'