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

# List a wallet's staking positions

> Returns newest-first onchain positions. Pass the opaque
`blockNumber:logIndex` cursor back unchanged.




## OpenAPI

````yaml /api-reference/retardmarket_openapi.yml get /positions/{wallet}
openapi: 3.0.3
info:
  title: retard.market API
  version: 12.27.0
  description: |
    Attested Robinhood Chain reads for the experimental memecoin launch,
    trading, and staking protocol behind `/retard`. Each market is built around
    a fixed-supply creator memecoin paired with native ETH in a Uniswap v4 pool.
    The API exposes runtime identity, markets, quotes, activity, wallet holdings
    and positions, and funded creator-tip proofs.

    This protocol is experimental. Contracts, economics, API responses, and
    availability may change, and funds may be lost. Verify the runtime contract
    graph and simulate every wallet transaction immediately before signing. Use
    is subject to the VibeChain Terms of Service at
    https://vibechain.com/terms.

    Every endpoint requires a caller-specific VibeChain API key in the
    `API-KEY` header. Create one at
    https://docs.vibechain.com/api-reference/retardmarket-intro.
servers:
  - url: https://build.vibechain.com/api/retard/v1227
security:
  - ApiKeyAuth: []
tags:
  - name: Runtime
    description: Attested deployment identity and readiness
  - name: Markets
    description: Creator markets, quotes, schedules, and bounded activity
  - name: Wallets
    description: Wallet positions, holdings, and activity
  - name: Tips
    description: Safe-funded creator-tip root proofs
  - name: Airdrop
    description: Status of the deliberately parked airdrop feature
paths:
  /positions/{wallet}:
    get:
      tags:
        - Wallets
      summary: List a wallet's staking positions
      description: |
        Returns newest-first onchain positions. Pass the opaque
        `blockNumber:logIndex` cursor back unchanged.
      operationId: listRetardPositions
      parameters:
        - $ref: '#/components/parameters/Wallet'
        - $ref: '#/components/parameters/OpaqueCursor'
        - $ref: '#/components/parameters/PositionLimit'
      responses:
        '200':
          description: One block-pinned position page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PositionPage'
        '400':
          $ref: '#/components/responses/InvalidInput'
        '429':
          $ref: '#/components/responses/ApiKeyOrRateLimit'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
components:
  parameters:
    Wallet:
      in: path
      name: wallet
      required: true
      description: EVM wallet address
      schema:
        $ref: '#/components/schemas/Address'
    OpaqueCursor:
      in: query
      name: cursor
      required: false
      description: Opaque `blockNumber:logIndex` cursor returned by the previous page
      schema:
        type: string
        pattern: ^[0-9]{1,20}:[0-9]{1,10}$
    PositionLimit:
      in: query
      name: limit
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 50
        default: 50
  schemas:
    PositionPage:
      type: object
      required:
        - items
        - nextCursor
        - projectedBlock
        - updatedAt
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Position'
        nextCursor:
          type: string
          pattern: ^[0-9]{1,20}:[0-9]{1,10}$
          nullable: true
        projectedBlock:
          type: integer
          minimum: 0
        updatedAt:
          $ref: '#/components/schemas/DateTime'
    Address:
      type: string
      pattern: ^0x[0-9a-fA-F]{40}$
      example: '0x41B13C429675015d32377305D03222CbddB20cA0'
    Position:
      type: object
      required:
        - positionId
        - marketId
        - owner
        - startedAt
        - maturityTime
        - termDays
        - exited
        - burnedPrincipal
        - baseRewardShares
        - boostRewardShares
        - rewardShares
        - supportCredit
        - earnedTips
        - lifetimeTipsRealized
        - mature
      properties:
        positionId:
          $ref: '#/components/schemas/IntegerString'
        marketId:
          type: integer
          minimum: 0
        owner:
          $ref: '#/components/schemas/Address'
        startedAt:
          $ref: '#/components/schemas/DateTime'
        maturityTime:
          $ref: '#/components/schemas/DateTime'
        termDays:
          type: integer
          minimum: 1
          maximum: 365
        exited:
          type: boolean
        burnedPrincipal:
          $ref: '#/components/schemas/IntegerString'
        baseRewardShares:
          $ref: '#/components/schemas/IntegerString'
        boostRewardShares:
          $ref: '#/components/schemas/IntegerString'
        rewardShares:
          $ref: '#/components/schemas/IntegerString'
        supportCredit:
          $ref: '#/components/schemas/IntegerString'
        earnedTips:
          $ref: '#/components/schemas/IntegerString'
        lifetimeTipsRealized:
          $ref: '#/components/schemas/IntegerString'
        mature:
          type: boolean
    DateTime:
      type: string
      format: date-time
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
    ApiKeyError:
      allOf:
        - $ref: '#/components/schemas/Error'
        - type: object
          required:
            - docs
          properties:
            error:
              type: string
              enum:
                - API_KEY_REQUIRED_OR_RATE_LIMITED
            docs:
              type: string
              format: uri
    IntegerString:
      type: string
      pattern: ^[0-9]+$
      description: Unsigned integer encoded as a decimal string
  responses:
    InvalidInput:
      description: Invalid wallet, market, cursor, limit, side, or amount
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ApiKeyOrRateLimit:
      description: API key missing/invalid or the caller allowance is exhausted
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds until the current rate window resets
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiKeyError'
    InternalError:
      description: The pinned chain read or simulation could not be completed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unavailable:
      description: Configuration, reader, or proof registry is unavailable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: API-KEY
      description: Caller-specific VibeChain API key created through `/apikey/create`.

````