curl --request GET \
--url https://api.dexploit.dev/wallets/{w}/chart \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.dexploit.dev/wallets/{w}/chart"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.dexploit.dev/wallets/{w}/chart', 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.dexploit.dev/wallets/{w}/chart",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.dexploit.dev/wallets/{w}/chart"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.dexploit.dev/wallets/{w}/chart")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexploit.dev/wallets/{w}/chart")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"wallet": "<string>",
"window": "90d",
"series": [
{
"day": "2026-05-01",
"value_sol": 123,
"value_usd": 123,
"provisional": true
}
],
"today": {
"day": "2026-05-01",
"value_sol": 123,
"value_usd": 123,
"provisional": true
},
"computed_at": 123
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}Daily portfolio value chart
Returns a daily portfolio-value series for the wallet. The chart is assembled on-demand with a cron-free model:
- Closed days are read from the store and returned as-is — they are immutable once written.
- Gaps (days between the last stored point and yesterday) are filled lazily: the FIFO engine replays the wallet’s swaps to reconstruct end-of-day holdings, prices them against
ohlcv_1dcloses, and persists the result before returning. - Today is always computed live and returned as
todaywithprovisional: true— never persisted.
value_usd uses the current SOL/USD rate for all points, including historical ones. Apply your own historical SOL/USD to value_sol if you need historically accurate USD values.
See Wallet portfolio for the full freshness model.
curl --request GET \
--url https://api.dexploit.dev/wallets/{w}/chart \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.dexploit.dev/wallets/{w}/chart"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.dexploit.dev/wallets/{w}/chart', 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.dexploit.dev/wallets/{w}/chart",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.dexploit.dev/wallets/{w}/chart"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.dexploit.dev/wallets/{w}/chart")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dexploit.dev/wallets/{w}/chart")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"wallet": "<string>",
"window": "90d",
"series": [
{
"day": "2026-05-01",
"value_sol": 123,
"value_usd": 123,
"provisional": true
}
],
"today": {
"day": "2026-05-01",
"value_sol": 123,
"value_usd": 123,
"provisional": true
},
"computed_at": 123
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}{
"success": false,
"error": {
"code": "INVALID_PARAM",
"message": "use pair_address; see /api/v1/pairs?token_address=X to discover pools"
}
}Authorizations
Preferred for swaps-api endpoints (/swaps/*, /stats/*, /trending, /pool-events).
Path Parameters
Wallet address (base58, 32–44 characters).
Query Parameters
How far back to go. all returns every day since the wallet's first indexed trade.
30d, 90d, 1y, all Response
Portfolio chart series
Daily portfolio value series for a wallet. Closed days are immutable and served from the store; today is always computed live.
"90d"
Closed days only. Each point is immutable once written.
Show child attributes
Show child attributes
Today's portfolio value, always computed live. provisional: true is always set.
Show child attributes
Show child attributes
Unix epoch milliseconds when this response was assembled.

