# GET /transfers

**Operation ID:** `GetTransfers`

Get transfers

Retrieves a list of transfers based on various query filters.

**Transfer access:** Requires transfers.read. Without transfers.filter, the default feed is descending by time, with no filters except chains and an optional usdGte=1. transfers.explorer additionally permits one address or entity as base, or base=all with one token. Combining a specific base and token, or changing other filters or sorting, requires transfers.filter. Full filtering includes explorer queries. Separately, offset + limit may not exceed the caller's transfers.max_results, counting an omitted limit as its default of 20. Logged-out access comes from the anonymous plan over the default plan; its initial grants permit only the default feed's first 50 results. A missing capability or a request past transfers.max_results returns 401 for logged-out callers or 403 for authenticated callers.

**Rate Limit**: This endpoint has a stricter rate limit of 1 request per second.

**Sequence ranges:** Every chain numbers its transfers as they are indexed, and `includeCursors=true` reports each chain's latest number. Pass **seqGte** and **seqLte** to fetch one chain's transfers between two of those numbers — for example, to poll incrementally without missing or repeating a transfer by walking from the last sequence you saw to the latest one reported. A sequence range needs exactly one chain, one whose transfers carry sequences, and may span at most 10,000,000 sequences; a range spanning more is walked in segments, the last of them ending at the chain's reported number. A range must end at or below that number — a **seqLte** beyond it is rejected, because the transfers up to it are not all searchable yet, and a chain reporting no number yet accepts no range at all. Sequences begin when a chain's numbering was introduced, so older transfers carry no **seq** and ranges below the earliest sequenced transfer return nothing. It cannot be combined with **timeLast**, which moves with the clock — use **timeGte** and **timeLte**. A sequence range comes back in ascending sequence order and so cannot be combined with **sortKey** or **sortDir**, and every transfer in it carries its own **seq**. That is how you page a range: a response with fewer than **limit** transfers has completed it, and a full one is continued by repeating the request with **seqGte** set to the last transfer's **seq** plus one. **count** is capped and does not report whether any of the range remains.

**Real-time streaming:** For live transfer notifications instead of polling, use the WebSocket API. See GET /ws/transfers for real-time streaming with transfer filtering. Service-wallet selectors are supported on the HTTP transfer endpoints only.

**Filter forms**: For the filter forms these parameters accept, see the [Param Filters](/usage/filters) guide.

## Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `base` | query | array | No | Filter from or to any of these entities or addresses. Prefix a value with '!' to exclude it, or 'type:' to filter by entity type, so 'type:cex,!binance' returns all exchanges except binance. Pass several as a single comma-separated value (e.g. 'binance,coinbase'). Example: `["binance"]` |
| `chains` | query | array | No | Chains to filter by, as a single comma-separated value (e.g. 'ethereum,bsc'). If omitted, returns transfers across all supported chains. Example: `["ethereum","bsc","polygon"]` |
| `flow` | query | string | No | Transfer direction: 'in' (incoming), 'out' (outgoing), 'self' (self-transfers), or 'all'. Default: all. Example: `"in"` |
| `from` | query | array | No | Filter from any of these addresses, entities, deposit services, or service wallets. Prefix a value with '!' to exclude it, 'type:' to filter on entity types (such as 'type:cex'), 'deposit:' to filter on deposit addresses (such as 'deposit:binance'), or 'service:' for service wallets (such as 'service:binance' or 'service:all'). Service-wallet filters support EVM, Tron, and Solana; omit chains to search those chains, or specify only supported chains. Positive values are alternatives (OR). Pass several as a single comma-separated value (e.g. '0xd8dA6BF2…,deposit:binance'). Example: `["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","deposit:binance"]` |
| `to` | query | array | No | Filter to any of these addresses, entities, deposit services, or service wallets. Prefix a value with '!' to exclude it, 'type:' to filter on entity types (such as 'type:cex'), 'deposit:' to filter on deposit addresses (such as 'deposit:binance'), or 'service:' for service wallets (such as 'service:binance' or 'service:all'). Service-wallet filters support EVM, Tron, and Solana; omit chains to search those chains, or specify only supported chains. Positive values are alternatives (OR). Pass several as a single comma-separated value (e.g. '0xd8dA6BF2…,deposit:binance'). Example: `["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045","deposit:binance"]` |
| `counterparties` | query | array | No | list of addresses or entities to treat strictly as counterparties (only base <-> counterparty transfers). Pass several as a single comma-separated value (e.g. 'coinbase,kraken'). Example: `["binance"]` |
| `tokens` | query | array | No | Filter involving any of these token addresses or token IDs. Pass several as a single comma-separated value (e.g. 'ethereum,0xA0b86991…'). Example: `["ethereum","0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]` |
| `timeGte` | query | string | No | Filter after a specific time (RFC3339, YYYY-MM-DD, or Unix timestamp). Example: `"2024-01-01T00:00:00Z"` |
| `timeLte` | query | string | No | Filter before a specific time (RFC3339, YYYY-MM-DD, or Unix timestamp). Example: `"2024-01-01T00:00:00Z"` |
| `timeLast` | query | string | No | Filter using a duration string. Example: `"24h"` |
| `valueGte` | query | string | No | Filter above a minimum token amount (the quantity of tokens, not the USD value). Example: `"100.23"` |
| `valueLte` | query | string | No | Filter below a maximum token amount (the quantity of tokens, not the USD value). Example: `"100.23"` |
| `usdGte` | query | string | No | Filter above a minimum historical USD value. Example: `"100.23"` |
| `usdLte` | query | string | No | Filter below a maximum historical USD value. Example: `"100.23"` |
| `sortKey` | query | string | No | Field by which to sort the results. Default: time. Custom sorting requires transfers.filter; previews are sorted by time, descending. Example: `"time"` |
| `sortDir` | query | string | No | Direction for sorting results. Default: desc. Example: `"asc"` |
| `limit` | query | integer | No | Maximum number of results to return. Default: 20. Max: 1650. Example: `10` |
| `offset` | query | integer | No | Pagination offset. Default: 0. offset + limit must not exceed 10000 or the caller's transfers.max_results. Example: `0` |
| `includeCursors` | query | boolean | No | Include per-chain as-of cursors in the response. Default: false. Example: `true` |
| `seqGte` | query | integer | No | Return transfers at or after this chain sequence, as reported in cursors and on each returned transfer. Requires seqLte and exactly one chain, and only chains whose transfers carry sequences are supported. Sequences begin when a chain's numbering was introduced; parts of a range below the earliest sequenced transfer return nothing. Example: `454726633` |
| `seqLte` | query | integer | No | Return transfers at or before this chain sequence. Requires seqGte, and the range may span at most 10,000,000 sequences. Must be at or below the chain's latest sequence as reported by includeCursors; a higher value is rejected, as is any range on a chain that reports no sequence yet. A sequence range cannot be combined with timeLast; use timeGte and timeLte. Example: `454726733` |

## Responses

