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

# Strategy asset exposure

> Retrieve live asset exposure and protocol-specific position details.

export const ApiResponse = ({children, errors = {}}) => {
  const [status, setStatus] = useState("200");
  const statuses = ["200", ...Object.keys(errors)];
  return <section className="api-response" aria-label="Response">
      <div className="api-response-header not-prose">
        <h2>Response</h2>
        <div className="api-response-format">
          {statuses.length > 1 ? <select aria-label="Response status" value={status} onChange={event => setStatus(event.target.value)}>
              {statuses.map(code => <option key={code} value={code}>{code}</option>)}
            </select> : <span>200</span>}
          <span className="api-response-mime">application/json</span>
        </div>
      </div>
      <div hidden={status !== "200"}>{children}</div>
      {status !== "200" && <div aria-live="polite">
          {Object.entries(errors[status]).map(([name, value]) => <ResponseField key={name} name={name} type={value === null ? "null" : Array.isArray(value) ? "array" : typeof value}>
              {name === "error" ? "Error message describing why the request failed." : "Additional error details."}
            </ResponseField>)}
        </div>}
    </section>;
};

## Path parameters

<ParamField path="address" type="string" required>
  Solana account address.
</ParamField>

<RequestExample dropdown>
  ```bash cURL theme={null}
  curl https://api.exponent.finance/strategies/managed/puiRBGikahXM4C7weFtNRFcs7bSUx8wVn1m5v6RA91o/assets-exposure
  ```

  ```python Python theme={null}
  import requests

  response = requests.get("https://api.exponent.finance/strategies/managed/puiRBGikahXM4C7weFtNRFcs7bSUx8wVn1m5v6RA91o/assets-exposure", timeout=30)
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.exponent.finance/strategies/managed/puiRBGikahXM4C7weFtNRFcs7bSUx8wVn1m5v6RA91o/assets-exposure");
  if (!response.ok) {
    throw new Error(`Request failed: ${response.status}`);
  }
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ApiResponse errors={{"500": {"error": "<message>"}}}>
  <ResponseField name="protocol" type="object">
    Protocol through which the vault holds this exposure.

    <Expandable title="child attributes">
      <ResponseField name="name" type="string">
        Display name of the protocol.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="asset" type="object">
    Token identity and display metadata for the exposure.

    <Expandable title="child attributes">
      <ResponseField name="mint" type="string">
        Solana mint identifying this asset.
      </ResponseField>

      <ResponseField name="underlyingMint" type="string">
        Underlying asset mint used to resolve wrapped and yield-bearing tokens.
      </ResponseField>

      <ResponseField name="name" type="string">
        Human-readable token name.
      </ResponseField>

      <ResponseField name="ticker" type="string">
        Token symbol used for display.
      </ResponseField>

      <ResponseField name="decimals" type="number">
        Decimal places used to convert raw token quantities to token units.
      </ResponseField>

      <ResponseField name="exponentMaturityUnix" type="number">
        Maturity of an Exponent token in Unix seconds, when applicable.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="aum" type="number">
    Exposure value in human-readable quote-token units.
  </ResponseField>

  <ResponseField name="allocation" type="number">
    Fraction of total vault value represented by this exposure; `0.25` means 25%.
  </ResponseField>

  <ResponseField name="positionKind" type="string">
    Position classification, when supplied, used to identify the applicable protocol-specific breakdown.
  </ResponseField>

  <ResponseField name="clmmPositionExposure" type="object">
    CLMM position identity and APY bounds, when this item represents a CLMM position.

    <Expandable title="child attributes">
      <ResponseField name="clmmMarket" type="string">
        CLMM market account address.
      </ResponseField>

      <ResponseField name="positionAddress" type="string">
        LP position account address.
      </ResponseField>

      <ResponseField name="lowerTickIdx" type="number">
        Lower tick bounding the position.
      </ResponseField>

      <ResponseField name="upperTickIdx" type="number">
        Upper tick bounding the position.
      </ResponseField>

      <ResponseField name="lowerTickApyPercent" type="number | null">
        Lower APY bound in percent; `6` means 6%.
      </ResponseField>

      <ResponseField name="upperTickApyPercent" type="number | null">
        Upper APY bound in percent; `6` means 6%.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="kaminoObligationExposure" type="object[]">
    Underlying supply and borrow legs for a Kamino lending position.

    <Expandable title="child attributes">
      <ResponseField name="asset" type="object">
        Token metadata with the same shape as `asset` above.
      </ResponseField>

      <ResponseField name="aum" type="number">
        Value of this leg in quote-token units.
      </ResponseField>

      <ResponseField name="side" type="string">
        Whether the leg supplies or borrows the asset.
      </ResponseField>

      <ResponseField name="sourceAddress" type="string">
        Source account used to resolve this leg.
      </ResponseField>

      <ResponseField name="positionAddress" type="string">
        Lending position account address.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="loopscaleLoanExposure" type="object[]">
    Underlying loan legs, each with `asset`, `aum`, `side`, and `sourceAddress`.
  </ResponseField>

  <ResponseField name="kaminoVaultExposure" type="object">
    Kamino vault identity, share mint, principal mint, and optional farm/user accounts.
  </ResponseField>

  <ResponseField name="loopscaleVaultStakeExposure" type="object">
    Loopscale vault and staking account identities, with the vault display name.
  </ResponseField>

  <ResponseField name="orcaWhirlpoolPositionExposure" type="object">
    Whirlpool and position accounts, token A/B mints, tick bounds, and token exposure legs.
  </ResponseField>

  <ResponseField name="standardYieldApyMatch" type="object">
    Source account, supply/borrow side, and asset mint used to match this exposure to an underlying yield rate.
  </ResponseField>
</ApiResponse>

<ResponseExample>
  ```json 200 theme={null}
  [
    {
      "protocol": {
        "name": "Instant Liquidity"
      },
      "asset": {
        "mint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp",
        "name": "Raiku Staked SOL",
        "ticker": "rkuSOL",
        "decimals": 9,
        "underlyingMint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp"
      },
      "aum": 1876.824126538,
      "allocation": 0.050000945302452304,
      "standardYieldApyMatch": {
        "sourceAddress": "84nsuBADtkK8jwBrPFMiVVDm7PxN7Ytducf1Um7vxkYS",
        "side": "supply",
        "assetMint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp"
      }
    },
    {
      "protocol": {
        "name": "Non-allocated Liquidity"
      },
      "asset": {
        "mint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp",
        "name": "Raiku Staked SOL",
        "ticker": "rkuSOL",
        "decimals": 9,
        "underlyingMint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp"
      },
      "aum": 21605.943112899,
      "allocation": 0.5756093842360811,
      "standardYieldApyMatch": {
        "sourceAddress": "84nsuBADtkK8jwBrPFMiVVDm7PxN7Ytducf1Um7vxkYS",
        "side": "supply",
        "assetMint": "rkubjTrZYioRSeXwDnhwGQzvW3qkcin72JSxUt3WMVp"
      }
    }
  ]
  ```

  ```json 500 theme={null}
  {
    "error": "<message>"
  }
  ```
</ResponseExample>


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