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.
openapi: 3.1.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. All endpoints use credit-based billing with per-request rate limiting.\n\n## Parameter Naming Conventions\n\nAll endpoints follow a standardized naming scheme. Use these canonical names when calling the API.\n\n### Asset Identification\n\n| Param | Type | Description | Example |\n|-------|------|-------------|---------|\n| `symbol` | string | Uppercase ticker symbol(s), comma-separated | `BTC`, `ETH,SOL` |\n| `q` | string | Free-text search keyword | `bitcoin` |\n| `id` | string | Surf entity UUID for direct lookup | `550e8400-...` |\n| `address` | string | On-chain contract or wallet address. Also accepts ENS names (e.g. `vitalik.eth`) which resolve automatically. | `0xdead...`, `vitalik.eth` |\n\n### Time & Aggregation\n\n| Param | Type | Description | Example |\n|-------|------|-------------|---------|\n| `time_range` | string or int | Lookback window | `7d`, `30d`, `365d`, `max` |\n| `interval` | string | Candlestick / indicator interval | `1h`, `1d`, `1w` |\n| `granularity` | string | Data aggregation granularity | `day`, `block`, `hour` |\n\n### Filtering & Sorting\n\n| Param | Type | Description | Example |\n|-------|------|-------------|---------|\n| `chain` | string | Blockchain name (canonical long-form only) | `ethereum`, `solana`, `base` |\n| `currency` | string | Quote currency | `usd`, `eur`, `btc` |\n| `metric` | string | Metric name (endpoint-specific enum) | `nupl`, `tvl` |\n| `type` | string | Category selector (endpoint-specific enum) | `us-btc-spot` |\n| `sort` | string | Sort direction | `asc`, `desc` |\n\n### Pagination\n\nAll list endpoints support:\n- `limit` (int, default: 20, max: 100) — results per page\n- `offset` (int, default: 0) — pagination offset\n\n### Supported Chains\n\nUse canonical long-form names only. Short aliases (eth, sol, matic, etc.) are **not accepted**.\n\n| Chain | Value |\n|-------|-------|\n| Ethereum | `ethereum` |\n| Polygon | `polygon` |\n| BNB Chain | `bsc` |\n| Solana | `solana` |\n| Avalanche | `avalanche` |\n| Arbitrum | `arbitrum` |\n| Optimism | `optimism` |\n| Fantom | `fantom` |\n| Base | `base` |\n| Linea | `linea` |\n| Cyber | `cyber` |\n\nNot all chains are available on every endpoint. Check each endpoint's `chain` enum for supported values.\n\n## Authentication\n\nAll data endpoints require a Bearer token in the `Authorization` header:\n\n```\nAuthorization: Bearer <API_KEY>\n```\n\n## Error Responses\n\nAll endpoints return errors in a consistent format:\n\n```json\n{\n \"error\": {\n \"code\": \"FORBIDDEN\",\n \"message\": \"insufficient credits\"\n }\n}\n```\n\n| HTTP Status | Meaning |\n|-------------|---------|\n| `400` | Bad request — invalid or missing parameters |\n| `401` | Unauthorized — missing or invalid API key |\n| `404` | Not found — the requested entity does not exist |\n| `422` | Validation error — parameter value is out of range or invalid |\n| `429` | Rate limited — too many requests, retry after the indicated interval |\n| `502` | Upstream error — a data source is temporarily unavailable |\n\n## Credits\n\nEach API call costs a certain number of credits. The cost is returned in every response under `meta.credits_used`. Check your remaining balance via `GET /v1/me/credit-balance`.\n"
title: Hermod DEX 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:
OffsetMeta:
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 array is empty, when applicable
type: string
has_more:
description: Whether more items may exist beyond this response. For offset-paged endpoints, continue with a larger offset. For time-series endpoints without offset/cursor controls, true means the requested time range hit an upstream cap; narrow from/to to continue. Omitted when exhaustion cannot be proven.
type: boolean
limit:
description: Maximum number of items returned in this response
format: int64
type: integer
offset:
description: Number of items skipped (pagination offset)
format: int64
type: integer
total:
description: Total number of matching items (before pagination). Omitted when total is unknown.
format: int64
type: integer
watermark:
description: Warehouse watermark (Unix seconds) this response was computed at, on warehouse-backed endpoints (e.g. Hyperliquid /trades/aggregate) — rows up to this time come from the warehouse, newer rows from the live tail. Omitted elsewhere.
format: int64
type: integer
required:
- limit
- offset
- credits_used
- cached
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
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
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
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
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
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
TransferCounterpartyItem:
additionalProperties: false
properties:
amount:
description: Decimal-adjusted token amount transferred (summed).
type: string
amount_usd:
description: Summed USD value. Absent when no transfers in the window are USD-priced.
format: double
type: number
counterparty_address:
description: Receiver (direction=to) or sender (direction=from) address.
type: string
first_transfer_at:
description: Unix seconds of the first transfer seen in the window.
format: int64
type: integer
label:
$ref: '#/components/schemas/WalletLabelItem'
description: Entity label for this counterparty. Only present when include=labels.
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/surf/refs/heads/main/openapi/surf-token-api-openapi.yml