curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/accounts/movements \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/accounts/movements"
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/movements', 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/movements",
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/movements"
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/movements")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/accounts/movements")
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{
"movements": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"entryType": "CREDIT",
"transactionType": "DEPOSIT",
"amount": "100.50",
"token": "0x6a86da986797d59a839d136db490292cd560c131",
"balanceBefore": "900.00",
"balanceAfter": "1000.50",
"lockedBefore": "50.00",
"lockedAfter": "75.00",
"referenceId": "ref_123456",
"referenceType": "deposit",
"description": "USDC deposit",
"txHash": "0xabc123...",
"blockNumber": "18500000",
"createdAt": "2023-11-13T10:30:00Z",
"symbol": "USDC",
"decimals": 6,
"amountRaw": "100500000",
"balanceBeforeRaw": "900000000",
"balanceAfterRaw": "1000500000",
"lockedBeforeRaw": "50000000",
"lockedAfterRaw": "75000000",
"assetId": "123e4567-e89b-12d3-a456-426614174000",
"userId": "123e4567-e89b-12d3-a456-426614174000",
"balanceId": "123e4567-e89b-12d3-a456-426614174000"
}
],
"total": 150,
"pageSize": 20,
"totalPages": 8,
"nextPageToken": "<string>",
"totalCapped": false
}Get user movements
Get user movements.
Get the current user’s ledger movements (transaction history) with pagination and filtering support.
curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/accounts/movements \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/accounts/movements"
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/movements', 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/movements",
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/movements"
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/movements")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/accounts/movements")
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{
"movements": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"entryType": "CREDIT",
"transactionType": "DEPOSIT",
"amount": "100.50",
"token": "0x6a86da986797d59a839d136db490292cd560c131",
"balanceBefore": "900.00",
"balanceAfter": "1000.50",
"lockedBefore": "50.00",
"lockedAfter": "75.00",
"referenceId": "ref_123456",
"referenceType": "deposit",
"description": "USDC deposit",
"txHash": "0xabc123...",
"blockNumber": "18500000",
"createdAt": "2023-11-13T10:30:00Z",
"symbol": "USDC",
"decimals": 6,
"amountRaw": "100500000",
"balanceBeforeRaw": "900000000",
"balanceAfterRaw": "1000500000",
"lockedBeforeRaw": "50000000",
"lockedAfterRaw": "75000000",
"assetId": "123e4567-e89b-12d3-a456-426614174000",
"userId": "123e4567-e89b-12d3-a456-426614174000",
"balanceId": "123e4567-e89b-12d3-a456-426614174000"
}
],
"total": 150,
"pageSize": 20,
"totalPages": 8,
"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
Items per page (max 1000)
1 <= x <= 1000Transaction type
DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD, CHAIN_SYNC 1Ledger entry type
CREDIT, DEBIT, LOCK, UNLOCK, FEE 1Asset identifier (UUID)
1Sort direction for createdAt
ASC, DESC 1Pagination cursor with two states:
- Omitted or empty string (""): start a cursor walk with no prior
position, from the newest row (or the oldest, when
orderByis ASC). - Non-empty: an opaque cursor from a previous response's
nextPageToken; results resume immediately after that position.
Every walk covers the ledger and funding arms merged. total and
totalPages are populated — bounded by the server count ceiling, see
totalCapped. Filters and orderBy must match the request that produced
the token, or the request is rejected 400.
Response
OK
Show child attributes
Show child attributes
Number of movements matching the filter, bounded by the server ceiling — a lower bound when totalCapped is true.
150
Items per page
20
Number of pages at this pageSize, bounded by the server ceiling — a lower bound when totalCapped is true.
8
Cursor for the next page, minted from the last row of an over-fetched
page. Each arm of the union is cut at the same over-fetched depth and the
outer query orders the merged rows, so a page shorter than pageSize
means both arms are exhausted and this is empty — a non-empty token always
has at least one further row behind it.
True when more than the server ceiling of movements matched, so the count stopped at the ceiling and total/totalPages are a lower bound. False when total is exact, including exactly the ceiling.
false
Was this page helpful?

