curl --request GET \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history', 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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"timestamp": "2025-01-01T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.50000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "100.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "2.00000000"
}
],
"value": "20000.50",
"total_pnl": "100.00"
},
{
"timestamp": "2025-06-01T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.50000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "100.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "2.50000000"
}
],
"value": "22500.75",
"total_pnl": "2600.25"
},
{
"timestamp": "2025-12-31T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.55000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "150.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "3.00000000"
}
],
"value": "25000.75",
"total_pnl": "5100.50"
}
],
"quote_symbol": "USD",
"quote_type": "fiat",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-12-31T00:00:00Z"
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
]
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 404,
"code": "not_found"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 501,
"code": "unimplemented"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 504,
"code": "deadline_exceeded"
}
}List portfolio history
Returns daily portfolio valuation snapshots for an account over the requested time window. Use assets to include per-asset balances for selected holdings.
curl --request GET \
--url https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history"
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'API-Key': '<api-key>', 'API-Sign': '<api-key>', 'API-Nonce': '<api-key>'}
};
fetch('https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history', 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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/accounts/{account_id}/portfolio/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"timestamp": "2025-01-01T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.50000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "100.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "2.00000000"
}
],
"value": "20000.50",
"total_pnl": "100.00"
},
{
"timestamp": "2025-06-01T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.50000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "100.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "2.50000000"
}
],
"value": "22500.75",
"total_pnl": "2600.25"
},
{
"timestamp": "2025-12-31T00:00:00Z",
"assets": [
{
"symbol": "XBT",
"type": "crypto",
"amount": "0.55000000"
},
{
"symbol": "USD",
"type": "fiat",
"amount": "150.00"
},
{
"symbol": "TSLAx",
"type": "xstock",
"amount": "3.00000000"
}
],
"value": "25000.75",
"total_pnl": "5100.50"
}
],
"quote_symbol": "USD",
"quote_type": "fiat",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-12-31T00:00:00Z"
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
]
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 404,
"code": "not_found"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 501,
"code": "unimplemented"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b",
"status": 504,
"code": "deadline_exceeded"
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
Globally unique public identifier for an account.
14 - 42Query Parameters
Asset filters to include in the per-data-point breakdown. Each entry is a {symbol, type} pair. Empty or omitted returns no per-asset rows.
Show child attributes
Show child attributes
Lower bound of the portfolio history time window. RFC 3339 timestamp.
Upper bound of the portfolio history time window. RFC 3339 timestamp.
Quote asset symbol to denominate values in.
1 - 16Quote asset classification. Supports fiat and stablecoin.
fiat, stablecoin Response
Successful response
Response for ListPortfolioHistory.
Portfolio data points ordered by ascending timestamp. Always present; serialized as an empty array when there is no history in the window.
Show child attributes
Show child attributes
Quote asset the values are denominated in.
Quote asset classification. Supports fiat and stablecoin.
fiat, stablecoin Start of the resolved portfolio history time window.
End of the resolved portfolio history time window.