Protocol stats over a time range
Aggregate protocol-wide volume, active users, transactions, and new users over an explicit [start, end) range, filtered on trade execution time. Public — no API key required.
Built for the DefiLlama adapter. volumeUsd is valued in USD: a stablecoin quote mint counts 1:1, any other quote token is priced from on-chain 1m candles as of the range, and a quote token with no stable-paired market is skipped (volume undercounts rather than erroring). A range with no trades returns zeros.
curl --request GET \
--url https://api.archer.exchange/v1/stats/dimensionsimport requests
url = "https://api.archer.exchange/v1/stats/dimensions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.archer.exchange/v1/stats/dimensions', 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://api.archer.exchange/v1/stats/dimensions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.archer.exchange/v1/stats/dimensions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.archer.exchange/v1/stats/dimensions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.archer.exchange/v1/stats/dimensions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"activeUsers": 123,
"end": 123,
"newUsers": 123,
"start": 123,
"transactions": 123,
"volumeUsd": "<string>"
}{
"error": "INVALID_PARAMS",
"message": "Invalid market address: xyz"
}{
"error": "RATE_LIMITED",
"message": "Too many requests. Please slow down."
}{
"error": "INTERNAL_ERROR",
"message": "Internal error: ..."
}Query Parameters
Range start, unix seconds, inclusive.
Range end, unix seconds, exclusive. Must be greater than start.
Response
Aggregated stats for the range.
Distinct trading wallets active in the range (DefiLlama dailyActiveUsers).
Echoed range end (unix seconds, exclusive).
Wallets whose first-ever trade falls in the range (DefiLlama dailyNewUsers).
Echoed range start (unix seconds, inclusive).
Distinct execution tx signatures in the range (DefiLlama dailyTransactionsCount).
Summed quote volume over the range, valued in USD (decimal string).
curl --request GET \
--url https://api.archer.exchange/v1/stats/dimensionsimport requests
url = "https://api.archer.exchange/v1/stats/dimensions"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.archer.exchange/v1/stats/dimensions', 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://api.archer.exchange/v1/stats/dimensions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.archer.exchange/v1/stats/dimensions"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.archer.exchange/v1/stats/dimensions")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.archer.exchange/v1/stats/dimensions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"activeUsers": 123,
"end": 123,
"newUsers": 123,
"start": 123,
"transactions": 123,
"volumeUsd": "<string>"
}{
"error": "INVALID_PARAMS",
"message": "Invalid market address: xyz"
}{
"error": "RATE_LIMITED",
"message": "Too many requests. Please slow down."
}{
"error": "INTERNAL_ERROR",
"message": "Internal error: ..."
}