---
title: "Get rebalancer configuration"
method: GET
path: "/v1/config/{walletAddress}"
tags: ["User Configuration"]
---

# Get rebalancer configuration

`GET /v1/config/{walletAddress}`

Retrieves the current rebalancing configuration state for a specific wallet address across all supported tokens.

This endpoint returns configurations for each supported token, including:
- **Rebalancer Address**: The smart contract address of the user's rebalancer
- **Rebalancing Manager Address**: The address of the rebalancing manager contract
- **Configurations**: List of configuration items, one per supported token, each containing:
  - Token information
  - Domain IDs, Protocol IDs, and Pool contracts
  - **hasSignedConfig**: Boolean flag indicating the configuration state for this specific token

**Understanding hasSignedConfig (per token):**
- `true`: The user has signed and set their own custom configuration for this token
- `false`: The user has not signed any configuration for this token yet, and the returned values represent the default configuration

When `hasSignedConfig` is false for a token, the configuration data shows what the default state allows, but it hasn't been actively set by the user for that token. This state must be signed by user to confirm the configuration. Each token can have a different `hasSignedConfig` status.

**Note:** Requires a valid API key to query configurations.

**Rate limiting**: 1 request per 3 seconds per client IP. Excess requests receive HTTP `429` with `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers (see `RateLimitExceeded` response).

## Path parameters

- `walletAddress` string, required

## Response `200`

Configuration retrieved successfully

- GetConfigResponse
  - `walletAddress` string, required — User's wallet address
  - `rebalancerAddress` string, required — Deployed rebalancer contract address
  - `rebalancingManagerAddress` string, required — RebalancingManager contract address
  - `rebalancerExists` boolean, required — Whether a rebalancer contract has been deployed for this wallet
  - `configurations` Configuration[], required
    - `token` string, required — Token symbol
    - `domainIds` integer[], required — Domain IDs for configuration - match index values of protocolIds and poolAddresses
    - `protocolIds` integer[], required — Protocol IDs (0=Aave, 1=Morpho, 2=Euler) - match index values of domainIds and poolAddresses
    - `poolAddresses` string[], required — Pool contract addresses - match index values of domainIds and protocolIds
    - `includeRewardsApy` boolean, required — Whether rewards are included in APY
    - `totalGasFee` string, required — Total gas fees accumulated
    - `totalDeposits` string, required — Total deposits
    - `totalWithdrawals` string, required — Total withdrawals
    - `lastRebalanceTimestamp` string, nullable — Last rebalance timestamp
    - `rebalanceFrequency` integer, required — Rebalance frequency in days
    - `requiredTvl` string, required — *(Recommended)* Minimum TVL (in USD) a pool must have before the rebalancer will route funds into it. It is recommended to set this to avoid routing funds into low-liquidity pools. Pass `"0"` only to explicitly disable this filter. Example: `"5000000"` = $5M minimum TVL.
    - `requiredLiquidityMultiplier` string, required — *(Recommended)* Minimum ratio of pool liquidity to the user's position size. It is recommended to set this as a safety guard against thin markets. Pass `"0"` only to explicitly disable this filter. Example: `"10"` = pool must hold at least 10× the user's position in available liquidity.
    - `spendingCapRaw` string, nullable — Spending cap in raw units
    - `spendingCapFormatted` string, nullable — Spending cap formatted
    - `hasSignedConfig` boolean, required — Indicates whether the user has signed a custom configuration for this specific token on this rebalancer. - true: User has signed and set custom configuration - false: Using default configuration values (not signed by user)

## Other responses

- `400` — Validation error
- `401` — No authorization header provided
- `429` — Too many requests for this endpoint. Limits are enforced per client IP for the public API routes backed by `RebalancerResource` (and related resources using the same filter). Response headers (when throttled): - `Retry-After`: seconds to wait before retrying (matches the rate-limit window duration for that endpoint). - `X-RateLimit-Limit`: maximum requests allowed in the window (e.g. `1`). - `X-RateLimit-Remaining`: remaining requests in the window (`0` when throttled). - `X-RateLimit-Reset`: Unix timestamp (seconds) when the limit window resets. `internalCode` in the JSON body is `THROTTLE_PER_IP` for IP-scoped limits (other values may apply for different scopes in the backend).
- `500` — Internal server error

---

[API](https://skmtc.net/metalend/apis/metalend-rebalancing-api.md) · [All operations](https://skmtc.net/metalend/apis/metalend-rebalancing-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/metalend/metalend-rebalancing-api/versions/1b9900a9e91e/schema)
