> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kuru.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get user account transfers

> Paginated deposits, withdrawals and internal transfers with accounting-basis USDC values.

<ParamField path="userId" type="string" required>Unsigned 64-bit account ID as a decimal string. Only this account's transfers are returned.</ParamField>
<ParamField query="tokenAddress" type="string">Optional token address.</ParamField>
<ParamField query="eventKind" type="string">Optional: deposit, withdrawal, internal\_transfer.</ParamField>
<ParamField query="from" type="integer">Inclusive Unix-second start.</ParamField>
<ParamField query="to" type="integer">Inclusive Unix-second end. Must exceed from when both are supplied.</ParamField>
<ParamField query="limit" type="integer" default="100">Page size, 1–500.</ParamField>
<ParamField query="cursor" type="string">Opaque next-page cursor. Keep all filters and limit unchanged.</ParamField>

Newest first by block timestamp, block number, transaction index, log index,
record index and transaction hash. Pagination freezes the indexed block cutoff
from the first page. Expired, mismatched or invalid cursors return 400; restart
from the first page. There is no Exchange Gateway replay sequence for this history.

## Response

```json theme={null}
{
  "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. |

Non-USDC valuation uses the requested user's matching transfer PnL row:
`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.

```bash theme={null}
curl --get 'https://api.testnet.kuru.io/api/v1/users/14/account-transfers' \
  --data-urlencode 'eventKind=internal_transfer' \
  --data-urlencode 'limit=100'
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.