Get portfolio
curl --request GET \
--url https://api.services.payward.com/v1/accounts/{account_id}/portfolio \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.services.payward.com/v1/accounts/{account_id}/portfolio"
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.services.payward.com/v1/accounts/{account_id}/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.services.payward.com/v1/accounts/{account_id}/portfolio",
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.services.payward.com/v1/accounts/{account_id}/portfolio"
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.services.payward.com/v1/accounts/{account_id}/portfolio")
.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.services.payward.com/v1/accounts/{account_id}/portfolio")
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": {
"as_of": "2026-08-25T12:34:56Z",
"quote": {
"symbol": "USD",
"type": "fiat",
"usd_index_rate": "1"
},
"total_in_quote": "131000.00",
"availability": {
"available_in_quote": "120000.00",
"withheld": {
"total_in_quote": "11000.00",
"open_orders_in_quote": "2000.00",
"earn_in_quote": "4000.00",
"other_in_quote": "5000.00"
}
},
"pnl": {
"unrealized_in_quote": "3500.00",
"realized_in_quote": "-3.7440",
"reference_currency": {
"symbol": "USD",
"type": "fiat"
},
"status": {
"unrealized": "ready",
"realized": "in_progress"
}
},
"assets": [
{
"symbol": "BTC",
"type": "crypto",
"index_price_in_quote": "62000.00",
"balances": {
"total": "0.5",
"total_in_quote": "31000.00",
"main": {
"total": "0.5",
"total_in_quote": "31000.00"
}
},
"availability": {
"trade": "0.5"
},
"pnl": {
"avg_entry_price_in_quote": "55000.00",
"cost_basis_in_quote": "27500.00",
"unrealized_in_quote": "3500.00",
"reference_currency": {
"symbol": "USD",
"type": "fiat"
},
"status": {
"avg_entry_price": "ready",
"cost_basis": "ready",
"unrealized": "ready",
"realized": "in_progress"
}
}
},
{
"symbol": "USD",
"type": "fiat",
"index_price_in_quote": "1",
"balances": {
"total": "100000.00",
"total_in_quote": "100000.00",
"main": {
"total": "100000.00",
"total_in_quote": "100000.00"
}
}
}
]
}
}{
"error": {
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
],
"status": 400,
"code": "bad_request",
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unauthenticated",
"status": 401,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "forbidden",
"status": 403,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "not_found",
"status": 404,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "resource_exhausted",
"status": 429,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "internal",
"status": 500,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unimplemented",
"status": 501,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unavailable",
"status": 503,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "deadline_exceeded",
"status": 504,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}Portfolio
Get portfolio
Returns one account portfolio snapshot containing account-level values and the per-asset
breakdown. Quote-denominated monetary amounts use an _in_quote suffix; native asset
amounts omit the suffix.
GET
/
v1
/
accounts
/
{account_id}
/
portfolio
Get portfolio
curl --request GET \
--url https://api.services.payward.com/v1/accounts/{account_id}/portfolio \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>'import requests
url = "https://api.services.payward.com/v1/accounts/{account_id}/portfolio"
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.services.payward.com/v1/accounts/{account_id}/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.services.payward.com/v1/accounts/{account_id}/portfolio",
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.services.payward.com/v1/accounts/{account_id}/portfolio"
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.services.payward.com/v1/accounts/{account_id}/portfolio")
.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.services.payward.com/v1/accounts/{account_id}/portfolio")
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": {
"as_of": "2026-08-25T12:34:56Z",
"quote": {
"symbol": "USD",
"type": "fiat",
"usd_index_rate": "1"
},
"total_in_quote": "131000.00",
"availability": {
"available_in_quote": "120000.00",
"withheld": {
"total_in_quote": "11000.00",
"open_orders_in_quote": "2000.00",
"earn_in_quote": "4000.00",
"other_in_quote": "5000.00"
}
},
"pnl": {
"unrealized_in_quote": "3500.00",
"realized_in_quote": "-3.7440",
"reference_currency": {
"symbol": "USD",
"type": "fiat"
},
"status": {
"unrealized": "ready",
"realized": "in_progress"
}
},
"assets": [
{
"symbol": "BTC",
"type": "crypto",
"index_price_in_quote": "62000.00",
"balances": {
"total": "0.5",
"total_in_quote": "31000.00",
"main": {
"total": "0.5",
"total_in_quote": "31000.00"
}
},
"availability": {
"trade": "0.5"
},
"pnl": {
"avg_entry_price_in_quote": "55000.00",
"cost_basis_in_quote": "27500.00",
"unrealized_in_quote": "3500.00",
"reference_currency": {
"symbol": "USD",
"type": "fiat"
},
"status": {
"avg_entry_price": "ready",
"cost_basis": "ready",
"unrealized": "ready",
"realized": "in_progress"
}
}
},
{
"symbol": "USD",
"type": "fiat",
"index_price_in_quote": "1",
"balances": {
"total": "100000.00",
"total_in_quote": "100000.00",
"main": {
"total": "100000.00",
"total_in_quote": "100000.00"
}
}
}
]
}
}{
"error": {
"causes": [
{
"field": "account_id",
"message": "must be a valid account identifier"
}
],
"status": 400,
"code": "bad_request",
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unauthenticated",
"status": 401,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "forbidden",
"status": 403,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "not_found",
"status": 404,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "resource_exhausted",
"status": 429,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "internal",
"status": 500,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unimplemented",
"status": 501,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "unavailable",
"status": 503,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}{
"error": {
"code": "deadline_exceeded",
"status": 504,
"type": "portfolio_error",
"instance": "5f4d2a8e-91a4-4d6c-8a17-9b1e2c3f4a5b"
}
}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
Account ID
Query Parameters
Quote asset symbol. Defaults to USD.
Required string length:
3 - 16Quote asset classification. Supports fiat and stablecoin.
Available options:
fiat, stablecoin Whether to include assets with zero balances. The default is false; omission is interpreted as false.
Response
Successful response
A unified account portfolio snapshot.
Show child attributes
Show child attributes