- **200**: OK
  **Schema**: ([EnrichedTransfers](https://arkm.com/llms/schemas/EnrichedTransfers.md))

**Example:**
```json
{
  "count": 10000,
  "transfers": [
    {
      "blockHash": "0xf65f6387d2b83c76197d5358b0bfbf7de6d082dc6861a7772b494729bd0af455",
      "blockNumber": 25495862,
      "blockTimestamp": "2026-07-09T15:16:47Z",
      "chain": "ethereum",
      "fromAddress": {
        "address": "0xEe7aE85f2Fe2239E27D9c1E23fFFe168D63b4055",
        "arkhamEntity": {
          "crunchbase": "https://www.crunchbase.com/organization/binance",
          "id": "binance",
          "linkedin": "https://www.linkedin.com/company/binance",
          "name": "Binance",
          "note": "",
          "service": null,
          "twitter": "https://twitter.com/binance",
          "type": "cex",
          "website": "https://binance.com"
        },
        "arkhamLabel": {
          "address": "0xEe7aE85f2Fe2239E27D9c1E23fFFe168D63b4055",
          "chainType": "evm",
          "name": "Hot Wallet"
        },
        "chain": "ethereum",
        "contract": true,
        "isUserAddress": false
      },
      "fromIsContract": true,
      "historicalUSD": 2995710.06,
      "id": "0xaf33dc1e353cc2ba85f67cd25889e79889a7ce41bf28773f904ac27ce8fc2ff3_68",
      "toAddress": {
        "address": "0xB5f80b0d276Bc4eCC2E95F9Bd36BC368361f87A6",
        "chain": "ethereum",
        "contract": false,
        "isUserAddress": false
      },
      "toIsContract": false,
      "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "tokenDecimals": 6,
      "tokenId": "usd-coin",
      "tokenName": "USD Coin",
      "tokenSymbol": "USDC",
      "transactionHash": "0xaf33dc1e353cc2ba85f67cd25889e79889a7ce41bf28773f904ac27ce8fc2ff3",
      "type": "",
      "unitValue": 2995710.06
    },
    {
      "blockHash": "0xfa69e420c70184c582d8cd5c6a84992372bf447b3b5656404be8c1f16c0b9ed7",
      "blockNumber": 109001701,
      "blockTimestamp": "2026-07-09T15:13:10Z",
      "chain": "bsc",
      "fromAddress": {
        "address": "0xdFD961Dc7B7A18f45F041507115a2Fe922250AaC",
        "arkhamLabel": {
          "address": "0xdFD961Dc7B7A18f45F041507115a2Fe922250AaC",
          "chainType": "evm",
          "name": "Binance Deposit"
        },
        "chain": "bsc",
        "contract": false,
        "depositServiceID": "binance",
        "isUserAddress": false
      },
      "fromIsContract": false,
      "historicalUSD": 1637110.638546851,
      "id": "0x0349d63753ac6feb7de638455074354c672fa9bd7ba9b7d0b1da61ae3cddd029_258",
      "toAddress": {
        "address": "0x8894E0a0c962CB723c1976a4421c95949bE2D4E3",
        "arkhamEntity": {
          "crunchbase": "https://www.crunchbase.com/organization/binance",
          "id": "binance",
          "linkedin": "https://www.linkedin.com/company/binance",
          "name": "Binance",
          "note": "",
          "service": null,
          "twitter": "https://twitter.com/binance",
          "type": "cex",
          "website": "https://binance.com"
        },
        "arkhamLabel": {
          "address": "0x8894E0a0c962CB723c1976a4421c95949bE2D4E3",
          "chainType": "evm",
          "name": "Hot Wallet"
        },
        "chain": "bsc",
        "contract": false,
        "isUserAddress": false
      },
      "toIsContract": false,
      "tokenAddress": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
      "tokenDecimals": 18,
      "tokenId": "binance-bridged-usdc-bnb-smart-chain",
      "tokenName": "USD Coin",
      "tokenSymbol": "USDC",
      "transactionHash": "0x0349d63753ac6feb7de638455074354c672fa9bd7ba9b7d0b1da61ae3cddd029",
      "type": "",
      "unitValue": 1637110.638546851
    }
  ]
}
```
- **400**: Bad Request
- **500**: Internal Server Error

## Example

```bash
curl -X GET "https://api.arkm.com/transfers?base=binance&chains=ethereum,bsc,polygon&flow=in&from=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,deposit:binance&to=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,deposit:binance&counterparties=binance&tokens=ethereum,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&timeGte=2024-01-01T00:00:00Z&timeLte=2024-01-01T00:00:00Z&timeLast=24h&valueGte=100.23&valueLte=100.23&usdGte=100.23&usdLte=100.23&sortKey=time&sortDir=asc&limit=10&offset=0&includeCursors=true&seqGte=454726633&seqLte=454726733" \
  -H "API-Key: YOUR_API_KEY"
```
