# `zfin server`

Ask the shared server (`ZFIN_SERVER`) to refresh its own cache.

```
Usage: zfin server refresh SYMBOL [SYMBOL...]
```

Force-refreshes candle data in the **server's** cache, bypassing its
TTL. Nothing local changes -- your next normal run picks up the server's
new copy through the usual sync.

## Which side are you refreshing?

Two commands look similar and do opposite things:

| Command                       | Refreshes            | Goes through the server? |
|-------------------------------|----------------------|--------------------------|
| `zfin cache refresh SYMBOL`   | your **local** cache | No, deliberately         |
| `zfin server refresh SYMBOL`  | the **server's** cache | That is the point      |

Run [`zfin diagnose SYMBOL`](diagnose.md) first -- its `local` and
`server` lines say which side is actually behind, so you do not refresh
the wrong one.

## `moved` vs `unchanged`

The per-symbol result reports whether the newest bar actually **moved**,
not merely whether the fetch succeeded. A successful refresh that changes
nothing is the signature of a provider with no newer data -- which is
usually the finding you came for, so it is not reported as success.

```bash
zfin server refresh SPY AGG
```

```
Asking https://zfin.example.org to refresh 2 symbol(s)...
  SPY       moved     2026-08-19
  AGG       unchanged 2026-08-18

1 moved, 1 unchanged, 0 failed
Your local cache is untouched - a normal run will sync the new copy.
```

## Requirements and limits

- **`ZFIN_SERVER`** must be set, and **`ZFIN_SERVER_API_KEY`** when the
  server enforces one. Without a server configured there is nothing to
  ask, and the command says so rather than falling back to a local fetch.
- The server caps a single request at **25 symbols**.
- It **refuses a second concurrent refresh** rather than queueing it, so
  a refresh already in flight (a cron run, say) returns a conflict rather
  than doubling the provider load.

## See also

- [`diagnose`](diagnose.md) -- which tier is behind, before you pick a side.
- [`cache`](cache.md) -- `refresh` for the local cache instead.
- [Caching and data freshness](../../explanation/caching.md) -- the server as an optional second tier.
- [Environment variables](../config/environment.md) -- `ZFIN_SERVER`, `ZFIN_SERVER_API_KEY`.

---

[CLI command reference](index.md)
