> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vistazo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Refresh

> Scheduled and manual refreshes, staleness, and why schedules pause themselves.

A refresh re-runs every widget's pipeline. It calls the source, applies the stored transform, publishes the
new rows, and records when that happened.

A steady-state refresh makes **no model call**. The transform was written once, when the widget was built,
and re-running it is ordinary computation. So a dashboard refreshing hourly is not burning model spend
hourly. The model comes back only when a source changes shape and the transform has to be repaired.

Schedules are available on every plan. What they need is funding. A schedule runs on the allowance of
whoever it is attributed to and falls back to the workspace pool, and one with neither suspends until
there is budget again. See [Usage](/billing/usage).

## Setting a schedule

On the dashboard, open **Settings → General** and use the Schedule card. The grammar is
**Every \[n] \[unit]**.

| Unit    | Behavior                                             |
| ------- | ---------------------------------------------------- |
| Minutes | A rolling interval. Offered as 15, 30 or 45 only.    |
| Hours   | A rolling interval.                                  |
| Days    | A calendar schedule at a time of day, in a timezone. |
| Weeks   | Same, plus which days of the week.                   |
| Months  | Same, plus which day of the month.                   |

<Note>
  **15 minutes is the floor, on every plan.** The scheduler ticks every 15 minutes, so a tighter interval
  could not run more often. It would only make the setting lie about what it does. Minute values are a
  preset list for the same reason, since "every 49 minutes" would silently run hourly.
</Note>

## Schedules pause when nobody is looking

A schedule auto-pauses after a stretch of days with no visits. Opening the dashboard while signed in
switches it back on and queues a catch-up run, which lands on the next 15-minute sweep rather than
instantly. You get a brief notice rather than a banner with a button to press, because by the time anyone
reads it the schedule is already back on.

Two cases worth separating.

* **A signed-in visit revives a paused schedule.** Reading the dashboard in the app is what does it.
* **An anonymous share-link view does not.** It records the visit, which is enough to keep a *running*
  schedule from decaying, but it will not restart a paused one. Otherwise anonymous traffic could put paid
  refresh work back on the owner's budget without the owner being involved.

So a dashboard read only through a public link stays alive while it is alive, and once it has lapsed
somebody with an account has to open it.

This exists so nobody pays to refresh dashboards no one opens. It is housekeeping rather than a restriction.

## Whose credentials run it

A scheduled refresh runs as the **dashboard owner**, on the owner's connections. An editor can set the
schedule and rewire widgets, but never lends the dashboard their own data sources.

If the owner leaves the workspace, the schedule is disabled and says so rather than retrying against
credentials that no longer exist. Reassign ownership from **Settings → Sharing → Change owner**.

## Staleness and expiry

Every published set of rows records the date it was fetched. On a **share link** that surfaces as a "data
as of" stamp, so an outside reader can always see how old the numbers are. In the app there is no
dashboard-level stamp. Each widget records when its sources last ran, which you can see by expanding it.

Published data does not live forever. Rows expire after 28 days, so a dashboard whose schedule lapsed long
enough ago is **expired** rather than quietly stale. What you see then depends on who you are.

* An anonymous link viewer is told the dashboard has expired, and to contact the owner.
* A **viewer** is told how many charts expired, and that an editor needs to refresh.
* An **owner or editor** has the expired charts re-fetched as the page loads, on their own allowance.
* Anyone missing a connection the dashboard depends on is told how many charts need one they do not have.

## Refreshing by hand

You can refresh a whole dashboard, a single widget, or one stage of a multi-source widget. Manual refreshes
draw on your own compute allowance. See [Usage](/billing/usage).

When a refresh fails or gets stuck, you get a notification carrying the error rather than a dashboard that
silently shows old numbers. See [Notifications](/account/notifications).
