ADDR=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
curl "https://api.arcus.xyz/v1/accountTransferUpdates?address=${ADDR}&limit=1000"import requests
r = requests.get(
"https://api.arcus.xyz/v1/accountTransferUpdates",
params={
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"limit": 1000,
# "from": 1785801600123456, # optional epoch-µs lower bound
# "to": 1785801699001200, # optional epoch-µs upper bound
},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/accountTransferUpdates");
url.searchParams.set("address", "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb");
url.searchParams.set("limit", "1000");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/accountTransferUpdates', 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.arcus.xyz/v1/accountTransferUpdates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.arcus.xyz/v1/accountTransferUpdates"
req, _ := http.NewRequest("GET", url, nil)
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.arcus.xyz/v1/accountTransferUpdates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/accountTransferUpdates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"accountTransferUpdates": [
{
"type": "DEPOSIT",
"status": "APPLIED",
"id": "dep-abc123",
"amount": "100.00",
"netQuoteBalance": "-35000.00",
"globalSequenceId": 9600000001,
"createdAt": 1712345678000000,
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"accountIndex": 0,
"rejectReason": "<string>",
"spotAssetId": 1,
"spotAssetDisplayName": "<string>",
"rootchainQueueIndex": 1042,
"sourceAccountId": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb_0",
"destinationAccountId": "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF_0"
}
],
"total": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}Get account transfer updates
Returns deposits, withdrawals, and transfers for the requesting account, newest-first.
ADDR=0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
curl "https://api.arcus.xyz/v1/accountTransferUpdates?address=${ADDR}&limit=1000"import requests
r = requests.get(
"https://api.arcus.xyz/v1/accountTransferUpdates",
params={
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"limit": 1000,
# "from": 1785801600123456, # optional epoch-µs lower bound
# "to": 1785801699001200, # optional epoch-µs upper bound
},
)
print(r.json())
const url = new URL("https://api.arcus.xyz/v1/accountTransferUpdates");
url.searchParams.set("address", "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb");
url.searchParams.set("limit", "1000");
const res = await fetch(url);
console.log(await res.json());
const options = {method: 'GET'};
fetch('https://api.arcus.xyz/v1/accountTransferUpdates', 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.arcus.xyz/v1/accountTransferUpdates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.arcus.xyz/v1/accountTransferUpdates"
req, _ := http.NewRequest("GET", url, nil)
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.arcus.xyz/v1/accountTransferUpdates")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arcus.xyz/v1/accountTransferUpdates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"accountTransferUpdates": [
{
"type": "DEPOSIT",
"status": "APPLIED",
"id": "dep-abc123",
"amount": "100.00",
"netQuoteBalance": "-35000.00",
"globalSequenceId": 9600000001,
"createdAt": 1712345678000000,
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
"accountIndex": 0,
"rejectReason": "<string>",
"spotAssetId": 1,
"spotAssetDisplayName": "<string>",
"rootchainQueueIndex": 1042,
"sourceAccountId": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb_0",
"destinationAccountId": "0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF_0"
}
],
"total": 123
}{
"error": "Invalid request body",
"code": "GEO_RESTRICTED"
}{
"error": "rate limited",
"reason": "account_empty",
"retryAfterMs": 850,
"clientId": "my-order-42"
}AccountTransferUpdate object.
The matching engine rejects a withdrawal or transfer before it is persisted when either of the following conditions holds:
- Non-positive amount —
amountmust be strictly greater than zero. - Insufficient free collateral —
amountexceedsaccountEquity − requiredMargin. The engine does not perform partial pulls; the entire request is rejected and account state is left unchanged.
Query Parameters
Master Ethereum address for this API key (must match address from POST /createApiKey for the same key). Required on REST for account-scoped reads and for place/cancel. Invalid hex → 400; mismatch with key → 403.
20-byte EVM address as hex: optional 0x or 0X prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase a–f after 0x.
^(0x|0X)?[0-9a-fA-F]{40}$Start of the time window, filtering on createdAt (epoch microseconds, inclusive) — the same unit and field the response reports, so a createdAt read from one page is a valid bound for the next with no conversion.
Second- and millisecond-scale values are rejected with a 400 (the server requires at least 1e14). A millisecond bound read as microseconds would land in 1970 and quietly return nothing.
When omitted, defaults to 30 days before to (or before now when to is omitted too), so an unbounded request returns at most the last month of updates.
x >= 1000000000000001785801600123456
End of the time window, filtering on createdAt (epoch microseconds, inclusive) — the same unit and field the response reports, so a createdAt read from one page is a valid bound for the next with no conversion.
The bound closes over the whole microsecond it names, so page boundaries overlap by design — deduplicate by id when paging.
Second- and millisecond-scale values are rejected with a 400 (the server requires at least 1e14). A millisecond bound read as microseconds would land in 1970 and quietly return nothing.
x >= 1000000000000001785801699001200
Response
List of account transfer updates (deposits, withdrawals, and transfers), newest-first.
Was this page helpful?