---
title: "Indexer freshness for one network"
method: GET
path: "/v1/sync/status"
tags: ["feed"]
---

# Indexer freshness for one network

`GET /v1/sync/status`

## Request

- Base URL: `https://stablescan.achivx.com`
- URL: `https://stablescan.achivx.com/v1/sync/status`
- Auth: none required

Indexer head, lag and `freshness_seconds` (the age of the newest indexed transfer; `null` when it could not be read for this answer), the freshness measure on every network. `lag_blocks` is `head_block` minus `last_indexed_block`. On Solana (`chain=-1`) it is near 0 by construction and never negative, so it is not a freshness signal there, and `safe_block` is the finalized slot. On the EVM networks and Tron a negative `lag_blocks` means the node's head went back.

## Query parameters

- `chain` union: A network — number, number in a string, slug or CAIP-2 id (the slugs and CAIP-2 ids are /v1/networks' `slug` and `caip2`). The string forms are listed exactly; the server reads them leniently, as A2A and MCP do: surrounding whitespace, a leading + and leading zeros are ignored, slugs and CAIP-2 ids match in any letter case, and an empty or blank value is no chain at all (the default; /v1/freezes/acts alone refuses an empty filter). Anything else (hex, a decimal fraction, a zero-padded CAIP-2 reference, an unindexed network) is 400 invalid_chain.
  - 1 | 10 | 56 | 8453 | 42161 | 728126428 | -1
  - '1' | '10' | '56' | '8453' | '42161' | '728126428' | '-1' | 'ethereum' | 'optimism' | 'bnb-chain' | 'base' | 'arbitrum' | 'tron' | 'solana' | 'eip155:1' | 'eip155:10' | 'eip155:56' | 'eip155:8453' | 'eip155:42161' | 'eip155:728126428' | 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'

## Response `200`

Indexer freshness for one network.

- SyncStatus
  - `as_of` string, required
  - `chain_id` integer, required
  - `finalized_block` integer, required: The newest finalized block (on Solana the finalized slot) the indexer recorded.
  - `freshness_seconds` integer, nullable, required: Age in seconds of the newest indexed transfer on this chain; null when it could not be read for this answer or the chain has no indexed transfer yet — never reported as 0 or a guess.
  - `head_block` integer, required: The chain head the indexer last recorded; 0 when it has recorded none. On Solana (chain -1) it is the greater of the finalized slot polled at the start of each indexer tick and the newest slot the scan processed, not the live chain head.
  - `lag_blocks` integer, required: head_block minus last_indexed_block; 0 when no head is recorded. Not a freshness measure on Solana (chain -1): there it is near 0 by construction and never negative — read freshness_seconds. On the EVM networks and Tron a negative value means the node's head went back (an RPC failover to a lagging endpoint).
  - `last_indexed_block` integer, required: The indexing cursor: the newest block indexed on the EVM networks and Tron; on Solana (chain -1) the newest slot any account scan reached.
  - `safe_block` integer, required: The safe-head block the indexer tracks on the EVM networks and Tron; on Solana (chain -1) the finalized slot, the same value as finalized_block.

## Other responses

- `400`: The one error envelope. Branch on `error.code`, not on the status.
- `429`: The per-IP token bucket (20 requests/second, burst 40) is empty — wait `Retry-After`.
- `500`: The one error envelope. Branch on `error.code`, not on the status.
- `503`: The one error envelope. Branch on `error.code`, not on the status.

---

[API](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api.md) · [All operations](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/achivx/apis/stablecoin-scanner-rest-api/revisions/cbd001c8925c?raw)
