One call. Evidence, its structure, and a receipt.
ground takes an objective, a token budget, a freshness window and an evidence threshold, and returns the smallest defensible evidence set — each item tagged with what kind of source it is, where it originated, who owns it and whether it is independent of the others — plus a coverage receipt that says whether the set is enough.
What the agent reads instead of reasoning its way to
A normal search API
10 results
7 URLs repeat the same story
? independent sources
? missing coverage
? stale
? contradictions
Agent must investigate…unlob ground
3 evidence origins
2 genuinely independent
1 primary source
1 contradiction
coverage: sufficient
freshness: 37 min
context: 1,420 tokenscurl -H "x-api-key: $UNLOB_API_KEY" \
"https://api.unlob.com/ground?objective=acme+zed+acquisition&max_age=7d&min_independent_origins=2&token_budget=3000"Read status first
Five outcomes, computed by a fixed rule in a fixed order. The same corpus and the same request give the same status, because no model is involved anywhere in the call.
sufficientEnough independently owned origins, and a primary or official source present.
insufficientEvidence exists but does not meet the bar. next_actions says what would.
staleNothing inside max_age. Older evidence is shown separately, never substituted.
partialPart of the index was unreachable. Never treat the answer as complete.
emptyNothing found. Ask why_not before asserting absence.
Five layers, one API
Each layer is a caller-observable contract. Together they are harder for a search wrapper to reproduce than any one of them — and they are a different thing from what a research agent optimises for.
| Layer | unlob's responsibility |
|---|---|
| Index | Cheap, fast, passage-level retrieval over an admission-controlled open-web index. |
| Evidence graph | Stories, origins, owners, hosts, entities, topics and the link structure — computed when the index is built. |
| Epistemic layer | Supported, contradicted, partial, stale, unknown, uncovered: what the evidence is, said out loud. |
| Context compiler | The smallest defensible evidence set for a task, within a token, latency and source-policy budget. |
| Temporal layer | What changed since an instant: new evidence, origins gained, an official source appearing, what you relied on disappearing. |
The distinction, stated plainly
A research agent
"Give us the task and we'll research it." The provider searches, reads, reasons and writes the answer on its own models, and attaches citations and confidence to what it concluded. Excellent when you want the provider's judgment; expensive, and the reasoning is theirs.
The evidence layer
"Bring whatever agent or model you want. We'll give it the smallest defensible evidence package, tell it exactly how that evidence is related, and tell it what we don't know." Epistemics as a retrieval primitive, before the reasoning model — deterministic, model-independent, and priced like the infrastructure it is.
The internal question every release is judged by: how little reasoning does the agent have to waste on deciding what evidence to trust and whether it has enough?
Frequently asked questions
Why does ground not generate an answer?
Because an answer is the one thing every other provider is racing to generate, on their own models, and it is the part that should belong to you. ground returns the evidence and its structure — who said it, who copied it, whether the sources are independent, what is missing — so whichever model you run reasons over it. That keeps the call cheap, predictable and model-independent, and it keeps unlob the layer beneath the reasoning rather than a competitor to it.
What does "independent origins" count?
Origins with distinct owners. Within a story, passages that carry the same wire dateline, the same press-release distributor, the same canonical URL or the same normalised title collapse into one origin; each origin is assigned an owner — the wire service, the media group from a curated table, or the registrable domain. Seventeen URLs of one Reuters story are one origin. Two outlets under one group are two origins with one owner, and count once.
How do I know the evidence is fresh enough?
Set max_age and it becomes a contract, not a preference: evidence published inside the window is evidence; outside it is reported as stale_evidence and the status is stale. Pages that declare no publish date are excluded by a window and the receipt says so. The API does not crawl on demand behind ground, and its capability catalogue says exactly that, so an agent can plan around it.
What are risk flags?
The web is an input channel into your agent. Every evidence item carries risk_flags when a passage looks like it is addressing an AI system rather than a reader — instruction-like text, hidden text, chat-role markers — or comes from a low-trust host. They flag rather than decide, and you can ask for flagged sentences to be stripped before the text reaches a context window.
Is the reasoning behind these labels a model?
No. Every label is deterministic and documented: the same corpus and the same request give the same status. Source roles come from host and content-type rules with a confidence; origins from wire, press-release, canonical-URL and title matching; independence from the ownership table. The one experimental part — relating evidence to a claim you supply as supports, contradicts, qualifies or unresolved — is a lexical heuristic and is labelled as such in the response.
Ground your first objective
10,000 free credits a month, no card. One call, and you can read the receipt before you believe anything on this page.