curl --request POST \
--url https://api.datadash.xyz/api/v1/smart-money/holders \
--header 'Content-Type: application/json' \
--data '
{
"eventId": "27185",
"orderBy": [
{
"direction": "desc",
"field": "atRisk"
}
],
"page": {
"limit": 50,
"offset": 0
},
"positionId": "1038287",
"walletFilters": [
{
"field": "userId",
"operator": "inCohort",
"value": "0GYJ8T5V2Q1XW"
}
]
}
'import requests
url = "https://api.datadash.xyz/api/v1/smart-money/holders"
payload = {
"eventId": "27185",
"orderBy": [
{
"direction": "desc",
"field": "atRisk"
}
],
"page": {
"limit": 50,
"offset": 0
},
"positionId": "1038287",
"walletFilters": [
{
"field": "userId",
"operator": "inCohort",
"value": "0GYJ8T5V2Q1XW"
}
]
}
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({
eventId: '27185',
orderBy: [{direction: 'desc', field: 'atRisk'}],
page: {limit: 50, offset: 0},
positionId: '1038287',
walletFilters: [{field: 'userId', operator: 'inCohort', value: '0GYJ8T5V2Q1XW'}]
})
};
fetch('https://api.datadash.xyz/api/v1/smart-money/holders', 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/smart-money/holders",
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([
'eventId' => '27185',
'orderBy' => [
[
'direction' => 'desc',
'field' => 'atRisk'
]
],
'page' => [
'limit' => 50,
'offset' => 0
],
'positionId' => '1038287',
'walletFilters' => [
[
'field' => 'userId',
'operator' => 'inCohort',
'value' => '0GYJ8T5V2Q1XW'
]
]
]),
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/smart-money/holders"
payload := strings.NewReader("{\n \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\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/smart-money/holders")
.header("Content-Type", "application/json")
.body("{\n \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datadash.xyz/api/v1/smart-money/holders")
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 \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"atRisk": 123,
"currentValue": 123,
"entryPrice": 123,
"netShares": 123,
"unrealizedPnl": 123,
"unrealizedPnlPercentage": 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>"
}
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Smart Money Holders
Per-wallet smart-money holders of one position — one side of one market — within an event. Ask for the other side with the sibling position id.
curl --request POST \
--url https://api.datadash.xyz/api/v1/smart-money/holders \
--header 'Content-Type: application/json' \
--data '
{
"eventId": "27185",
"orderBy": [
{
"direction": "desc",
"field": "atRisk"
}
],
"page": {
"limit": 50,
"offset": 0
},
"positionId": "1038287",
"walletFilters": [
{
"field": "userId",
"operator": "inCohort",
"value": "0GYJ8T5V2Q1XW"
}
]
}
'import requests
url = "https://api.datadash.xyz/api/v1/smart-money/holders"
payload = {
"eventId": "27185",
"orderBy": [
{
"direction": "desc",
"field": "atRisk"
}
],
"page": {
"limit": 50,
"offset": 0
},
"positionId": "1038287",
"walletFilters": [
{
"field": "userId",
"operator": "inCohort",
"value": "0GYJ8T5V2Q1XW"
}
]
}
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({
eventId: '27185',
orderBy: [{direction: 'desc', field: 'atRisk'}],
page: {limit: 50, offset: 0},
positionId: '1038287',
walletFilters: [{field: 'userId', operator: 'inCohort', value: '0GYJ8T5V2Q1XW'}]
})
};
fetch('https://api.datadash.xyz/api/v1/smart-money/holders', 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/smart-money/holders",
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([
'eventId' => '27185',
'orderBy' => [
[
'direction' => 'desc',
'field' => 'atRisk'
]
],
'page' => [
'limit' => 50,
'offset' => 0
],
'positionId' => '1038287',
'walletFilters' => [
[
'field' => 'userId',
'operator' => 'inCohort',
'value' => '0GYJ8T5V2Q1XW'
]
]
]),
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/smart-money/holders"
payload := strings.NewReader("{\n \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\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/smart-money/holders")
.header("Content-Type", "application/json")
.body("{\n \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datadash.xyz/api/v1/smart-money/holders")
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 \"eventId\": \"27185\",\n \"orderBy\": [\n {\n \"direction\": \"desc\",\n \"field\": \"atRisk\"\n }\n ],\n \"page\": {\n \"limit\": 50,\n \"offset\": 0\n },\n \"positionId\": \"1038287\",\n \"walletFilters\": [\n {\n \"field\": \"userId\",\n \"operator\": \"inCohort\",\n \"value\": \"0GYJ8T5V2Q1XW\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"atRisk": 123,
"currentValue": 123,
"entryPrice": 123,
"netShares": 123,
"unrealizedPnl": 123,
"unrealizedPnlPercentage": 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>"
}
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Body
Query argument $1, bound as a query parameter and cast inside the query.
Show child attributes
Show child attributes
Query argument $2, bound as a query parameter and cast inside the query.
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
- Boolean
- 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
Filters to apply, combined with AND. Use a group for OR.
1inCohort/notInCohort take cohort ids instead of addresses.
- Wallet address
- User Profile Lookup
- User Tag Profile Lookup
- Group
Show child attributes
Show child attributes
Response
List of Smart Money Holders rows
Dollars the wallet truly has at risk on this position — entry-cost buy dollars after canonicalization on a neg-risk event, or the raw leg's buy cost on a binary one (never current value). Recovered from the emitted columns as current value minus open PnL, which is exactly the cost the query divided by.
Current USD value of the wallet's position (its shares at the side's live price) — for a No position on a neg-risk event, the field legs valued at their own markets' live prices
Average entry price of the position — at-risk buy cost divided by the share count, with cost attributed through the neg-risk conversion by current price on a neg-risk event, or the leg's own average buying price on a binary one. NULL when the position holds no shares.
The wallet's share count on the requested position. Neg-risk event — after per-wallet canonicalization (e' = e − min(e)); a Yes position gives canonical Yes shares on that market, a No position the wallet's field shares in synthetic NO-equivalent units. Binary event — the raw leg's shares. Recovered from the emitted columns as at-risk cost over entry price (NULL in the cost > 0, shares = 0 corner, where the entry price is itself NULL).
Unrealized profit/loss on the position — current value minus at-risk buy cost, on both market types (on a binary event this is just the leg's own unrealized PnL)
Unrealized profit/loss as a percentage of the position's at-risk buy cost
Resolved User row.
Show child attributes
Show child attributes