curl --request GET \
--url https://hip4-api.totalis.trade/v1/me/pnl \
--header 'Authorization: Bearer <token>'import requests
url = "https://hip4-api.totalis.trade/v1/me/pnl"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://hip4-api.totalis.trade/v1/me/pnl', 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://hip4-api.totalis.trade/v1/me/pnl",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://hip4-api.totalis.trade/v1/me/pnl"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://hip4-api.totalis.trade/v1/me/pnl")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/me/pnl")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"range": "1D",
"tracked_since": "2026-09-08T00:00:00Z",
"points": [
{
"at": "2026-09-16T12:03:20Z",
"pnl": "1250000"
},
{
"at": "2026-09-16T12:15:00Z",
"pnl": "1250000"
},
{
"at": "2026-09-17T12:00:00Z",
"pnl": null
},
{
"at": "2026-09-17T12:03:20Z",
"pnl": "1360000"
}
],
"context": {
"as_of": "2026-09-17T12:03:20Z",
"status": "CURRENT"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Get P&L
Your cumulative trading P&L over one range, for the account your Portfolio shows; a window’s change is its last point minus its first.
Requires a key for your account with account:read.
curl --request GET \
--url https://hip4-api.totalis.trade/v1/me/pnl \
--header 'Authorization: Bearer <token>'import requests
url = "https://hip4-api.totalis.trade/v1/me/pnl"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://hip4-api.totalis.trade/v1/me/pnl', 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://hip4-api.totalis.trade/v1/me/pnl",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://hip4-api.totalis.trade/v1/me/pnl"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://hip4-api.totalis.trade/v1/me/pnl")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/me/pnl")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"range": "1D",
"tracked_since": "2026-09-08T00:00:00Z",
"points": [
{
"at": "2026-09-16T12:03:20Z",
"pnl": "1250000"
},
{
"at": "2026-09-16T12:15:00Z",
"pnl": "1250000"
},
{
"at": "2026-09-17T12:00:00Z",
"pnl": null
},
{
"at": "2026-09-17T12:03:20Z",
"pnl": "1360000"
}
],
"context": {
"as_of": "2026-09-17T12:03:20Z",
"status": "CURRENT"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Authorizations
Scoped API key from the Totalis app settings. Each key acts for one account, yours or a maker's, and holds only scopes that account can use. Each operation lists the scopes it requires.
Headers
Required for browser sessions; API keys do not require an Origin.
Query Parameters
Window of the series: 1D, 1W, 1M (default) or ALL since tracking began.
1D, 1W, 1M, ALL Response
Your P&L series with one freshness status; points are cumulative atomic USDC strings, or null where a held share had no known value. No shared caching.
Cumulative trading P&L of the account Portfolio shows, computed on read: Core trading plus Combos closed in the deployment's vault. Points are cumulative since tracked_since, not rebased: a window's change is its last point minus its first. Deposits, withdrawals and moves between Core and the vault never move it.
The requested range, echoed.
1D, 1W, 1M, ALL Start of the account's recorded Core history; P&L is cumulative from here. It does not prove that history is complete: a fill gap, an unbridged cash gap or holdings the history cannot reproduce make the read UNAVAILABLE with tracked_since still set. Null while the wallet is not yet observed, with no points and a STALE context.
Ascending instants: the window start (never before tracked_since), every round UTC step boundary inside it (1D every 15 minutes, 1W every hour, 1M every 6 hours, ALL an adaptive step of at most 200 points), then the read time valued at live marks.
400Show child attributes
Show child attributes
Freshness of this read. as_of is the valuation instant, the last point's at: it values the covered history at that instant's marks, and STALE says a source lags. UNAVAILABLE nulls every point.
Show child attributes
Show child attributes
Was this page helpful?

