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

# Position performance

> Get lifetime position performance

```bash theme={null}
curl "https://api.bendbasis.com/v1/positions/POSITION_ID/performance" \
  -H "Authorization: Bearer $BENDBASIS_API_KEY"
```


## OpenAPI

````yaml GET /v1/positions/{position_id}/performance
openapi: 3.1.0
info:
  title: bendbasis API
  description: Funding market and arbitrage data from bendbasis.
  version: 1.0.0-preview
servers:
  - url: https://api.bendbasis.com
security: []
tags:
  - name: Portfolio
    description: Read-only access to your portfolios and positions.
paths:
  /v1/positions/{position_id}/performance:
    get:
      tags:
        - Portfolio
      summary: Position performance
      operationId: getPositionPerformance
      parameters:
        - name: position_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Position performance
          headers:
            X-API-Version:
              schema:
                type: string
              example: v1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PositionPerformanceResponse'
              example:
                data:
                  position_id: de3e7930-4762-4b6d-80f0-13aa8a66ecfa
                  portfolio_id: 2f69612d-3b97-4820-babc-6c482a70fb68
                  status: open
                  funding_pnl: 42.5
                  fees:
                    paid: 8.4
                    estimated_exit: 8.4
                  spread_pnl:
                    realized: 0
                    unrealized: 12.1
                  net_pnl: 37.8
                  duration_days: 12
                  apr: 21.29
                  calculated_at: '2026-09-13T12:00:00.000Z'
        '400':
          $ref: '#/components/responses/ValidationFailed'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/ResourceNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - BearerAuth: []
components:
  schemas:
    PositionPerformanceResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/PositionPerformance'
    PositionPerformance:
      type: object
      additionalProperties: false
      required:
        - position_id
        - portfolio_id
        - status
        - funding_pnl
        - fees
        - spread_pnl
        - net_pnl
        - duration_days
        - apr
        - calculated_at
      properties:
        position_id:
          type: string
          format: uuid
        portfolio_id:
          type: string
          format: uuid
        status:
          $ref: '#/components/schemas/PositionStatus'
        funding_pnl:
          type: number
          description: Funding PnL in USD.
        fees:
          type: object
          additionalProperties: false
          required:
            - paid
            - estimated_exit
          properties:
            paid:
              type: number
              description: Fees already paid in USD.
            estimated_exit:
              type: number
              description: Estimated fee in USD for exiting the active quantity.
        spread_pnl:
          type: object
          additionalProperties: false
          required:
            - realized
            - unrealized
          properties:
            realized:
              type: number
              description: Realized spread PnL in USD.
            unrealized:
              type: number
              description: Estimated spread PnL in USD for the active quantity.
        net_pnl:
          type:
            - number
            - 'null'
          description: >-
            Funding plus realized and estimated spread PnL, minus paid and
            estimated exit fees, in USD. Null when required inputs are
            unavailable.
        duration_days:
          type: number
          description: Position duration in days.
        apr:
          type:
            - number
            - 'null'
          description: Annualized return in percent.
        calculated_at:
          type: string
          format: date-time
          description: Time the values were calculated.
    ValidationError:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          enum:
            - VALIDATION_ERROR
        message:
          type: string
      example:
        code: VALIDATION_ERROR
        message: Invalid parameter
    UnauthorizedError:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          enum:
            - UNAUTHORIZED
        message:
          type: string
      example:
        code: UNAUTHORIZED
        message: Valid API key required
    ForbiddenError:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          enum:
            - FORBIDDEN
        message:
          type: string
      example:
        code: FORBIDDEN
        message: API key does not grant the required scope
    NotFoundError:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          enum:
            - NOT_FOUND
        message:
          type: string
      example:
        code: NOT_FOUND
        message: Funding market not found
    PositionStatus:
      type: string
      enum:
        - open
        - closed
  responses:
    ValidationFailed:
      description: Invalid request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
    Unauthorized:
      description: Missing or invalid API key.
      headers:
        WWW-Authenticate:
          schema:
            type: string
          example: Bearer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnauthorizedError'
    Forbidden:
      description: The API key does not grant the required scope.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ForbiddenError'
    ResourceNotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFoundError'
    RateLimited:
      description: Rate limit exceeded.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: Personal API key created at bendbasis.com/account/api-keys.

````