# Freshness and the meta object

Every data response carries a `meta` object that tells you how current the data is.

| Field | Meaning |
|---|---|
| `ledger_index` | Validated ledger the data comes from |
| `as_of` | When the data was read from the ledger (ISO 8601) |
| `age_seconds` | Age of the data when the response was produced |
| `cache` | `hit` (served fresh from cache), `miss` (loaded from a node), `stale` (expired, served because the nodes failed) |
| `stale` | `true` only when `cache` is `stale` |

Composite answers (for example an account summary built from two ledger reads) report the worst case of their parts.

## How to use it

- A new ledger closes roughly every 4 seconds. Data is cached for a few seconds (the TTL is on each endpoint page), so calling faster than the TTL returns the same value.
- If `stale` is `true`, the upstream nodes failed and you are reading the last good value. It is never older than the endpoint's max-stale; beyond that the service answers 503 `upstream-unavailable` instead.
- For decisions that depend on recency, compare `age_seconds` with your own tolerance and, when it matters, `ledger_index` with the latest ledger.
- Solana responses carry `slot` and `commitment` instead of `ledger_index`; see https://api.criptonlabs.com/docs/guides/solana.md.
