---
title: "Find a transaction on every indexed network at once"
method: GET
path: "/v1/verify"
tags: ["feed"]
---

# Find a transaction on every indexed network at once

`GET /v1/verify`

## Request

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

One hash, no network: every indexed network whose transaction-id form the hash fits is
searched (hex — the EVM networks and Tron; base58 — Solana) for stablecoin transfers and
issuer acts, the same reads as /v1/transfers?tx= and /v1/freezes?tx=. `found` is true on
a hit (`chain_id`, `transfers`, `freeze` describe it), false when every searched network
answered without one, and null when none found it and at least one network did not
answer (`chains[].status: unknown`) — retry, it is not a negative. A negative covers each
network's hot window as of its `chains[].sync` (read `freshness_seconds`); rows older than
`hot_window_start` are offloaded and not searched. Unknown parameters, `chain` included,
are `400 unknown_param`. Incomplete answers are `no-store`; complete ones live 15 s.

## Query parameters

- `tx` string, required

## Response `200`

Where a transaction hash settled, searched on every indexed network.

- VerifyTxResult
  - `as_of` string, required
  - `chain_id` integer, nullable, required
  - `chain_slug` string
  - `chains` object[], nullable, required
    - `chain_id` integer, required
    - `chain_slug` string, required
    - `status` string, required
    - `sync` object, nullable, required
      - `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.
    - `unknown_reason` string
  - `complete` boolean, required
  - `found` boolean, nullable, required
  - `freeze` object, nullable, required
    - `chain_id` integer, required
    - `chain_slug` string, required
    - `chain_source` string
    - `items` object[], nullable, required
      - `action` string, required
      - `amount_usd6` integer, nullable
      - `block_number` integer, required
      - `block_time` string, required
      - `chain_id` integer, required
      - `chain_slug` string, required
      - `finality` string, required
      - `log_index` integer, required
      - `raw_event` string, required
      - `subject` string, required
      - `token` string, required
      - `token_address` string, required
      - `tx_hash` string, required
    - `tx_hash` string, required
  - `hot_window_start` string
  - `note` string, required
  - `transfers` object[], nullable, required
    - `amount` object, required
      - `amount` string, required
      - `decimals` integer, required
      - `token` string, required
    - `block_number` integer, required
    - `block_time` string, required
    - `finality` string, required
    - `is_burn` boolean
    - `is_mint` boolean
    - `log_index` integer, required
    - `payer` string, required
    - `payer_category` string
    - `payer_is_service` boolean
    - `payer_name` string
    - `recipient` string, required
    - `recipient_category` string
    - `recipient_is_service` boolean
    - `recipient_name` string
    - `token` string
    - `tx_hash` string, required
    - `usd_amount` number, nullable
  - `transfers_total` integer, nullable, required
  - `tx` string, required

## Other responses

- `400`: The one error envelope. Branch on `error.code`, not on the status.
- `404`: 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)
