> ## 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 fee tier

> Read active root-account fee-tier rates, or exchange defaults when missing or inactive.

Returns rates from the latest indexed `AccountFeeTierUpdated` assignment when
active, otherwise exchange defaults. Subaccounts inherit the root account's tier. No query parameters or request
body are accepted.

**userId** `string` *required*

Unsigned 64-bit Kuru account ID as a decimal string.

**feedEpoch** `string | null` *required*

Materialization feed epoch, or `null` before initialization. `"0"` is a valid
initial epoch, not a missing-data sentinel. This is not a replay sequence.

**data.userId** `string` *required*

Requested account ID.

**data.rootUserId** `string | null` *required*

Registered root account ID. Null for an unknown or incompletely registered account.

**data.accountFeeTier** `object` *required*

Latest indexed assignment's rates when active. When absent or inactive, returns
exchange defaults: maker 1 BPS (`"1000"` PPS), taker 2 BPS (`"2000"` PPS).
A later inactive assignment supersedes any earlier active assignment.

**data.accountFeeTier.makerFeePps** `string` *required*

Assigned integer maker rate in protocol PPS units, with denominator
`10,000,000`. For example, `"4000"` represents 0.04%. Not a token or x18 amount.

**data.accountFeeTier.takerFeePps** `string` *required*

Assigned integer taker rate in the same PPS units. `"7000"` represents 0.07%.

These are **assigned account rates, not effective trading fees**. The endpoint
does not calculate market caps, referral discounts, or builder fees. Fixed exchange
defaults apply when the latest assignment is missing or inactive. The `active`
boolean is no longer returned. Active assignments with zero rates retain those zero rates.

Illustrative response (not a claim that this account has these rates):

```json 200 theme={null}
{
  "feedEpoch": "0",
  "data": {
    "userId": "4",
    "rootUserId": "2",
    "accountFeeTier": {
      "makerFeePps": "4000",
      "takerFeePps": "7000"
    }
  }
}
```

An unknown user returns HTTP 200 with `rootUserId` set to `null` and the default
`accountFeeTier`. Invalid IDs or unknown query parameters return 400. Unsupported
methods, including POST, return 405.


## OpenAPI

````yaml api/data-source/openapi.yaml GET /api/v1/users/{userId}/fee-tier
openapi: 3.1.0
info:
  title: Kuru Data Source API
  version: 1.0.0
servers:
  - url: https://api.mainnet.kuru.io
    description: Monad mainnet (default)
  - url: https://api.testnet.kuru.io
    description: Monad testnet
security: []
paths:
  /api/v1/users/{userId}/fee-tier:
    get:
      summary: Get user fee tier
      operationId: getUserFeeTier
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Fee tier

````

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