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

# Get user position in a specific vault

> Returns the current position snapshot for a wallet in a single vault. Historical points live on `/positions/{vault_id}/timeseries`.



## OpenAPI

````yaml GET /v1/users/{wallet_address}/positions/{vault_id}
openapi: 3.1.0
info:
  title: Gauntlet API
  description: Gauntlet vault data and user positions API.
  contact:
    name: Gauntlet
    url: https://gauntlet.xyz
  license:
    name: ''
  version: 1.0.0
servers:
  - url: https://api.gauntlet.xyz
    description: Production
security: []
tags:
  - name: System
    description: Health checks and Prometheus metrics
  - name: Vaults
    description: Vault listings, details, metrics, timeseries
  - name: Users
    description: Per-wallet position state and timeseries
paths:
  /v1/users/{wallet_address}/positions/{vault_id}:
    get:
      tags:
        - Users
      summary: Get user position in a specific vault
      description: >-
        Returns the current position snapshot for a wallet in a single vault.
        Historical points live on `/positions/{vault_id}/timeseries`.
      operationId: get_user_vault_position
      parameters:
        - name: wallet_address
          in: path
          description: Ethereum wallet address
          required: true
          schema:
            type: string
        - name: vault_id
          in: path
          description: Vault identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Single vault position
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserPositionLatestResponse'
        '401':
          description: Missing or invalid auth
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Position not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    UserPositionLatestResponse:
      type: object
      required:
        - meta
        - data
      properties:
        data:
          $ref: '#/components/schemas/UserPosition'
        meta:
          $ref: '#/components/schemas/BasicMeta'
    ErrorResponse:
      type: object
      description: Standard error response envelope returned on 4xx/5xx
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/ErrorBody'
    UserPosition:
      type: object
      required:
        - vault_id
        - wallet_address
        - metrics
      properties:
        metrics:
          $ref: '#/components/schemas/UserPositionMetrics'
        vault_id:
          type: string
        wallet_address:
          type: string
    BasicMeta:
      type: object
      required:
        - request_id
        - refreshed_at
      properties:
        refreshed_at:
          type: string
          format: date-time
        request_id:
          type: string
    ErrorBody:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Machine-readable error code (e.g. `NOT_FOUND`, `UNAUTHORIZED`)
        details: {}
        message:
          type: string
          description: Human-readable error message
    UserPositionMetrics:
      type: object
      required:
        - pending_deposit_assets
        - shares_owned
        - pending_redeem_shares
        - value
        - cost_basis
        - unrealized_pnl
        - realized_pnl
        - total_pnl
        - roi_pct
      properties:
        cost_basis:
          $ref: '#/components/schemas/AmountPair'
          description: Cumulative cost of currently-held shares.
        pending_deposit_assets:
          type: string
          description: Assets escrowed at the Aera Provisioner pending share mint.
        pending_redeem_shares:
          type: string
          description: Shares escrowed at the Aera Provisioner pending asset return.
        realized_pnl:
          $ref: '#/components/schemas/AmountPair'
          description: Locked-in PnL from past disposals.
        roi_pct:
          $ref: '#/components/schemas/RatioPair'
          description: |-
            `total_pnl` / `cost_basis` (small ratio). For non-stable deposit
            tokens, the `usd` ratio can differ from the `native` ratio.
        shares_owned:
          type: string
          description: Shares currently held by the wallet.
        total_pnl:
          $ref: '#/components/schemas/AmountPair'
          description: '`unrealized_pnl` + `realized_pnl`.'
        unrealized_pnl:
          $ref: '#/components/schemas/AmountPair'
          description: '`value` − `cost_basis`.'
        value:
          $ref: '#/components/schemas/AmountPair'
          description: |-
            Current market value of held shares (`native` = numeraire-token
            units, `usd` = `native` × current USD price).
    AmountPair:
      type: object
      description: >-
        Decimal-string metric paired across native (numeraire-token) and USD.

        `native` is always present; `usd` is JSON null when pricing is
        unavailable.
      required:
        - native
      properties:
        native:
          type: string
        usd:
          type:
            - string
            - 'null'
    RatioPair:
      type: object
      description: JSON-number ratio paired across native (in-kind) and USD denominations.
      required:
        - native
      properties:
        native:
          type: number
          format: double
        usd:
          type:
            - number
            - 'null'
          format: double

````