Get ERC20 token transfers by contract address
curl --request GET \
--url https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers \
--header 'X-API-Key: <api-key>'import requests
url = "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"result": [
{
"token_name": "Tether USD",
"token_symbol": "USDT",
"token_decimals": "6",
"transaction_hash": "0x2d30ca6f024dbc1307ac8a1a44ca27de6f797ec22ef20627a1307243b0ab7d09",
"address": "0x057Ec652A4F150f7FF94f089A38008f49a0DF88e",
"block_timestamp": "2021-04-02T10:07:54.000Z",
"block_number": 12526958,
"block_hash": "0x0372c302e3c52e8f2e15d155e2c545e6d802e479236564af052759253b20fd86",
"from_address": "0xd4a3BebD824189481FC45363602b83C9c7e9cbDf",
"value": 650000000000000000,
"transaction_index": 12,
"log_index": 2,
"possible_spam": "false",
"verified_contract": "false",
"token_logo": "cdn.moralis.io/325/large/Tether-logo.png?1598003707",
"to_address_entity": "Beaver Build",
"to_address_entity_logo": "https://beaverbuild.com/favicon.ico",
"to_address": "0x62AED87d21Ad0F3cdE4D147Fdcc9245401Af0044",
"to_address_label": "Binance 2",
"from_address_entity": "Opensea",
"from_address_entity_logo": "https://opensea.io/favicon.ico",
"from_address_label": "Binance 1"
}
],
"page": "2",
"page_size": "100",
"cursor": "<string>"
}Transfers
Token Transfers by Contract
Get all ERC20 token transfers for a contract, ordered by block number (newest first).
GET
/
erc20
/
{address}
/
transfers
Get ERC20 token transfers by contract address
curl --request GET \
--url https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers \
--header 'X-API-Key: <api-key>'import requests
url = "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://deep-index.moralis.io/api/v2.2/erc20/{address}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"result": [
{
"token_name": "Tether USD",
"token_symbol": "USDT",
"token_decimals": "6",
"transaction_hash": "0x2d30ca6f024dbc1307ac8a1a44ca27de6f797ec22ef20627a1307243b0ab7d09",
"address": "0x057Ec652A4F150f7FF94f089A38008f49a0DF88e",
"block_timestamp": "2021-04-02T10:07:54.000Z",
"block_number": 12526958,
"block_hash": "0x0372c302e3c52e8f2e15d155e2c545e6d802e479236564af052759253b20fd86",
"from_address": "0xd4a3BebD824189481FC45363602b83C9c7e9cbDf",
"value": 650000000000000000,
"transaction_index": 12,
"log_index": 2,
"possible_spam": "false",
"verified_contract": "false",
"token_logo": "cdn.moralis.io/325/large/Tether-logo.png?1598003707",
"to_address_entity": "Beaver Build",
"to_address_entity_logo": "https://beaverbuild.com/favicon.ico",
"to_address": "0x62AED87d21Ad0F3cdE4D147Fdcc9245401Af0044",
"to_address_label": "Binance 2",
"from_address_entity": "Opensea",
"from_address_entity_logo": "https://opensea.io/favicon.ico",
"from_address_label": "Binance 1"
}
],
"page": "2",
"page_size": "100",
"cursor": "<string>"
}Authorizations
Path Parameters
The address of the token contract
Example:
"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0"
Query Parameters
The chain to query
Available options:
eth, 0x1, sepolia, 0xaa36a7, polygon, 0x89, bsc, 0x38, bsc testnet, 0x61, avalanche, 0xa86a, cronos, 0x19, arbitrum, 0xa4b1, chiliz, 0x15b38, gnosis, 0x64, base, 0x2105, base sepolia, 0x14a34, optimism, 0xa, polygon amoy, 0x13882, linea, 0xe708, moonbeam, 0x504, moonriver, 0x505, flow, 0x2eb, flow-testnet, 0x221, ronin, 0x7e4, ronin-testnet, 0x31769, lisk, 0x46f, pulse, 0x171, sei-testnet, 0x530, sei, 0x531, monad, 0x8f Example:
"eth"
The minimum block number from which to get the transfers
- Provide the param 'from_block' or 'from_date'
- If 'from_date' and 'from_block' are provided, 'from_block' will be used.
Required range:
x >= 0The maximum block number from which to get the transfers.
- Provide the param 'to_block' or 'to_date'
- If 'to_date' and 'to_block' are provided, 'to_block' will be used.
Required range:
x >= 0The start date from which to get the transfers (format in seconds or datestring accepted by momentjs)
- Provide the param 'from_block' or 'from_date'
- If 'from_date' and 'from_block' are provided, 'from_block' will be used.
Get transfers up until this date (format in seconds or datestring accepted by momentjs)
- Provide the param 'to_block' or 'to_date'
- If 'to_date' and 'to_block' are provided, 'to_block' will be used.
The desired page size of the result.
Required range:
x >= 0The order of the result, in ascending (ASC) or descending (DESC)
Available options:
ASC, DESC Example:
"DESC"
The cursor returned in the previous response (used for getting the next page).

