Get rkSOL portfolio history
curl --request GET \
--url https://api.starke.finance/v1/rksol/portfolioimport requests
url = "https://api.starke.finance/v1/rksol/portfolio"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.starke.finance/v1/rksol/portfolio', 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.starke.finance/v1/rksol/portfolio",
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.starke.finance/v1/rksol/portfolio"
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.starke.finance/v1/rksol/portfolio")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.starke.finance/v1/rksol/portfolio")
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[
{
"timestamp": "2026-11-01T00:00:00.000Z",
"holdingRksol": 10,
"holdingRksolUsd": 1756,
"realizedPnlUsd": 0,
"unrealizedPnlUsd": 2,
"totalPnlUsd": 2
}
]{
"errors": [
{
"path": "<string>",
"message": "<string>"
}
]
}rkSOL
Get rkSOL portfolio history
Returns the holders’ rkSOL position at each point of the window, oldest first. All holders in ids count as one position, with one average cost. Each point has timestamp; holdingRksol, the rkSOL held; and in USD, holdingRksolUsd, realizedPnlUsd, unrealizedPnlUsd and totalPnlUsd. The USD fields are null at a point with no rkSOL price inside the window yet. The list is empty when the holders have no rkSOL transactions.
GET
/
v1
/
rksol
/
portfolio
Get rkSOL portfolio history
curl --request GET \
--url https://api.starke.finance/v1/rksol/portfolioimport requests
url = "https://api.starke.finance/v1/rksol/portfolio"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.starke.finance/v1/rksol/portfolio', 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.starke.finance/v1/rksol/portfolio",
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.starke.finance/v1/rksol/portfolio"
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.starke.finance/v1/rksol/portfolio")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.starke.finance/v1/rksol/portfolio")
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[
{
"timestamp": "2026-11-01T00:00:00.000Z",
"holdingRksol": 10,
"holdingRksolUsd": 1756,
"realizedPnlUsd": 0,
"unrealizedPnlUsd": 2,
"totalPnlUsd": 2
}
]{
"errors": [
{
"path": "<string>",
"message": "<string>"
}
]
}Query Parameters
Comma-separated holder wallet addresses, 1 to 50 of them.
The start of the window, an ISO 8601 date-time.
Pattern:
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$The end of the window, an ISO 8601 date-time, not before start_time.
Pattern:
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$The spacing of the points: 15mins, 1hour or 1day.
Available options:
15mins, 1hour, 1day Response
One entry for each point in the window.