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

# Get account summary

> Returns user balance (available + locked) and current positions.



## OpenAPI

````yaml /_generated/openapi.yaml get /v1/account
openapi: 3.1.0
info:
  title: Joyride Exchange REST API
  version: 1.0.0
  description: >
    REST API for the Joyride 0DTE Options Exchange.


    ## Authentication


    **Public endpoints** (`/health`, `/v1/market/*`, `/v1/spot/*`,
    `/v1/oracle/*`) require no authentication.


    **Competition prize claims** (`/v1/competition/claim`) are
    self-authenticated

    by a Solana ed25519 signature over the wallet, Discord handle, and payout

    destination in the request body. No JWT is required for that endpoint.


    **Account endpoints** (`/v1/account/*`, `/v1/orders/*`,
    `/v1/social/profile`, `/v1/social/avatar`) require JWT authentication via
    one of:

    1. `Authorization: Bearer <jwt>` header (primary — native clients)

    2. `Cookie: joyride_session=<jwt>` (web clients, set automatically by
    `/v1/auth/verify`)


    **Withdrawal endpoints** (`/withdrawals`, `/v1/withdrawals`) require the

    `Authorization: Bearer <jwt>` header. A session cookie alone is not
    accepted.


    Obtain a JWT by completing the SIWS (Sign In With Solana) flow:

    1. `POST /v1/auth/nonce` with your wallet address to get a nonce

    2. Sign the canonical SIWS message with your wallet

    3. `POST /v1/auth/verify` with wallet, signature, and message to receive a
    JWT


    **Mutating admin endpoints** require a bearer token:

    ```

    Authorization: Bearer <ADMIN_TOKEN>

    ```


    ## Data Conventions


    - **Prices**: Integer values in USDC micros (1 USDC = 1,000,000 micros).
      Example: `1500000` = $1.50
    - **Sizes**: Integer values in millicontracts (1 contract = 1000
    millicontracts).
      Example: `1000` = 1 contract
    - **Balances**: USDC micros. Example: `10_000_000_000` = $10,000

    - **Timestamps**: Unix microseconds (µs since epoch)

    - **Instrument IDs**: Format `{ASSET}_USDC-{DMMMYY}-{STRIKE}-{C|P}`.
      Example: `SOL_USDC-28FEB26-150-C`

    ## Trading


    **Trading is WebSocket-only.** The HTTP API has no order placement
    endpoints.

    See the AsyncAPI spec for WebSocket trading methods.
  contact:
    name: Joyride Engineering
    email: engineering@joyride.exchange
  license:
    name: Proprietary
servers:
  - url: https://joyride.exchange/api
    description: Production
security: []
tags:
  - name: Authentication
    description: |
      SIWS (Sign In With Solana) authentication flow. Obtain a JWT for use
      with all authenticated endpoints. No prior authentication required.
  - name: Health
    description: Service health check.
  - name: Market Data
    description: Publicly accessible market data. No authentication required.
  - name: Account
    description: User-specific account data. Requires user identification.
  - name: Orders
    description: User order history. Requires user identification.
  - name: Withdrawals
    description: Request signed withdrawal authorizations and list withdrawal history.
  - name: Social
    description: Social features — profiles, leaderboard, and activity.
  - name: Referrals
    description: Referral-code validation and attribution surfaces.
  - name: Competition
    description: Competition-specific collection flows.
  - name: Spot
    description: Spot prices and volatility data.
  - name: Oracle
    description: Oracle data — prices, TWAP previews, and settlement timing.
  - name: AI Chat
    description: >
      AI-powered trading assistant. Uses SIWS (Sign In With Solana)
      authentication

      and JWT sessions. Returns responses as Server-Sent Events (SSE).
  - name: Admin
    description: Administrative operations. Requires admin bearer token.
paths:
  /v1/account:
    get:
      tags:
        - Account
      summary: Get account summary
      description: Returns user balance (available + locked) and current positions.
      operationId: getAccount
      parameters:
        - $ref: '#/components/parameters/WalletHeader'
        - $ref: '#/components/parameters/DeviceIdHeader'
        - $ref: '#/components/parameters/WalletQuery'
      responses:
        '200':
          description: Account summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '400':
          $ref: '#/components/responses/BadRequest'
components:
  parameters:
    WalletHeader:
      name: x-wallet
      in: header
      description: Wallet address — primary user identification method
      schema:
        type: string
    DeviceIdHeader:
      name: x-device-id
      in: header
      description: Device identifier — mobile fallback when `x-wallet` is not set
      schema:
        type: string
    WalletQuery:
      name: wallet
      in: query
      description: >-
        Wallet address — fallback if neither `x-wallet` nor `x-device-id`
        headers are set
      schema:
        type: string
  schemas:
    Account:
      type: object
      properties:
        wallet:
          type: string
          example: GmQozSzrtMjXt5F1Bed8Vrt55zCbiga8vDZr47RX9wC8
        available:
          type: integer
          description: Available balance in USDC micros
          example: 9500000000
        locked:
          type: integer
          description: Locked balance reserved for resting bid orders (USDC micros)
          example: 500000000
        deficit:
          type: integer
          description: >-
            Outstanding settlement shortfall tracked on the account (USDC
            micros).
          example: 25000000
        total_pnl:
          type: integer
          description: >-
            Total P&L derived from balance: (available + locked) -
            initial_balance (USDC micros).
          example: 250000000
        return_pct:
          type: number
          format: double
          description: 'Percentage return: total_pnl / initial_balance * 100.'
          example: 2.5
        positions:
          type: array
          items:
            $ref: '#/components/schemas/Position'
        price_decimals:
          type: integer
          description: Decimals applied to balance/PnL/margin fields (always 6).
          example: 6
        quote_asset:
          type: string
          description: Quote asset of the cash balance (always "USDC").
          example: USDC
      required:
        - wallet
        - available
        - locked
        - deficit
        - total_pnl
        - return_pct
        - positions
        - price_decimals
        - quote_asset
    Position:
      type: object
      properties:
        instrument_id:
          type: string
          example: SOL_USDC-28FEB26-150-C
        quantity:
          type: integer
          description: Net position in millicontracts (positive = long, negative = short)
          example: 1000
        avg_price:
          type: integer
          description: Volume-weighted average entry price (USDC micros)
          example: 1500000
        price_decimals:
          type: integer
          description: Decimals applied to `avg_price` (always 6).
          example: 6
        size_decimals:
          type: integer
          description: Decimals applied to `quantity` (always 3).
          example: 3
        contract_size:
          type: integer
          description: >-
            Underlying units per contract — currently 1 for all listed
            instruments. Always read this from the response, never hard-code:
            future contracts may ship with a different multiplier. `0` indicates
            the instrument has rolled off and is no longer in the live engine.
          example: 1
      required:
        - instrument_id
        - quantity
        - avg_price
        - price_decimals
        - size_decimals
        - contract_size
    Error:
      type: object
      properties:
        error:
          type: string
          description: >-
            Human-readable error message (auth failures may include an `auth_*`
            code prefix)
          example: Instrument not found
      required:
        - error
  responses:
    BadRequest:
      description: Bad request — missing or invalid parameters
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

````