---
title: "Plan a position"
method: GET
path: "/lp/plan"
tags: ["Liquidity"]
---

# Plan a position

`GET /lp/plan`

## Request

- Base URL: `https://api.getchord.xyz/v1`
- URL: `https://api.getchord.xyz/v1/lp/plan`
- Auth: none declared

Range bands for a token from its own volatility (tight / balanced / wide, with the share of the last seven days each range would have stayed inside) and each profile backtested on Chord's candles against holding — fees, impermanent loss, exits, time in range. Needs at least 24 hourly candles and an anchored pool (`404 NOT_ENOUGH_HISTORY` otherwise). `young: true` means under two days of candles — the bands are a launch's noise.

## Query parameters

- `chain` 5042 | 4663 | 143, required
- `token` string, required: EVM address, hex, case-insensitive.
- `amountUsd` number
- `days` integer
- `pool` string: A pool: a 20-byte contract address (V2 / V3) or a 32-byte Uniswap V4 pool id.

## Response `200`

- object
  - `chain` integer
  - `token` string: EVM address, hex, case-insensitive.
  - `amountUsd` number
  - `days` integer
  - `bands` object
    - `priceUsd` number
    - `hourlyVolPct` number
    - `dailyVolPct` number
    - `candles` integer
    - `young` boolean
    - `profiles` object[]
      - `profile` 'tight' | 'balanced' | 'wide'
      - `horizonHours` integer
      - `lower` number
      - `upper` number
      - `widthPct` number
      - `last7dInsidePct` number
    - `histogram` object[]: Where the price spent its hours.
      - `lo` number
      - `hi` number
      - `hours` integer
  - `sims` object[]
    - `profile` string
    - `lower` number
    - `upper` number
    - `sim` SimResult: One range, backtested on Chord's own candles and the pool's real fee tier.
      - `pool` string: A pool: a 20-byte contract address (V2 / V3) or a 32-byte Uniswap V4 pool id.
      - `dex` string
      - `feeBps` number, nullable
      - `tvlUsd` number, nullable
      - `days` integer
      - `hours` integer: Candles replayed.
      - `hoursInRange` integer
      - `inRangePct` number
      - `exits` integer: Times the price left the range.
      - `lower` number
      - `upper` number
      - `unreliable` string, nullable: Why the number should not be trusted, when it should not.
      - `entryPrice` number
      - `exitPrice` number
      - `priceChangePct` number
      - `feesUsd` number
      - `lpValueEndUsd` number
      - `holdValueEndUsd` number
      - `ilUsd` number: Impermanent loss (negative = loss).
      - `netVsHoldUsd` number
      - `totalReturnUsd` number
      - `totalReturnPct` number
      - `feeAprPct` number
      - `capitalEfficiency` number: Versus full range.
      - `shareOfPoolPct` number
      - `shareModel` 'liquidity' | 'bins' | 'tvl': What that share was measured against: the pool's in-range liquidity at its price now (V3 / V4 / Raydium CLMM), its active bin (Meteora DLMM), or its TVL counted as if spread over every price when the pool's depth could not be read (narrow ranges then read high).
      - `note` string
  - `updatedAt` integer: Unix time, milliseconds — when the server built this answer.

## Other responses

- `400`: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
- `404`: Nothing at this identity (`NOT_FOUND`, `UNKNOWN_TOKEN`, `NO_ROUTE`).

---

[API](https://skmtc.dev/getchord/apis/chord-api.md) · [All operations](https://skmtc.dev/getchord/apis/chord-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getchord/apis/chord-api/revisions/d3bc4640fea0?raw)
