Browse documentation
evidence_changes
What changed in the evidence for an objective since an instant — new evidence, origins gained, an official or primary source appearing, contradictions gained — and what became of the URLs you relied on before.
Behaviour
Deterministic: the evidence set is built twice, once over everything and once over only what had been crawled by `since`, and the two are diffed. `known_urls` are answered like why_not: present, removed with the reason (and the passage that superseded it), or unknown.
What it cannot know is stated in `provenance.limitations`: passages removed after `since` are not reconstructable, so before-counts are lower bounds, and 'as of' means crawled by then, not published by then.
Costs 10 credits; a call that runs and fails costs 1.
Arguments
inputSchema
| Name | Type | Description |
|---|---|---|
claim | string | Experimental: also report evidence that newly contradicts this claim |
known_urls | array | string | URLs you relied on before; each comes back present, removed (with the reason) or unknown |
lang | string | — |
mode | "keyword" | "semantic" | "hybrid" | — |
objectiverequired | string | What you need evidence for |
safe | boolean | — |
sincerequired | string | An absolute unix timestamp, a bare number of seconds ago, or a duration ago: 1d, 12h, 2w |
token_budget | integer | — |
vertical | string | — |
Argument shapes
1 arguments take either a JSON array or a comma-separated
string: known_urls. That is the one place the two transports differ in shape. A URL query string
cannot carry an array, so the REST form of these is always the comma-separated
one; an argument object can carry either.
Returns
A JSON payload in the text content block, and the same payload as
structuredContent for clients that support it.
outputSchema
| Name | Type | Description |
|---|---|---|
budgetrequired | object | — |
contradictions_gained | string[] | — |
coveragerequired | object | The coverage receipt |
coverage_beforerequired | object | The coverage receipt |
independent_originsrequired | object | — |
known_urls | object[] | — |
new_evidencerequired | object[] | Evidence items that did not exist as of since |
next_actionsrequired | object[] | — |
objectiverequired | string | — |
origins_gainedrequired | object[] | — |
provenancerequired | object | — |
roles_gainedrequired | string[] | Source roles present now that were missing as of since |
sincerequired | integer | The instant diffed against, as unix seconds |
statusrequired | "changed" | "unchanged" | "partial" | — |
Calling it
Over Streamable HTTP, with the required arguments filled in:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "evidence_changes",
"arguments": {
"objective": "<objective>",
"since": "<since>"
}
}
} Most clients do this for you — see Connect a client. To drive it by hand, complete the startup lifecycle first.
The same call over REST
If your client does not speak MCP, this capability is
GET /changes, taking the same parameters and
returning the same body.
curl -H "x-api-key: $UNLOB_API_KEY" \
"https://api.unlob.com/changes?objective=<objective>&since=<since>"