Browse documentation
What changed in the evidence since an instant
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.
/changes Request
curl \
-H "x-api-key: $UNLOB_API_KEY" \
"https://api.unlob.com/changes?objective=<objective>&since=<since>" 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.
Parameters
| Name | Type | Description |
|---|---|---|
objectiverequired | string | What you need evidence for. `q` is accepted as an alias. |
sincerequired | string | An absolute unix timestamp, a bare number of seconds ago, or a duration ago: 1d, 12h, 2w. |
token_budget | integer | Ceiling on the evidence returned, in estimated tokens. Default 3000. |
known_urls | string | Comma list of URLs you relied on before; each comes back present, removed (with the reason) or unknown. |
claim | string | Experimental: also report evidence that newly contradicts this claim. |
mode | string | keyword | semantic | hybrid (default). |
vertical | string | Restrict to one vertical. |
lang | string | Single language code. |
safe | boolean | true (default) drops explicit content. |
Responses
| Status | Meaning |
|---|---|
200 | New evidence, origins and roles gained, contradictions gained, what became of known_urls, and both receipts. Read `status` first. |
400 | A `since` that does not parse, or is not in the past. |
401 | Missing, unknown or revoked key. A key minted moments ago can answer 401 until it propagates to the serving fleet. |
429 | Over the per-minute rate (spent in credits), or a hard-capped key without the credits this call costs. `retry-after` is present on the rate-limit case only. |
Response body
ChangesResponse
| 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" | — |
The same call over MCP
This capability is evidence_changes on the
MCP server, taking the same parameters and returning the same body. A parity test
in the API fails the build if the two ever diverge, so you can read either
reference and use the other.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "evidence_changes",
"arguments": {
"objective": "<objective>",
"since": "<since>"
}
}
} Most clients build that frame for you — see Connect a client.
See Errors for what to do with each status, and Retries and backoff for which are worth repeating.
FAQ
- What does 200 mean on GET /changes?
- New evidence, origins and roles gained, contradictions gained, what became of known_urls, and both receipts. Read `status` first.
- What does 400 mean on GET /changes?
- A `since` that does not parse, or is not in the past.
- What does 401 mean on GET /changes?
- Missing, unknown or revoked key. A key minted moments ago can answer 401 until it propagates to the serving fleet.
- What does 429 mean on GET /changes?
- Over the per-minute rate (spent in credits), or a hard-capped key without the credits this call costs. `retry-after` is present on the rate-limit case only.