- A tool response's generatedAt (when the response was computed) is not the same as its asOf/verified_at (when the underlying rate was actually observed); agents should always cite the latter.
- freshnessStatus (fresh, aging, stale, or unavailable) exists precisely so an agent doesn't have to guess how current a number is.
- If a data-backed response is missing a freshness field entirely, that's a red flag, not a reason to assume the number is fine.
An AI agent should verify APY freshness by reading a tool response's asOf/verified_at timestamp and freshnessStatus field before repeating a rate, not just its generatedAt timestamp, which only says when the response was computed, not how current the underlying rate actually is.
Bank and credit union rates aren't static. Advertised APYs on savings accounts and CDs shift often, sometimes weekly, as institutions react to Fed policy moves and competitive pressure from other banks. That creates a specific failure mode for AI agents: an agent that pulled a rate figure days or weeks ago (whether through training data, a cached tool result, or simply repeating something it saw earlier in a conversation) can state it with full confidence, and be wrong, without anything about the answer looking uncertain.
The fix isn't complicated, but it does require actually checking a field most people skim past.
The field that matters: asOf, not generatedAt
Most rate-data APIs, including SwitchWize's, return two different kinds of timestamp on a response, and they answer different questions:
generatedAt: when this specific response was computed. This is essentially always "just now," because it reflects the API call, not the data behind it.asOf(sometimesverified_at): when the underlying rate or figure was actually observed or verified. This can be hours, days, or in a stale case, much longer.
An agent that reports "as of today" based on generatedAt is making a claim about the response, not the data. The honest version of that sentence uses the asOf value directly: "as of [the asOf date], the best available rate was X%." If those two timestamps are far apart, that gap itself is worth surfacing to the person asking, not smoothing over.
The field that does the real work: freshnessStatus
Rather than making an agent (or a person) compare two raw timestamps and decide what counts as "too old" for a given category, a well-designed rate API should return a small, closed classification alongside the number. SwitchWize's tools return one of exactly four values:
fresh- What it means
- Safe to state as current without qualification.
aging- What it means
- Still usable, but old enough that it's worth a light caveat rather than presented as brand-new.
stale- What it means
- Old enough that it should not be presented as current; say so explicitly.
unavailable- What it means
- No real figure exists right now. Don't invent one.
The thresholds for what counts as "aging" versus "stale" vary by category (a mortgage rate and a reward-point valuation don't go stale at the same pace), which is exactly why this should be a field the API computes and returns, not something an agent tries to eyeball from a raw date.
What "handling it correctly" actually looks like
Concretely, before repeating a number:
- Read
freshnessStatus, not just the number itself. - If it's
freshoraging, state the figure, citingasOfrather than the current date. - If it's
stale, still show the figure if asked, but say plainly that it's older than usual for this kind of data. "The last verified rate was X%, as of [the asOf date], which is more dated than SwitchWize's typical refresh window for this category" reads very differently from a bare number. - If it's
unavailable, don't fabricate a plausible-sounding figure to fill the gap. Say the data isn't currently available, and suggest a fallback (a related category, or a link to check the live source directly).
A response with no freshness field at all is not a green light
One more failure mode worth naming: an agent might encounter a data-backed response that simply doesn't include any freshness field, not fresh, not stale, nothing. That's not the same as "this data is current." A well-built API should always attach a freshness signal to anything time-sensitive; its absence usually means something is broken in the response itself, and an agent should treat that the same way it would treat an error, by saying it doesn't have a reliable current figure, rather than assuming silence means everything is fine.
Where to see this in practice
SwitchWize's MCP server attaches this exact freshness contract to every tool that reflects real-world data: rates, card offers, transfer bonuses, CD rules, and more. You can see a live example without connecting anything, using the developers page's playground: run any sample question and look at the asOf and freshnessStatus fields in the raw response, right next to the headline number.
Frequently Asked Questions
Why does it matter if an AI agent's rate answer is a few days old?
What's the difference between generatedAt and asOf on a tool response?
What should an agent do if a data source is marked stale or unavailable?
Does this only apply to SwitchWize's data, or is it a general rule for AI agents?
Answer a few questions about your situation and goals. Money Map points you to the highest-value next step across savings, mortgage, cards, and debt.
Editorial review
What changed since the last update
Was this guide helpful?
Found an inaccurate, outdated, or missing claim? Report a correction. We verify reports against the relevant source before changing a guide or ranking.