curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/accounts/funding-payments \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/accounts/funding-payments"
headers = {"X-Monaco-Signature": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Monaco-Signature': '<api-key>'}};
fetch('https://staging.apimonaco.xyz/api/v1/accounts/funding-payments', 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://staging.apimonaco.xyz/api/v1/accounts/funding-payments",
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-Monaco-Signature: <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://staging.apimonaco.xyz/api/v1/accounts/funding-payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Monaco-Signature", "<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://staging.apimonaco.xyz/api/v1/accounts/funding-payments")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/accounts/funding-payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Monaco-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"positionId": "123e4567-e89b-12d3-a456-426614174000",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"tradingPairId": "123e4567-e89b-12d3-a456-426614174000",
"fundingRate": "0.0015",
"positionSize": "2",
"paymentAmount": "150",
"direction": "PAID",
"periodStart": "2026-04-07T10:00:00Z",
"periodEnd": "2026-04-07T11:00:00Z",
"createdAt": "2026-04-07T11:00:00Z"
}
],
"total": 2,
"pageSize": 20,
"totalPages": 1,
"nextPageToken": "<string>",
"totalCapped": false
}List funding payments
List funding payment history.
Get the current user’s private funding payment history with pagination and optional filters by market, margin account, and position.
curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/accounts/funding-payments \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/accounts/funding-payments"
headers = {"X-Monaco-Signature": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Monaco-Signature': '<api-key>'}};
fetch('https://staging.apimonaco.xyz/api/v1/accounts/funding-payments', 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://staging.apimonaco.xyz/api/v1/accounts/funding-payments",
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-Monaco-Signature: <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://staging.apimonaco.xyz/api/v1/accounts/funding-payments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Monaco-Signature", "<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://staging.apimonaco.xyz/api/v1/accounts/funding-payments")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/accounts/funding-payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Monaco-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"records": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"positionId": "123e4567-e89b-12d3-a456-426614174000",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"tradingPairId": "123e4567-e89b-12d3-a456-426614174000",
"fundingRate": "0.0015",
"positionSize": "2",
"paymentAmount": "150",
"direction": "PAID",
"periodStart": "2026-04-07T10:00:00Z",
"periodEnd": "2026-04-07T11:00:00Z",
"createdAt": "2026-04-07T11:00:00Z"
}
],
"total": 2,
"pageSize": 20,
"totalPages": 1,
"nextPageToken": "<string>",
"totalCapped": false
}Authorizations
Ed25519 session-key request signing. Every authenticated request carries three headers: X-Monaco-PublicKey (64-char lowercase-hex session public key), X-Monaco-Timestamp (Unix milliseconds, within 30s of server time), and X-Monaco-Signature (hex ed25519 signature). The signature is over METHOD\npath?query\ntimestamp_ms\nSHA256_hex(body), where the body hash is the SHA-256 of the empty byte string when there is no body. Obtain the session keypair from POST /api/v1/auth/challenge followed by POST /api/v1/auth/verify.
Query Parameters
Trading pair identifier (UUID)
1Items per page (max 1000)
1 <= x <= 1000Pagination cursor with two states:
- Omitted or empty string (""): start a cursor walk with no prior position, from the newest payment.
- Non-empty: an opaque cursor from a previous response's
nextPageToken; results resume immediately after that position.
The walk seeks on (created_at, id) descending. Not period_end, which
the removed page-number mode led its sort with: that column is nullable
and the risk engine leaves it unset when a payment carries no window,
while created_at is always stamped (it falls back to the settlement
instant). The id tie-break is new — the removed order had none, so a
page boundary inside one funding window could already repeat or drop a
payment.
total and totalPages are populated — bounded by the server count
ceiling, see totalCapped. Filters must match the request that produced
the token, or the request is rejected 400.
Response
OK
Show child attributes
Show child attributes
Number of funding payments matching the filter, bounded by the server ceiling — a lower bound when totalCapped is true.
2
Items per page
20
Number of pages at this pageSize, bounded by the server ceiling — a lower bound when totalCapped is true.
1
Cursor for the next page, minted from the last row of an over-fetched
page: this listing is one ordered read, so a page shorter than
pageSize proves the walk is exhausted and this is empty.
True when more than the server ceiling of payments matched, so the count stopped at the ceiling and total/totalPages are a lower bound.
false
Was this page helpful?

