Farbeam
Docs / Core concepts

Freshness

Data reaches you through three kinds of path: direct database reads, in-memory poller state, and cached calls to public sources. This page lists how old a response can be on each endpoint.

#By endpoint

EndpointSource of the valuesService cacheTypical maximum age
GET /healthProcess stateNoneCurrent
GET /statusPoller stateNoneOne poll cycle
GET /status/historyStored samplesNone5 minutes, per sample
GET /chains, GET /chains/{chain}Poller stateNoneOne poll cycle
GET /chains/{chain}/blocksIn-memory list of 25NoneOne poll cycle
GET /gasPoller state and priceNoneOne poll cycle, price 60 s
GET /pricesCoinGecko60 sAbout 60 s, more if the source fails
GET /transfersDatabaseNoneOne poll cycle after the block
GET /transfers/statsDatabaseNoneOne poll cycle
GET /wallets/{address}RPC30 s30 s
GET /wallets/{address}/activity on EVMRPC logs60 s60 s
GET /wallets/{address}/activity on SolanaRPCNoneCurrent
GET /tokens/{chain}/{address}MixedSee the next tableUp to 24 hours for metadata
GET /tx/{chain}/{hash}RPCNone, except token metadataCurrent
GET /labels, GET /labels/{address}Built-in listFixed in the codeChanges with a release
GET /markets/chainsDefiLlama10 min10 min
GET /markets/stablecoinsDefiLlama10 min10 min
GET /markets/dexsDefiLlama15 min15 min
GET /markets/poolsGeckoTerminal5 min, per chain5 min
POST /rules/validateDatabase, last 2,000 rowsNoneOne poll cycle
GET /api/livePoller eventsNoneSent as each row is stored

#Inside a token report

A report combines calls with different cache times. The sources[] array shows each call, and a ms near 0 usually means a cache hit.

PartSourceCache
Market and poolsDexScreener60 s
Symbol, name, decimals, supply on EVMChain RPC24 hours
Security fields on EVMGoPlus5 min
Mint info, supply and largest accounts on SolanaSolana RPC5 min
Security fields on SolanaGoPlus5 min
RugCheck summary on SolanaRugCheck5 min

total_supply on EVM can therefore be up to 24 hours old. Do not use it for a live market cap.

#How the cache behaves

  • It is in process memory. A restart empties it.
  • Concurrent requests for the same key share one upstream call.
  • A failed call is not cached, so the next request tries again.
  • An empty GoPlus result is not cached. It counts as a failed source, and the next read tries again.
  • Expired values are not served. If the source then fails, you get 502 or unknown, not old data.
  • GET /prices is the exception. The poller keeps the last good prices when a refresh fails, so valuation continues with an older price.

#Poll cycle by chain

A poll cycle is the wait in indexing plus the RPC time. These figures come from the spacing of real blocks read on 2026-11-04 UTC.

ChainAverage seconds between reads
Ethereum13.5
Base17.3
BNB Chain17.3
Arbitrum One16.8
Solana31.9

These figures are a measurement and not a promise. Farbeam publishes no latency target.

#Measuring age yourself

#Stale copies

If every source fails, four endpoints answer with the last saved copy: Wallet overview, Token report, Stablecoin supply and DEX volume. Each of those answers holds data.stale and data.as_of.

FieldOn a fresh answerOn a saved copy
data.stalefalsetrue
data.as_ofThe time of the answerThe time the copy was saved

Saved copies are kept for 7 days. With no copy, the answer is 502 upstream_unavailable. Read data.stale before you act on a value.

#Comparing times

For a stored transfer, compare ts with meta.as_of. For the head of a chain, read head_age_seconds from /status.

curl -s "https://farbeamlabs.com/api/v1/status" | jq '.data.chains[] | {chain, status, head_age_seconds, last_ok}'
const res = await fetch("https://farbeamlabs.com/api/v1/status");
const { data } = await res.json();
for (const c of data.chains) console.log(c.chain, c.status, c.head_age_seconds, c.last_ok);
import requests

data = requests.get("https://farbeamlabs.com/api/v1/status", timeout=30).json()["data"]
for c in data["chains"]:
    print(c["chain"], c["status"], c["head_age_seconds"], c["last_ok"])

#Polling advice

Polling faster than the cache time returns the same values and still costs units. Poll token reports no more than once per minute for market fields, and once per 5 minutes for checks. For new transfers, use the stream or a webhook.