Surf Token API
Analyze individual tokens on-chain. Look up top holders and their share of supply, track ERC-20/SPL token transfers, browse DEX swap history, and view upcoming token unlock schedules with allocation breakdowns.
Analyze individual tokens on-chain. Look up top holders and their share of supply, track ERC-20/SPL token transfers, browse DEX swap history, and view upcoming token unlock schedules with allocation breakdowns.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/surf-token-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
email: backend@cybertinolab.com
name: Cyber team
description: Surf data API gateway providing typed endpoints for crypto market data, project analytics, social signals, on-chain queries, and more.
title: Hermod Token API
version: sha-80d3407
servers:
- url: /
tags:
- description: Analyze individual tokens on-chain. Look up top holders and their share of supply, track ERC-20/SPL token transfers, browse DEX swap history, and view upcoming token unlock schedules with allocation breakdowns.
name: Token
paths:
/gateway/v1/token/dex-trades:
get:
description: 'Returns recent DEX swap events for a token contract address.
**Covered DEXes:** `uniswap`, `sushiswap`, `curve`, `balancer`, `pancakeswap` (and other major DEXes per chain).
**Included fields:** trading pair, amounts, USD value, taker address.
**Data refresh:** ~24 hours · **Chains:** Ethereum, Base, BSC, Arbitrum, Tron'
operationId: token-dex-trades
parameters:
- description: Token CONTRACT ADDRESS — 0x-prefixed hex (EVM chains only; Tron also accepts base58 `T...`). This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
explode: false
in: query
name: address
required: true
schema:
description: Token CONTRACT ADDRESS — 0x-prefixed hex (EVM chains only; Tron also accepts base58 `T...`). This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
examples:
- '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
type: string
- description: Chain. Can be `ethereum`, `base`, `bsc`, `arbitrum`, or `tron`.
explode: false
in: query
name: chain
schema:
default: ethereum
description: Chain. Can be `ethereum`, `base`, `bsc`, `arbitrum`, or `tron`.
enum:
- ethereum
- base
- bsc
- arbitrum
- tron
examples:
- ethereum
type: string
- description: Results per page
explode: false
in: query
name: limit
schema:
default: 20
description: Results per page
examples:
- 20
format: int64
maximum: 100
minimum: 1
type: integer
- description: Pagination offset
explode: false
in: query
name: offset
schema:
default: 0
description: Pagination offset
examples:
- 0
format: int64
minimum: 0
type: integer
- description: 'Comma-separated enrichments to attach to each trade. Currently valid: `labels` — adds a `taker_label` field with entity information for the taker address.'
explode: false
in: query
name: include
schema:
description: 'Comma-separated enrichments to attach to each trade. Currently valid: `labels` — adds a `taker_label` field with entity information for the taker address.'
examples:
- labels
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DataResponseDexTradeItem'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Token DEX Trade History
tags:
- Token
/gateway/v1/token/holders:
get:
description: 'Returns top token holders for a contract address.
**Included fields:** wallet address, balance, and percentage.
**Lookup:** by `address` and `chain`. Supports EVM chains and Solana.'
operationId: token-holders
parameters:
- description: Token CONTRACT ADDRESS — 0x-prefixed hex for EVM chains, base58 for Solana. This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
explode: false
in: query
name: address
required: true
schema:
description: Token CONTRACT ADDRESS — 0x-prefixed hex for EVM chains, base58 for Solana. This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
examples:
- '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
type: string
- description: Chain. Can be `ethereum`, `polygon`, `bsc`, `solana`, `avalanche`, `arbitrum`, `optimism`, or `base`.
explode: false
in: query
name: chain
required: true
schema:
description: Chain. Can be `ethereum`, `polygon`, `bsc`, `solana`, `avalanche`, `arbitrum`, `optimism`, or `base`.
enum:
- ethereum
- polygon
- bsc
- solana
- avalanche
- arbitrum
- optimism
- base
examples:
- ethereum
type: string
- description: Results per page
explode: false
in: query
name: limit
schema:
default: 20
description: Results per page
examples:
- 20
format: int64
maximum: 100
minimum: 1
type: integer
- description: Pagination offset
explode: false
in: query
name: offset
schema:
default: 0
description: Pagination offset
examples:
- 0
format: int64
minimum: 0
type: integer
- description: 'Comma-separated enrichments to attach to each holder. Currently valid: `labels` — adds a full `label` record alongside the flat `entity_name` / `entity_type` fields.'
explode: false
in: query
name: include
schema:
description: 'Comma-separated enrichments to attach to each holder. Currently valid: `labels` — adds a full `label` record alongside the flat `entity_name` / `entity_type` fields.'
examples:
- labels
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DataResponseTokenHolderItem'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Token Holders
tags:
- Token
/gateway/v1/token/tokenomics:
get:
description: 'Returns token unlock time-series with cumulative amounts, allocation breakdowns, total supply denominator, and unlocked-supply percentage.
**Lookup:** by project UUID (`id`) or token `symbol`. Filter by date range with `from`/`to` — defaults to the current calendar month when omitted.
**Important:** `unlock_amount` is a legacy alias for `cumulative_unlocked_amount`; it is already cumulative at each timestamp and must not be summed across rows. Use `unlocked_percentage_of_total_supply` for the unlock ratio.
Returns 404 if no token found.'
operationId: token-tokenomics
parameters:
- description: Surf project UUID. PREFERRED — always use this when available from a previous response. Takes priority over symbol.
explode: false
in: query
name: id
schema:
description: Surf project UUID. PREFERRED — always use this when available from a previous response. Takes priority over symbol.
examples:
- 25c6612a-395c-4974-94eb-3b5f9f4b2ed7
type: string
- description: Token symbol like `ARB`, `OP`, or `APT`
explode: false
in: query
name: symbol
schema:
description: Token symbol like `ARB`, `OP`, or `APT`
examples:
- ARB
type: string
- description: Start of time range. Accepts Unix seconds (`1704067200`) or date string (`2024-01-01`)
explode: false
in: query
name: from
schema:
description: Start of time range. Accepts Unix seconds (`1704067200`) or date string (`2024-01-01`)
examples:
- '2024-01-01'
type: string
- description: End of time range. Accepts Unix seconds (`1735689600`) or date string (`2025-01-01`)
explode: false
in: query
name: to
schema:
description: End of time range. Accepts Unix seconds (`1735689600`) or date string (`2025-01-01`)
examples:
- '2025-01-01'
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DataResponseTokenUnlockPoint'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Token Unlock Schedule
tags:
- Token
/gateway/v1/token/transfer-counterparties:
get:
description: 'Ranked top counterparties (receivers or senders) of a token over a window — answers "who are the top receivers/senders?".
**Lookup:** `address` (token contract) + `chain` + `direction` (`to` = top receivers, `from` = top senders). Rank by `metric` (`count`, `amount`, `amount_usd`).
**Related:** raw rows → `/v1/token/transfers`; aggregate summary → `/v1/token/transfer-stats`.
**Chains:** Ethereum, Base, BSC, Arbitrum, Tron · **Refresh:** ~24h'
operationId: token-transfer-counterparties
parameters:
- description: Token CONTRACT ADDRESS (0x-hex for EVM; Tron accepts base58 `T...` or 0x-hex). Not a ticker — resolve a symbol via GET /v1/search/token?q={symbol}&chain={chain} and use a returned address whose chain is supported by this endpoint.
explode: false
in: query
name: address
required: true
schema:
description: Token CONTRACT ADDRESS (0x-hex for EVM; Tron accepts base58 `T...` or 0x-hex). Not a ticker — resolve a symbol via GET /v1/search/token?q={symbol}&chain={chain} and use a returned address whose chain is supported by this endpoint.
examples:
- '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
type: string
- description: Chain the token contract is deployed on.
explode: false
in: query
name: chain
required: true
schema:
description: Chain the token contract is deployed on.
enum:
- ethereum
- base
- bsc
- arbitrum
- tron
examples:
- ethereum
type: string
- description: 'Ranking direction: `to` = top receivers, `from` = top senders.'
explode: false
in: query
name: direction
required: true
schema:
description: 'Ranking direction: `to` = top receivers, `from` = top senders.'
enum:
- to
- from
examples:
- to
type: string
- description: 'Ranking key: `count` = transfer frequency, `amount` = decimal-adjusted token sum, `amount_usd` = USD value sum (USD lags ~3 days; unreliable for recent windows).'
explode: false
in: query
name: metric
schema:
default: count
description: 'Ranking key: `count` = transfer frequency, `amount` = decimal-adjusted token sum, `amount_usd` = USD value sum (USD lags ~3 days; unreliable for recent windows).'
enum:
- count
- amount
- amount_usd
type: string
- description: Look-back window (hard 90d cap).
explode: false
in: query
name: time_range
schema:
default: 7d
description: Look-back window (hard 90d cap).
enum:
- 1d
- 7d
- 30d
- 90d
type: string
- description: Results per page.
explode: false
in: query
name: limit
schema:
default: 20
description: Results per page.
format: int64
maximum: 100
minimum: 1
type: integer
- description: Pagination offset.
explode: false
in: query
name: offset
schema:
default: 0
description: Pagination offset.
format: int64
minimum: 0
type: integer
- description: Comma-separated enrichments. `labels` attaches an entity label per counterparty.
explode: false
in: query
name: include
schema:
description: Comma-separated enrichments. `labels` attaches an entity label per counterparty.
examples:
- labels
type: string
- description: 'Comma-separated entity categories to drop (best-effort): `cex`, `router`, `amm`, `bridge`. Results may be fewer than `limit` when top counterparties are infrastructure.'
explode: false
in: query
name: exclude_labels
schema:
description: 'Comma-separated entity categories to drop (best-effort): `cex`, `router`, `amm`, `bridge`. Results may be fewer than `limit` when top counterparties are infrastructure.'
examples:
- cex,router
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DataResponseTransferCounterpartyItem'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Top Transfer Counterparties
tags:
- Token
/gateway/v1/token/transfer-stats:
get:
description: 'Aggregate transfer-activity summary for a token over a window — total transfers, unique senders/receivers, total amount, first/last activity, and an optional daily series (`include=series`).
**Lookup:** `address` (token contract) + `chain`.
**Related:** per-counterparty ranking → `/v1/token/transfer-counterparties`; raw rows → `/v1/token/transfers`.
**Chains:** Ethereum, Base, BSC, Arbitrum, Tron · **Refresh:** ~24h · USD value lags ~3 days (see `enriched_ratio`).'
operationId: token-transfer-stats
parameters:
- description: Token CONTRACT ADDRESS (0x-hex for EVM; Tron accepts base58 `T...` or 0x-hex). Not a ticker — resolve a symbol via GET /v1/search/token?q={symbol}&chain={chain} and use a returned address whose chain is supported by this endpoint.
explode: false
in: query
name: address
required: true
schema:
description: Token CONTRACT ADDRESS (0x-hex for EVM; Tron accepts base58 `T...` or 0x-hex). Not a ticker — resolve a symbol via GET /v1/search/token?q={symbol}&chain={chain} and use a returned address whose chain is supported by this endpoint.
examples:
- '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
type: string
- description: Chain the token contract is deployed on.
explode: false
in: query
name: chain
required: true
schema:
description: Chain the token contract is deployed on.
enum:
- ethereum
- base
- bsc
- arbitrum
- tron
examples:
- ethereum
type: string
- description: Look-back window (hard 90d cap).
explode: false
in: query
name: time_range
schema:
default: 7d
description: Look-back window (hard 90d cap).
enum:
- 1d
- 7d
- 30d
- 90d
type: string
- description: Comma-separated extras. `series` adds a daily trend breakdown (volume only).
explode: false
in: query
name: include
schema:
description: Comma-separated extras. `series` adds a daily trend breakdown (volume only).
examples:
- series
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TransferStatsResponse'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Token Transfer Activity Summary
tags:
- Token
/gateway/v1/token/transfers:
get:
description: 'Returns recent transfer events **for a specific token** (ERC-20/TRC-20 contract).
Pass the **token contract address** in `address` — returns every on-chain transfer of that token regardless of sender/receiver.
**Included fields:** sender, receiver, raw amount, block timestamp.
Use this to analyze a token''s on-chain activity (e.g. large movements, distribution patterns).
**Lookup:** `address` (token contract) + `chain`. Sort by `asc` or `desc`.
**Data refresh:** ~24 hours · **Chains:** Ethereum, Base, BSC, Arbitrum, Tron (Solana uses a different source with no delay)'
operationId: token-transfers
parameters:
- description: Token CONTRACT ADDRESS — 0x-prefixed hex for EVM chains, base58 for Solana. This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
explode: false
in: query
name: address
required: true
schema:
description: Token CONTRACT ADDRESS — 0x-prefixed hex for EVM chains, base58 for Solana. This is NOT a ticker symbol (e.g. do NOT pass `USDC` or `BTC`). To resolve a ticker symbol to a contract address, call GET /v1/search/token?q={symbol}&chain={chain} and use the `address` whose `chain` is supported by this endpoint. This endpoint has no `symbol` parameter.
examples:
- '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
type: string
- description: Chain. Can be `ethereum`, `base`, `solana`, `tron`, `bsc`, or `arbitrum`.
explode: false
in: query
name: chain
required: true
schema:
description: Chain. Can be `ethereum`, `base`, `solana`, `tron`, `bsc`, or `arbitrum`.
enum:
- ethereum
- base
- solana
- tron
- bsc
- arbitrum
examples:
- ethereum
type: string
- description: Start of date range. Accepts Unix seconds or YYYY-MM-DD. Defaults to 30 days ago.
explode: false
in: query
name: from
schema:
description: Start of date range. Accepts Unix seconds or YYYY-MM-DD. Defaults to 30 days ago.
examples:
- '2025-01-01'
type: string
- description: End of date range. Accepts Unix seconds or YYYY-MM-DD. Defaults to today.
explode: false
in: query
name: to
schema:
description: End of date range. Accepts Unix seconds or YYYY-MM-DD. Defaults to today.
examples:
- '2025-03-01'
type: string
- description: Results per page
explode: false
in: query
name: limit
schema:
default: 20
description: Results per page
examples:
- 20
format: int64
maximum: 100
minimum: 1
type: integer
- description: Pagination offset
explode: false
in: query
name: offset
schema:
default: 0
description: Pagination offset
examples:
- 0
format: int64
minimum: 0
type: integer
- description: 'Comma-separated enrichments to attach to each transfer. Currently valid: `labels` — adds `from_label` and `to_label` fields.'
explode: false
in: query
name: include
schema:
description: 'Comma-separated enrichments to attach to each transfer. Currently valid: `labels` — adds `from_label` and `to_label` fields.'
examples:
- labels
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/DataResponseTokenTransferItem'
description: OK
default:
content:
application/json:
schema:
$ref: '#/components/schemas/DataAPIError'
description: Error
security:
- AccessToken: []
summary: Token Transfer History
tags:
- Token
components:
schemas:
TransferStatsMeta:
additionalProperties: false
properties:
cached:
description: Whether this response was served from cache
type: boolean
credits_used:
description: Credits deducted for this request
format: int64
type: integer
empty_reason:
description: Hint explaining why the data object is empty, when applicable
type: string
enriched_ratio:
description: Fraction of transfers with a USD price (0..1). Low/zero means USD-value fields are partial.
format: double
type: number
required:
- credits_used
- cached
type: object
DexTradeItem:
additionalProperties: false
properties:
amount_usd:
description: Trade value in USD at execution time
format: double
type: number
block_time:
description: Unix timestamp in seconds when the trade was executed
format: int64
type: integer
project:
description: DEX project name like `uniswap`, `sushiswap`, or `curve`
type: string
taker:
description: Wallet address that initiated the swap
type: string
taker_label:
$ref: '#/components/schemas/WalletLabelItem'
description: Entity labels for the taker address. Only present when the request sets `include=labels`.
token_bought_address:
description: Contract address of the token bought
type: string
token_bought_amount:
description: Amount of tokens bought (decimal-adjusted)
format: double
type: number
token_bought_symbol:
description: Symbol of the token bought in this trade
type: string
token_pair:
description: Trading pair symbol like `WETH-USDC`
type: string
token_sold_address:
description: Contract address of the token sold
type: string
token_sold_amount:
description: Amount of tokens sold (decimal-adjusted)
format: double
type: number
token_sold_symbol:
description: Symbol of the token sold in this trade
type: string
tx_hash:
description: Transaction hash
type: string
version:
description: DEX version like `v2` or `v3`
type: string
required:
- block_time
- project
- version
- token_pair
- token_bought_symbol
- token_sold_symbol
- token_bought_amount
- token_sold_amount
- amount_usd
- taker
- tx_hash
type: object
DataAPIErrorDetail:
additionalProperties: false
properties:
code:
type: string
message:
type: string
required:
- code
- message
type: object
DataResponseTransferCounterpartyItem:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataResponseTransferCounterpartyItem.json
format: uri
readOnly: true
type: string
data:
items:
$ref: '#/components/schemas/TransferCounterpartyItem'
type:
- array
- 'null'
meta:
$ref: '#/components/schemas/OffsetMeta'
required:
- data
- meta
type: object
WalletLabelInfo:
additionalProperties: false
properties:
confidence:
description: Confidence score 0.0-1.0
format: double
type: number
label:
description: Human-readable label for this address like `Binance Hot Wallet`
type: string
required:
- label
type: object
TokenUnlockPoint:
additionalProperties: false
properties:
allocations:
description: Breakdown by allocation
items:
$ref: '#/components/schemas/TokenUnlockAllocationItem'
type:
- array
- 'null'
cumulative_unlocked_amount:
description: Cumulative total tokens unlocked up to this timestamp (decimal-adjusted). Use this for unlocked-supply ratios.
format: double
type: number
timestamp:
description: Unix timestamp in seconds
format: int64
type: integer
total_supply:
description: Token total supply used as the denominator for unlocked_percentage_of_total_supply
format: double
type: number
unlock_amount:
description: Legacy alias for cumulative_unlocked_amount. This is cumulative and must not be summed across rows.
format: double
type: number
unlocked_percentage_of_total_supply:
description: Cumulative unlocked amount divided by total_supply, expressed as a percentage from 0 to 100
format: double
type: number
required:
- timestamp
- unlock_amount
- cumulative_unlocked_amount
type: object
DataAPIError:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataAPIError.json
format: uri
readOnly: true
type: string
error:
$ref: '#/components/schemas/DataAPIErrorDetail'
required:
- error
type: object
DataResponseTokenHolderItem:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataResponseTokenHolderItem.json
format: uri
readOnly: true
type: string
data:
items:
$ref: '#/components/schemas/TokenHolderItem'
type:
- array
- 'null'
meta:
$ref: '#/components/schemas/OffsetMeta'
required:
- data
- meta
type: object
DataResponseTokenTransferItem:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataResponseTokenTransferItem.json
format: uri
readOnly: true
type: string
data:
items:
$ref: '#/components/schemas/TokenTransferItem'
type:
- array
- 'null'
meta:
$ref: '#/components/schemas/OffsetMeta'
required:
- data
- meta
type: object
DataResponseTokenUnlockPoint:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataResponseTokenUnlockPoint.json
format: uri
readOnly: true
type: string
data:
items:
$ref: '#/components/schemas/TokenUnlockPoint'
type:
- array
- 'null'
meta:
$ref: '#/components/schemas/OffsetMeta'
required:
- data
- meta
type: object
TokenUnlockAllocationItem:
additionalProperties: false
properties:
amount:
description: Decimal-adjusted allocation amount
format: double
type: number
name:
description: Allocation name
type: string
required:
- name
- amount
type: object
TransferStatsResponse:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/TransferStatsResponse.json
format: uri
readOnly: true
type: string
data:
$ref: '#/components/schemas/TransferStatsBody'
meta:
$ref: '#/components/schemas/TransferStatsMeta'
required:
- data
- meta
type: object
DataResponseDexTradeItem:
additionalProperties: false
properties:
$schema:
description: A URL to the JSON Schema for this object.
examples:
- https://example.com/schemas/DataResponseDexTradeItem.json
format: uri
readOnly: true
type: string
data:
items:
$ref: '#/components/schemas/DexTradeItem'
type:
- array
- 'null'
meta:
$ref: '#/components/schemas/OffsetMeta'
required:
- data
- meta
type: object
TransferSeriesPoint:
additionalProperties: false
properties:
amount:
description: Decimal-adjusted token amount transferred on this day.
type: string
amount_usd:
description: Summed USD value for the day. Absent when the day is not yet USD-priced.
format: double
type: number
date:
description: Start-of-day Unix seconds (UTC).
format: int64
type: integer
enriched_ratio:
description: Fraction of the day's transfers with a USD price (0..1).
format: double
type: number
transfer_count:
description: Transfers on this day.
format: int64
type: integer
required:
- date
- transfer_count
- amount
type: object
WalletLabelItem:
additionalProperties: false
properties:
address:
description: Wallet address
type: string
entity_name:
description: Name of the associated entity like `Binance` or `Aave`
type: string
entity_type:
description: Type of entity like `exchange`, `fund`, or `whale`
type: string
labels:
description: List of labels assigned to this address
items:
$ref: '#/components/schemas/WalletLabelInfo'
type:
- array
- 'null'
required:
- address
- labels
type: object
OffsetMeta:
additionalProperties: false
properties:
cached:
description: Whether this response was served from c
# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/surf/refs/heads/main/openapi/surf-token-api-openapi.yml