> ## 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 projected user balances

> Read a current proposed, voted, or finalized balance snapshot.

<ParamField path="userId" type="string" required>
  Unsigned decimal Kuru user ID.
</ParamField>

<ParamField query="state" type="string" default="finalized">
  `proposed`, `voted`, or `finalized`. Short forms `p`, `v`, and `f` are also
  accepted.
</ParamField>

<ResponseField name="feedEpoch" type="integer" required>
  Epoch namespace for `globalSeq` and `globalUserSeq`.
</ResponseField>

<ResponseField name="data" type="array" required>
  Up to 2,000 balances in immutable snapshot order.

  <ResponseField name="tokenAddress" type="string" required>
    Lowercase token contract address.
  </ResponseField>

  <ResponseField name="total" type="string" required>
    Checked sum of available and reserved native token units.
  </ResponseField>

  <ResponseField name="available" type="string" required>
    Free native token units.
  </ResponseField>

  <ResponseField name="reserved" type="string" required>
    Reserved native token units.
  </ResponseField>
</ResponseField>

<ResponseField name="state" type="string" required>
  Requested projection view.
</ResponseField>

<ResponseField name="servedView" type="string" required>
  Projection view that served the request.
</ResponseField>

<ResponseField name="globalSeq" type="integer | null" required>
  Global sequence represented by the projection snapshot.
</ResponseField>

<ResponseField name="globalUserSeq" type="integer | null" required>
  User sequence represented by the projection snapshot.
</ResponseField>

<ResponseField name="truncated" type="boolean" required>
  `true` when additional balances were omitted.
</ResponseField>

This gateway route does not accept a `tokenAddress` filter.

<ResponseExample>
  ```json 200 theme={null}
  {
    "feedEpoch": 7,
    "data": [{
      "tokenAddress": "0xb01dc575a7ef75e58a05d2bde73ab79f8e7dd0be",
      "total": "1200250000",
      "available": "1100250000",
      "reserved": "100000000"
    }],
    "state": "finalized",
    "servedView": "finalized",
    "globalSeq": 124367,
    "globalUserSeq": 2951,
    "truncated": false
  }
  ```
</ResponseExample>

For token filtering or a finalized epoch-qualified WebSocket bootstrap, use
the [Data Source user-balances route](/api/data-source/reference/user-balances).


## OpenAPI

````yaml api/exchange/openapi.yaml GET /api/v1/users/{userId}/balances
openapi: 3.1.0
info:
  title: Kuru Exchange Gateway API
  version: 1.0.0
servers:
  - url: https://gateway.mainnet.kuru.io
    description: Monad mainnet (default)
  - url: https://gateway.testnet.kuru.io
    description: Monad testnet
security: []
paths:
  /api/v1/users/{userId}/balances:
    get:
      summary: Get user balances
      operationId: getUserBalances
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
        - name: state
          in: query
          schema:
            type: string
            default: finalized
      responses:
        '200':
          description: Projected balances

````

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