Manifest now tells you when its answers are stale
3
min read
Product
Every manifest Manifest returns is cached for 6 hours. Until now, you had no way to know that. A response looked identical whether it was extracted 10 seconds ago or 5 hours and 59 minutes ago — same JSON, same confidence, no signal that the page might have moved on since we last looked at it.
That's a trust gap, and someone doing cold outreach to me pointed it out plainly: without visibility into freshness, an agent has no way to decide whether a manifest is good enough to act on or worth re-fetching. He was right, so I fixed it.
What's new
Every manifest response now includes three fields:
cache_status—"hit"if this came from cache,"miss"if we extracted it freshcaptured_at— ISO 8601 timestamp of when the underlying extraction actually ranexpires_at— when this cache entry ages out (captured_at+ 6 hours)
json
No new endpoint, no new parameter required to get this — it's just in every response now, REST, SDK, and MCP alike.
Forcing a fresh extraction
Sometimes cached just isn't good enough — you know the page changed, or you're debugging something and don't want a 4-hour-old answer. Every entry point now accepts a fresh flag that bypasses the cache entirely:
python
Same idea over the MCP server and raw REST API. When fresh=True, you always get cache_status: "miss" and a captured_at timestamp from right now.
Why this matters more than it looks like
The cache TTL exists because re-extracting a page with an LLM in the loop isn't free — it's the single biggest driver of our infra cost, more than raw request volume. Six hours is a reasonable default for most pages, but "reasonable default" and "the agent building on top of you can verify what's happening" are two different things. An agent that submits a form using a locator from a 5-hour-old manifest, on a page that redeployed 20 minutes ago, fails in a way that's very hard to debug from the outside. expires_at at least lets you reason about that risk before it bites you.
Rule of thumb: if you're operating on a page where staleness is expensive — checkout flows, anything behind auth state that changes per-session — check cache_status and expires_at before you trust the locators, or just pass fresh: true up front.
Get it
This is live now across the REST API, the manifest-api Python SDK, and the MCP server — no version bump required, just re-check the response shape if you were previously ignoring extra fields.