Profile

Know how much Rollup knows.

Profile includes coverage and freshness so your product can judge how much history supports a read.

json
{
  "state": "ready",
  "moments_processed": 624,
  "history_months": 38,
  "freshness": "current",
  "updated_at": "2026-09-14T18:22:00Z"
}

state

Current index lifecycle state: starting, ready, or complete.

moments_processed

Number of distinct processed moments represented in the current Profile’s coverage.

history_months

Approximate span of historical media represented. This does not imply continuous observation of every month.

freshness

Whether the derived context is current relative to available indexing updates. Current does not mean every photo has been processed.

updated_at

Most recent Profile refresh. Use this when deciding whether a cached read is still useful.

Gate on evidence#

Gate important personalization on evidence, not elapsed processing time. Readiness is a starting point; the fields you use also need sufficient support.

ts
const profile = await rollup.profile()

if (profile.coverage.state === "starting") {
  return defaultExperience()
}

return personalizedExperience(profile)

Coverage across Query and Search#

Query reports evidence relevant to its question, so its supporting_moments and history_months may differ from Profile coverage. Search works over the currently authorized local index; missing or unprocessed media cannot appear in results.