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 fresh

  • captured_at — ISO 8601 timestamp of when the underlying extraction actually ran

  • expires_at — when this cache entry ages out (captured_at + 6 hours)


json


{
  "url": "https://example.com",
  "cache_status": "hit",
  "captured_at": "2026-07-26T12:00:00+00:00",
  "expires_at": "2026-07-26T18:00:00+00:00",
  "actions": [...]
}

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


manifest = client.get("https://example.com", fresh=True)

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.

omfang logo

Follow us on social media

Contact us

Learn more about omfang