curl --request POST \
--url https://api.example.com/api/v1/positions/closed \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"page": {
"limit": 2,
"offset": 1
},
"filter": [
{
"value": 123
}
],
"orderBy": [
{
"direction": "asc"
}
],
"searchKey": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/positions/closed"
payload = {
"page": {
"limit": 2,
"offset": 1
},
"filter": [{ "value": 123 }],
"orderBy": [{ "direction": "asc" }],
"searchKey": "<string>"
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
page: {limit: 2, offset: 1},
filter: [{value: 123}],
orderBy: [{direction: 'asc'}],
searchKey: '<string>'
})
};
fetch('https://api.example.com/api/v1/positions/closed', 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.example.com/api/v1/positions/closed",
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([
'page' => [
'limit' => 2,
'offset' => 1
],
'filter' => [
[
'value' => 123
]
],
'orderBy' => [
[
'direction' => 'asc'
]
],
'searchKey' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/positions/closed"
payload := strings.NewReader("{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.example.com/api/v1/positions/closed")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/positions/closed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"avgBuyPrice": 123,
"eventId": 123,
"exitPrice": 123,
"invested": 123,
"pnl": 123,
"positions": [
{
"avgBuyPrice": 123,
"bought": 123,
"boughtShares": 123,
"pnl": 123,
"positionId": 123,
"realizedPnl": 123,
"roi": 123
}
],
"roi": 123,
"shares": 123
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Closed Positions
Closed (exited) positions for a wallet or cohort, grouped by event.
curl --request POST \
--url https://api.example.com/api/v1/positions/closed \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"page": {
"limit": 2,
"offset": 1
},
"filter": [
{
"value": 123
}
],
"orderBy": [
{
"direction": "asc"
}
],
"searchKey": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/positions/closed"
payload = {
"page": {
"limit": 2,
"offset": 1
},
"filter": [{ "value": 123 }],
"orderBy": [{ "direction": "asc" }],
"searchKey": "<string>"
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
page: {limit: 2, offset: 1},
filter: [{value: 123}],
orderBy: [{direction: 'asc'}],
searchKey: '<string>'
})
};
fetch('https://api.example.com/api/v1/positions/closed', 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.example.com/api/v1/positions/closed",
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([
'page' => [
'limit' => 2,
'offset' => 1
],
'filter' => [
[
'value' => 123
]
],
'orderBy' => [
[
'direction' => 'asc'
]
],
'searchKey' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/positions/closed"
payload := strings.NewReader("{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.example.com/api/v1/positions/closed")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/positions/closed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"page\": {\n \"limit\": 2,\n \"offset\": 1\n },\n \"filter\": [\n {\n \"value\": 123\n }\n ],\n \"orderBy\": [\n {\n \"direction\": \"asc\"\n }\n ],\n \"searchKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"avgBuyPrice": 123,
"eventId": 123,
"exitPrice": 123,
"invested": 123,
"pnl": 123,
"positions": [
{
"avgBuyPrice": 123,
"bought": 123,
"boughtShares": 123,
"pnl": 123,
"positionId": 123,
"realizedPnl": 123,
"roi": 123
}
],
"roi": 123,
"shares": 123
}
]{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Authorizations
API key issued for programmatic access.
Body
Show child attributes
Show child attributes
Filters to apply, combined with AND. Use a group for OR.
1A single condition, or a group combining conditions with AND/OR.
- Option 1
- Option 2
- Option 3
- Option 4
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: Event (embedding + full-text relevance).
Response
List of Closed Positions rows
Average buying price of the sold shares
Parent event
Average selling price
Realized cost basis of the sold shares.
Realized profit and loss
Per-position breakdown within the event, realized cost basis, sold shares, avg buy price, realized pnl and roi, summed across every matching wallet (so a position closed by N cohort users collapses to one entry). Serialized as a JSON array of objects.
Show child attributes
Show child attributes
Return on investment percentage
Total shares sold