Freshness & caching
How old your data is, how to ask for something newer, and why we do not claim real-time.
Every response says how old it is
Four fields, on every object:
| Field | Meaning |
|---|---|
source_timestamp |
When the upstream observed the value, when it tells us |
fetched_at |
When we retrieved it |
cache_age_seconds |
How long ago that was |
freshness |
"cached" or "fresh" |
Build reports on source_timestamp where it is present and fetched_at
otherwise. A number without a time attached is not evidence of anything.
Asking for a fresh copy
By default you get a cached copy if we have a recent one. To force a live
fetch, pass freshness=fresh:
curl https://api.sourcevine.io/v1/profile \
-H "Authorization: Bearer $SOURCEVINE_API_KEY" \
--data-urlencode "url=https://www.tiktok.com/@atlas.makes" \
--data-urlencode "freshness=fresh" -G
A fresh fetch is charged at the operation’s credit class. A cached one is free.
Most workloads do not need fresh — if you are comparing two readings taken
hours apart, cache age of a few minutes is noise.
How long things stay cached
Windows are short and vary by what changes fastest:
| Resource | Typical window |
|---|---|
| Profile counters | 5–15 minutes |
| Post metrics | 2–10 minutes |
| Older post metadata | 1–24 hours |
| Comment pages | 2–10 minutes |
| Handle → id mappings | 24 hours+ |
These are tuned from real hit rates rather than fixed forever. cache_age_seconds
always tells you the truth for the response in your hand, so do not hard-code
these numbers.
Why we do not say “real-time”
Our upstream providers publish no cache TTL and no freshness SLA. We can tell you exactly when we fetched something, because we measured it. We cannot tell you that it was live at the source at that instant, because we have no way to verify that — so we do not claim it.
What we do claim: a fresh request triggers a live fetch from the provider, and
fetched_at is the moment we received the response.
Designing around it
Snapshot before and after. Delivery, growth and drop are differences between two readings. Take one at the start and one at the end, and keep both timestamps.
Poll freely on cached. It costs nothing. Cache hits are free precisely so that repeated checking is not a billing decision.
Reserve fresh for moments that matter — the reading you are going to put
in front of a client, or the one that triggers an action.
Last updated 27 August 2026