lighton/devs
Upload any document. Search it in milliseconds.
Start building on the SDK or read our docs →
Trusted by leading enterprises
Ingest any document into your knowledge base.
PDFs, scans, slides, spreadsheets, emails. One call handles parsing, chunking, embedding and indexing.
from lighton import LightOn, Workspace with LightOn() as client: # reads LIGHTON_API_KEY from the environment # Create a workspace and ingest a folder of PDFs (glob), blocking until searchable ws = Workspace(name="Docs").create(client) ws.ingest_many(["docs/**/*.pdf"], wait=True)
…and search it in milliseconds
Hybrid retrieval with grounded sources, so your agent’s answer points back to the exact page.
from lighton import LightOn, Workspace with LightOn() as client: # reads LIGHTON_API_KEY from the environment # Search: retrieve the most relevant passages, scoped to that workspace chunks = client.search("Q4 revenues", workspaces=[ws]) for r in chunks.results: print(r.score, r.source.filename, r.content)
Turn any document into clean Markdown.
Text, tables, images, multi-column layouts.
from lighton import LightOn, Workspace with LightOn() as client: # reads LIGHTON_API_KEY from the environment doc = client.parse(path="report.pdf") # doc = client.parse(url="https://example.com/report.pdf") for page in doc.result.pages: print(page.index, page.markdown)
Structured extraction
Define a schema, get typed fields back from any document, with page-level provenance.
from lighton import LightOn from pydantic import BaseModel, Field class Person(BaseModel): last_name: str = Field(description="Family name, as written in the document.") first_name: str | None = Field( None, description="Given name; null if not stated." ) role: str | None = Field( None, description="Title or role if given, e.g. 'sender', 'recipient'." ) class Letter(BaseModel): people: list[Person] = Field( description="Every person or entity named in the letter." ) subject: str | None = Field( None, description="The letter's stated subject line, or null if absent." ) with LightOn() as client: resp = client.extract(schema=Letter, path="letter.pdf") # or from a public URL: client.extract(schema=Letter, url="https://example.com/letter.pdf") for row in resp.result.data: # one object per page print(row)
SDK, API, MCP
Python SDK
Full API coverage, typed, async-ready.
TypeScript SDK
Same surface, first-class types.
LightOn MCP
Give Claude, Codex, Cursor or any MCP client search over your documents.
Swap the install commands
claude mcp add lighton https://api.lighton.ai/mcp \ --transport http --scope user \ --header "Authorization: Bearer $LIGHTON_API_KEY"
LightOn API
Plain REST. Bring your own stack.
Connect to where your documents already live.
Sync SharePoint, Google Drive, S3 and more as read-only datasources. Your source system stays the single source of truth.
Any document. Any format. Any agent.
Start building on the SDK or read our docs →
