← Back to Blog
ReleaseJune 15, 20264 min read

Launching Polyvia 1: Multimodal Document Retrieval API

Agentic search stalls past ~100 multimodal files, and the only infra available is visual extractors / PDF parsers. Polyvia 1 is the end-to-end pipeline for multimodal document retrieval — sub-200ms over 100K+ files.

Mateusz Gierlach

Mateusz Gierlach

Co-Founder & CEO

Senyao Hou

Senyao Hou

Co-Founder & CTO

Launching Polyvia 1: Multimodal Document Retrieval API

Today we're releasing Polyvia 1.

Polyvia 1 ships as two products:

  • Polyvia API: Multimodal Document Retrieval API (for developers of AI agents).
  • Polyvia Platform: Search and Exploration over multimodal docs (for knowledge workers in enterprises).

1. Fast over 100K+ multimodal docs — where agentic search stalls

Today's agents (Claude Code, Cowork, and friends) search files one by one — agentic search. It's great for a handful of local files and for coding. But it works only up to ~100 multimodal files: past that, queries take multi-minutes, there's no proof every file was actually read, and aggregation questions ("what % of these claim photos show flood damage?", "flag every borrower with a 10% YoY revenue decline") are simply out of reach. Better VLMs make local context sharper, but the scaling wall is architectural — past ~100 multimodal files you need retrieval, not a bigger context window.

So at scale you still need retrieval / RAG. The problem: the only multimodal infra that exists today is visual extractors / PDF parsers. A multimodal knowledge ontology at scale is still unsolved, and it's hard for developers to build self-improving retrieval agents — with memory that compounds over time on top of one. Polyvia is the end-to-end pipeline for multimodal retrieval and agentic use cases at scale: it answers in sub-200ms across 100K+ documents, where agentic search takes minutes and stalls.

2. End-to-end — no need for extractors or PDF parsers

The usual way to do RAG over a large visual set is a stack: a per-document extractor (Reducto, LlamaIndex, Textract) to turn pages into JSON, a vector DB to index it, and a pile of glue to make it queryable. You end up with millions of scattered data points and no way to reason across them at scale.

And you can't skip extraction, either. Joint text-image embeddings don't work yet for the hard cases — dense charts, infographics, complex multi-page tables — so extraction is still the only viable option to get reliable facts out of those pages. The question isn't whether to extract; it's what you build on top.

Polyvia Engine is one end-to-end pipeline for large-scale multimodal document retrieval:

  • VLM Visual Extractor
  • Multimodal Knowledge Ontology
  • Self-Improving Retrieval Agent

Extraction alone gives you structured data; the durable value is the knowledge ontology and agentic retrieval on top of it that answers questions jointly across the whole corpus. If you're using a visual-doc extractor today, you'll also need visual-doc retrieval — that's the part Polyvia owns.

3. Every unstructured, visual & multimodal input — in one API

Enterprise knowledge doesn't live in clean text; it lives in charts, slides, scans and recordings. Polyvia ingests all of it through one API, into one knowledge ontology — no per-format tool to wire up.

Available now: PDFs, charts, infographics, complex multi-page tables, slides, pictures, scans, invoices, handwriting, and audio. Coming soon: video, healthcare scans / EHR, chemical & molecular data, and CAD & technical drawings.

What we're shipping

We're rolling Polyvia out in stages.

Available now: Polyvia API - Multimodal Document Retrieval API.

Access via: REST API, typed Python and TypeScript SDKs, MCP server, Agent Skills for Claude, Cursor and agent frameworks. Fast ingestion, reliable visual citations, and integrations (Google Drive, Dropbox, OneDrive/SharePoint, AWS S3, Notion, Slack).

The whole loop is a few lines:

pip install polyvia
from polyvia import Polyvia
client = Polyvia(api_key="poly_<key>")

# Ingest several files into a group (created on first use)
items = client.ingest.batch(
    ["q1.pdf", "q2.pdf", "q3.pdf", "q4.pdf"],
    group="FY24 Earnings",
)
for item in items:
    client.ingest.wait(item.task_id)

# Ask once, across the group — answers cite the exact page in each doc
print(client.query("How did revenue trend across the four quarters?",
                   group="FY24 Earnings").answer)

Try it

Join the waitlist, read the docs, and tell us what you build.