curl --request POST \
--url https://api.datadash.xyz/api/v1/profiles/user \
--header 'Content-Type: application/json' \
--data '
{
"duration": {
"operator": "in",
"value": [
"1M"
]
},
"orderBy": [
{
"direction": "desc",
"field": "realizedPnl"
}
],
"page": {
"limit": 50,
"offset": 0
}
}
'import requests
url = "https://api.datadash.xyz/api/v1/profiles/user"
payload = {
"duration": {
"operator": "in",
"value": ["1M"]
},
"orderBy": [
{
"direction": "desc",
"field": "realizedPnl"
}
],
"page": {
"limit": 50,
"offset": 0
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
duration: {operator: 'in', value: ['1M']},
orderBy: [{direction: 'desc', field: 'realizedPnl'}],
page: {limit: 50, offset: 0}
})
};
fetch('https://api.datadash.xyz/api/v1/profiles/user', 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.datadash.xyz/api/v1/profiles/user",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'duration' => [
'operator' => 'in',
'value' => [
'1M'
]
],
'orderBy' => [
[
'direction' => 'desc',
'field' => 'realizedPnl'
]
],
'page' => [
'limit' => 50,
'offset' => 0
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.datadash.xyz/api/v1/profiles/user"
payload := strings.NewReader("{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.datadash.xyz/api/v1/profiles/user")
.header("Content-Type", "application/json")
.body("{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datadash.xyz/api/v1/profiles/user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}"
response = http.request(request)
puts response.read_body[
{
"avgTradesPerPrediction": 123,
"count": 123,
"holdTime": 123,
"loss": 123,
"losses": 123,
"numConvertTrades": 123,
"numMergeTrades": 123,
"numP2pTrades": 123,
"numPredictions": 123,
"numRedeemTrades": 123,
"numSplitTrades": 123,
"numTrades": 123,
"positions": 123,
"profit": 123,
"profitFactor": 123,
"rank": 123,
"realizedBuyCost": 123,
"realizedPnl": 123,
"roi": 123,
"user": {
"bio": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"displayName": "<string>",
"pnl": 123,
"profileImageUrl": "<string>",
"pseudonym": "<string>",
"rank": 123,
"userId": "<string>",
"verifiedBadge": true,
"xUsername": "<string>"
},
"volume": 123,
"winRate": 123,
"wins": 123
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}User Profile
Per-wallet performance profile, PnL, win rate, volume, ROI, hold time and trade counts, one row per wallet for the requested duration.
curl --request POST \
--url https://api.datadash.xyz/api/v1/profiles/user \
--header 'Content-Type: application/json' \
--data '
{
"duration": {
"operator": "in",
"value": [
"1M"
]
},
"orderBy": [
{
"direction": "desc",
"field": "realizedPnl"
}
],
"page": {
"limit": 50,
"offset": 0
}
}
'import requests
url = "https://api.datadash.xyz/api/v1/profiles/user"
payload = {
"duration": {
"operator": "in",
"value": ["1M"]
},
"orderBy": [
{
"direction": "desc",
"field": "realizedPnl"
}
],
"page": {
"limit": 50,
"offset": 0
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
duration: {operator: 'in', value: ['1M']},
orderBy: [{direction: 'desc', field: 'realizedPnl'}],
page: {limit: 50, offset: 0}
})
};
fetch('https://api.datadash.xyz/api/v1/profiles/user', 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.datadash.xyz/api/v1/profiles/user",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'duration' => [
'operator' => 'in',
'value' => [
'1M'
]
],
'orderBy' => [
[
'direction' => 'desc',
'field' => 'realizedPnl'
]
],
'page' => [
'limit' => 50,
'offset' => 0
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.datadash.xyz/api/v1/profiles/user"
payload := strings.NewReader("{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.datadash.xyz/api/v1/profiles/user")
.header("Content-Type", "application/json")
.body("{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datadash.xyz/api/v1/profiles/user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"duration\": {\n \"operator\": \"in\",\n \"value\": [\n \"1M\"\n ]\n },\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"realizedPnl\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n }\n}"
response = http.request(request)
puts response.read_body[
{
"avgTradesPerPrediction": 123,
"count": 123,
"holdTime": 123,
"loss": 123,
"losses": 123,
"numConvertTrades": 123,
"numMergeTrades": 123,
"numP2pTrades": 123,
"numPredictions": 123,
"numRedeemTrades": 123,
"numSplitTrades": 123,
"numTrades": 123,
"positions": 123,
"profit": 123,
"profitFactor": 123,
"rank": 123,
"realizedBuyCost": 123,
"realizedPnl": 123,
"roi": 123,
"user": {
"bio": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"displayName": "<string>",
"pnl": 123,
"profileImageUrl": "<string>",
"pseudonym": "<string>",
"rank": 123,
"userId": "<string>",
"verifiedBadge": true,
"xUsername": "<string>"
},
"volume": 123,
"winRate": 123,
"wins": 123
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Body
Time window for aggregation
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Filters to apply, combined with AND. Use a group for OR.
1A single field condition. in/notIn take an array of values; matches/notMatches take one search term.
- Numeric
- Wallet address
- User Profile Lookup
- User Tag Profile Lookup
- Group
Show child attributes
Show child attributes
Sort keys in priority order; the first is the primary sort. Defaults to the table's configured ranking when omitted.
Show child attributes
Show child attributes
Free-text search over: User (prefix match/full-text search).
Response
List of User Profile rows
Average number of trades per prediction
A special property that will count the number of wallets
Average hold time in seconds
Total loss
Number of losing positions
Number of convert trades
Number of merge trades
Number of peer-to-peer trades
Number of predictions
Number of redeem trades
Number of split trades
Number of trades
Total number of positions
Total profit
Ratio of profit to loss
User rank by PnL for the duration
Total cost of closed buys
Realized profit and loss
Return on investment percentage
Resolved User row.
Show child attributes
Show child attributes
Total trading volume
Winning percentage
Number of winning positions