Get user account transfers
curl --request GET \
--url https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfersconst options = {method: 'GET'};
fetch('https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfers"
response = requests.get(url)
print(response.text)Data Source REST methods
Get user account transfers
Paginated deposits, withdrawals and internal transfers with accounting-basis USDC values.
GET
/
api
/
v1
/
users
/
{userId}
/
account-transfers
Get user account transfers
curl --request GET \
--url https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfersconst options = {method: 'GET'};
fetch('https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.testnet.kuru.io/api/v1/users/{userId}/account-transfers"
response = requests.get(url)
print(response.text)string
required
Unsigned 64-bit account ID as a decimal string. Only this account’s transfers are returned.
string
Optional token address.
string
Optional: deposit, withdrawal, internal_transfer.
integer
Inclusive Unix-second start.
integer
Inclusive Unix-second end. Must exceed from when both are supplied.
integer
default:"100"
Page size, 1–500.
string
Opaque next-page cursor. Keep all filters and limit unchanged.
Response
{
"feedEpoch": "0",
"data": [{
"eventKind": "internal_transfer",
"direction": "out",
"tokenAddress": "0x1111111111111111111111111111111111111111",
"symbol": "USDC",
"decimals": 6,
"amountRaw": "10000000",
"valueUsdcX18": "10000000000000000000",
"fromUserId": "14",
"toUserId": "24",
"payerAddress": null,
"recipientAddress": null,
"executorAddress": "0x2222222222222222222222222222222222222222",
"emitterAddress": "0x3333333333333333333333333333333333333333",
"transactionHash": "0x53495e519fd932eaf46bcf8179ddca0ebe00a8098585d6614e70de32756deb56",
"transactionIndex": 1,
"logIndex": 3,
"recordIdx": 0,
"blockNumber": "71481467",
"blockTimestamp": 1792136919
}],
"pagination": {"nextCursor": null}
}
| Field | Meaning |
|---|---|
feedEpoch | Indexed epoch as string, null before initialization. Not a replay cursor. |
eventKind | Original transfer kind, one of the three request-filter values. |
direction | in (incoming) or out (outgoing) relative to the requested user. |
tokenAddress, symbol, decimals | Token identity and metadata; symbol/decimals can be null if unavailable. |
amountRaw | Nonnegative transfer amount as an exact integer string in token atoms. |
valueUsdcX18 | Nonnegative accounting-basis USDC value × 10¹⁸, exact integer string, or null if unavailable. |
fromUserId, toUserId | Source/destination account IDs as strings; null when absent. |
payerAddress, recipientAddress, executorAddress | Event-supplied wallet addresses; null when absent. |
emitterAddress | Contract that emitted the transfer event. |
transactionHash | Source transaction hash. |
transactionIndex, logIndex, recordIdx | Numeric source indices; recordIdx identifies a decoded record within a log. |
blockNumber | Block height as decimal string. |
blockTimestamp | Block timestamp in Unix seconds. |
pagination.nextCursor | Next-page token, or null at the end. |
floor(amount_raw × basis_price_x18 / 10^token_decimals).
The designated first market quotes USDC. Internal-transfer sender and recipient
can have different accounting bases and therefore different values for the same
transfer. This is not its historical market value or realized PnL.
USDC is valued directly at $1, even without a PnL row. Zero basis returns
"0"; missing PnL/metadata returns null, without hiding the transfer.
Unknown users or empty history return data: [] and a null nextCursor.
Invalid parameters return 400; POST returns 405. Existing endpoint shapes are unchanged.
curl --get 'https://api.testnet.kuru.io/api/v1/users/14/account-transfers' \
--data-urlencode 'eventKind=internal_transfer' \
--data-urlencode 'limit=100'