API Health check
Arkham Intel API (1.0.0)
Arkham Intelligence official API documentation
The Arkham API provides direct query access to Ultra, our proprietary AI-powered algorithmic address matching engine, enabling sophisticated users to customize data flows and integrate them into their existing systems.
Through the API, users can write custom queries to access a list of Arkham labels, as well as transaction logs and historical balance data for addresses and entities.
Institutions that onboard to the Arkham Exchange automatically qualify for access to this API.
The deprecated API documentation is available here in multiple languages; however, please note that it is no longer being updated.
All API requests MUST include a valid API-Key header. Requests without this header will be rejected with an unauthorized response.
To authenticate with Arkham's API, simply provide a valid API-Key in the header of your request. To apply for API access to our platform, visit: https://info.arkm.com/api-platform.
For the Basic API tier, most endpoints allow up to 20 requests per second with a small additional burst allowance for occasional spikes beyond that threshold.
Some resource-intensive endpoints have lower rate limits of 1 request per second:
- /transfers
- /swaps
- /counterparties/address/{address}
- /counterparties/entity/{entity}
- /token/top_flow/{id}
- /token/top_flow/{chain}/{address}
- /token/volume/{id}
- /token/volume/{chain}/{address}
- /transfers/histogram
Note: These heavy endpoints are computationally intensive and query large amounts of data, hence the stricter rate limits to ensure platform stability.
If you are consistently hitting the default rate limit we have set for our API you can apply for a rate limit increase here.
All data on our platform—including your private labels—is stored securely, using state-of-the-art encryption both at rest and in transit, along with strict access controls to ensure your information remains confidential. For further details on our security and privacy measures, please refer to our Privacy Policy.
Request
Retrieves a list of transfers based on various query filters.
Rate Limit: This endpoint has a stricter rate limit of 1 request per second.
Filter parameters:
- base: Filter by specific entity or address. For example, "0x123abc" or "binance".
- chains: Specify a comma-separated list of chains (e.g. "ethereum,bsc").
- flow: Direction of the transfer. Valid values are "in" (incoming), "out" (outgoing), "self" (self-transfers), or "all".
- from: Comma-separated list of addresses, entities, or deposit services for the 'from' side of a transfer. You can also use special syntax like
"type:cex"to filter on entity types or"deposit:binance"to filter on deposit addresses. - to: Comma-separated list of addresses, entities, or deposit services for the 'to' side.
- tokens: Comma-separated list of token addresses or token IDs. E.g. "ethereum", "usd-coin", or "0x...tokenAddress".
- counterparties: Comma-separated list of addresses or entities to treat strictly as counterparties (only base <-> counterparty transfers).
- timeLast: Filter transfers from a recent duration. For example, "24h" returns transfers from the last 24 hours.
- timeGte/timeLte: Filter from/to a specific timestamp in milliseconds.
- valueGte/valueLte: Numeric filters on the raw token amount (on-chain units).
- usdGte/usdLte: Numeric filters on the historical USD value of the transfer.
- sortKey: Field by which to sort the results. Options include "time", "value", or "usd".
- sortDir: Sorting direction. Use "asc" for ascending or "desc" for descending.
- limit: Maximum number of results to return (default is 50).
- offset: Pagination offset (default is 0).
Transfer direction: "in" for incoming, "out" for outgoing, "self" for self-transfers, or "all" for all transfers.
Comma-separated list of addresses, entities, or deposit services for the 'from' side. You can also use special syntax like "type:cex" to filter on entity types or "deposit:binance" to filter on deposit addresses.
Comma-separated list of token addresses or token IDs. E.g. "ethereum", "usd-coin", or "0x...tokenAddress".
Comma-separated list of addresses or entities to treat strictly as counterparties (only base <-> counterparty transfers).
Time range filter using relative durations. For example: "24h" for transfers in the last 24 hours, "7d" for last 7 days.
- Mock serverhttps://docs.intel.arkm.com/_mock/openapi/transfers
- Production serverhttps://api.arkm.com/transfers
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.intel.arkm.com/_mock/openapi/transfers?base=string&chains=string&flow=in&from=string&to=string&tokens=string&counterparties=string&timeLast=string&timeGte=string&timeLte=string&valueGte=0&valueLte=0&usdGte=0&usdLte=0&sortKey=time&sortDir=asc&limit=50&offset=0' \
-H 'API-Key: YOUR_API_KEY_HERE'{ "transfers": [ { … } ], "count": 10 }
Request
WebSocket endpoint for streaming real-time blockchain transfers. Connect to wss://api.arkm.com/ws/transfers with API-Key header..
Authentication: Include your API-Key as a header during the WebSocket connection handshake.
Client Messages:
subscribe - Create a new filter to receive matching transfers
{ "id": "1", "type": "subscribe", "payload": { "filters": { "from": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"], "to": ["binance", "coinbase"], "chains": ["ethereum"], "tokens": ["USDT"], "usdGte": 100000 } } }unsubscribe - Remove an existing filter by ID
{ "id": "2", "type": "unsubscribe", "payload": { "filterId": 123 } }reconnect - Restore a previous session within 5 minutes of disconnection
{ "id": "3", "type": "reconnect", "payload": { "sessionId": "ws_abc_123" } }
Server Messages:
transfer - Real-time transfer notification matching your filters Example:
{ "type": "transfer", "payload": { "transfer": { "id": "0xc99175260fd56ae461c7dce8d5f79e8aee068225ac5237932594880b277a87d1_502", "transactionHash": "0xc99175260fd56ae461c7dce8d5f79e8aee068225ac5237932594880b277a87d1", "fromAddress": { "address": "0x28C6c06298d514Db089934071355E5743bf21d60", "chain": "ethereum", "arkhamEntity": { "name": "Binance", "note": "", "id": "binance", "type": "cex", "service": null, "addresses": null, "website": "https://binance.com", "twitter": "https://twitter.com/binance", "crunchbase": "https://www.crunchbase.com/organization/binance", "linkedin": "https://www.linkedin.com/company/binance" }, "arkhamLabel": { "name": "Hot Wallet", "address": "0x28C6c06298d514Db089934071355E5743bf21d60", "chainType": "evm" }, "isUserAddress": false, "contract": false }, "fromIsContract": false, "toAddress": { "address": "0x401a39874f38a254a192bf58Dc52eD2A5078535D", "chain": "ethereum", "isUserAddress": false, "contract": false }, "toIsContract": false, "tokenAddress": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "type": "token", "blockTimestamp": "2025-08-28T11:01:35Z", "blockNumber": 23239187, "blockHash": "0xb75f0e8d59bd5f1a72d4ba54e3576a750580735b3c1bf34a9fbd73b2251c963e", "tokenName": "Tether USD", "tokenSymbol": "USDT", "tokenDecimals": 6, "unitValue": 503.9, "tokenId": "tether", "historicalUSD": 503.9, "chain": "ethereum" }, "alertId": 49 } }ack - Acknowledgment for successful operations Example (subscribe success):
{ "type": "ack", "payload": { "messageId": "1", "success": true, "message": "Filter created successfully", "data": { "filterId": 49, "sessionId": "ws_ad5c5dbb_1756378801" } } }error - Error notifications for various failure scenarios Example (rate limited):
{ "type": "error", "payload": { "code": "TIER_RATE_LIMITED", "limitType": "minutely", "message": "You have reached your per-minute WebSocket notification limit. Limit resets in 45 seconds.", "resetIn": 45 } }
Rate Limits:
- 10,000 transfers per hour
- 1,000,000 transfers per month
- 1 API credit consumed per transfer sent
Filter Requirements:
- Must include at least one of: from, to, tokens, base, or usdGte >= 10,000,000
- Initial transfers may take up to 90 seconds after subscribing
- Mock serverhttps://docs.intel.arkm.com/_mock/openapi/ws/transfers
- WebSocket serverwss://api.arkm.com/ws/transfers
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.intel.arkm.com/_mock/openapi/ws/transfers \
-H 'API-Key: YOUR_API_KEY_HERE'- Mock serverhttps://docs.intel.arkm.com/_mock/openapi/transfers/histogram/simple
- Production serverhttps://api.arkm.com/transfers/histogram/simple
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.intel.arkm.com/_mock/openapi/transfers/histogram/simple?base=string&chains=string&flow=in&timeLast=string&timeGte=string&timeLte=string' \
-H 'API-Key: YOUR_API_KEY_HERE'[ { "time": "2025-03-31T00:00:00Z", "count": 17, "usd": 983 } ]
Token exchange movements
Provides an endpoint for analyzing token activity across centralized and decentralized exchanges. This includes ranking tokens by volume, inflows, outflows, netflows, and other metrics over customizable time intervals, with support for filtering by chain, market cap, and specific tokens.
Intelligence
Provides AI-powered intelligence endpoints for analyzing blockchain addresses, entities, contracts, and tokens. These endpoints return enriched insights such as tagging data, entity associations, predicted addresses, contract metadata, and token information across multiple chains.