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

# Hidden gems: consistent mid-size winners

> Wallets from the all-time traders table with a trade count in [minTrades, maxTrades], win rate >= minWinRate, total PnL >= minPnl, activity on at least minActiveDays distinct days and on at least minDistinctCoins markets, ranked by total PnL. This is a column filter over all-time aggregates, not a skill model: it cannot see position sizing, leverage, or whether the wins came from a single trend, and win rate counts fills with positive closed PnL, so scalpers and market makers score high. largestLoss is <= 0 and is 0 when the wallet has no losing fill.



## OpenAPI

````yaml /api-reference/openapi.json get /api/public/v1/pulse/hidden-gems
openapi: 3.1.0
info:
  title: coinversa-api
  version: 0.1.0
servers:
  - url: https://api.coinversa.ai
    description: Production
security: []
paths:
  /api/public/v1/pulse/hidden-gems:
    get:
      summary: 'Hidden gems: consistent mid-size winners'
      description: >-
        Wallets from the all-time traders table with a trade count in
        [minTrades, maxTrades], win rate >= minWinRate, total PnL >= minPnl,
        activity on at least minActiveDays distinct days and on at least
        minDistinctCoins markets, ranked by total PnL. This is a column filter
        over all-time aggregates, not a skill model: it cannot see position
        sizing, leverage, or whether the wins came from a single trend, and win
        rate counts fills with positive closed PnL, so scalpers and market
        makers score high. largestLoss is <= 0 and is 0 when the wallet has no
        losing fill.
      operationId: list-api-public-v1-pulse-hidden-gems
      parameters:
        - explode: false
          in: query
          name: minTrades
          schema:
            default: 50
            format: int64
            minimum: 1
            type: integer
        - explode: false
          in: query
          name: maxTrades
          schema:
            default: 500
            format: int64
            minimum: 1
            type: integer
        - explode: false
          in: query
          name: minWinRate
          schema:
            default: 60
            format: int64
            maximum: 100
            minimum: 0
            type: integer
        - explode: false
          in: query
          name: minPnl
          schema:
            default: 10000
            format: double
            type: number
        - description: >-
            Minimum distinct UTC days with at least one fill (all time). Filters
            out one-session wallets.
          explode: false
          in: query
          name: minActiveDays
          schema:
            default: 7
            description: >-
              Minimum distinct UTC days with at least one fill (all time).
              Filters out one-session wallets.
            format: int64
            minimum: 1
            type: integer
        - description: Minimum distinct markets traded (all time).
          explode: false
          in: query
          name: minDistinctCoins
          schema:
            default: 2
            description: Minimum distinct markets traded (all time).
            format: int64
            minimum: 1
            type: integer
        - explode: false
          in: query
          name: limit
          schema:
            default: 20
            format: int32
            maximum: 100
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/HiddenGemRow'
                type:
                  - array
                  - 'null'
          description: OK
          headers:
            X-Billing-Grace-Expires:
              $ref: '#/components/headers/X-Billing-Grace-Expires'
            X-Billing-State:
              $ref: '#/components/headers/X-Billing-State'
            X-RateLimit-Daily:
              $ref: '#/components/headers/X-RateLimit-Daily'
            X-RateLimit-Daily-Reset:
              $ref: '#/components/headers/X-RateLimit-Daily-Reset'
            X-RateLimit-Monthly:
              $ref: '#/components/headers/X-RateLimit-Monthly'
            X-RateLimit-Monthly-Reset:
              $ref: '#/components/headers/X-RateLimit-Monthly-Reset'
            X-RateLimit-Next:
              $ref: '#/components/headers/X-RateLimit-Next'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Route:
              $ref: '#/components/headers/X-RateLimit-Route'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-RateLimit-Tier:
              $ref: '#/components/headers/X-RateLimit-Tier'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Bad Request
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Forbidden
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Unprocessable Entity
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Too Many Requests
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Billing-Grace-Expires:
              $ref: '#/components/headers/X-Billing-Grace-Expires'
            X-Billing-State:
              $ref: '#/components/headers/X-Billing-State'
            X-RateLimit-Daily:
              $ref: '#/components/headers/X-RateLimit-Daily'
            X-RateLimit-Daily-Reset:
              $ref: '#/components/headers/X-RateLimit-Daily-Reset'
            X-RateLimit-Monthly:
              $ref: '#/components/headers/X-RateLimit-Monthly'
            X-RateLimit-Monthly-Reset:
              $ref: '#/components/headers/X-RateLimit-Monthly-Reset'
            X-RateLimit-Next:
              $ref: '#/components/headers/X-RateLimit-Next'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Route:
              $ref: '#/components/headers/X-RateLimit-Route'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-RateLimit-Tier:
              $ref: '#/components/headers/X-RateLimit-Tier'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Internal Server Error
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '504':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Gateway Timeout
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
      security:
        - apiKey: []
components:
  schemas:
    HiddenGemRow:
      additionalProperties: false
      properties:
        activeDays:
          description: Distinct UTC calendar days with at least one fill, all time.
          format: int64
          type: integer
        address:
          description: Wallet address.
          type: string
        distinctCoins:
          description: Distinct markets with at least one fill, all time.
          format: int64
          type: integer
        firstTradeAt:
          description: >-
            RFC3339 time of the wallet's first indexed fill. null on
            day/week/month leaderboards.
          type:
            - string
            - 'null'
        largestLoss:
          description: >-
            Most negative single-fill closed PnL, USD (<= 0; 0 when the wallet
            has no losing fill). null on day/week/month leaderboards.
          format: double
          type:
            - number
            - 'null'
        largestWin:
          description: >-
            Largest single-fill closed PnL, USD. null on day/week/month
            leaderboards.
          format: double
          type:
            - number
            - 'null'
        lastTradeAt:
          description: >-
            RFC3339 time of the wallet's last indexed fill. null on
            day/week/month leaderboards.
          type:
            - string
            - 'null'
        pnlTier:
          description: All-time PnL cohort legacy slug, when available.
          type: string
        pnlTierRecent:
          description: Rolling 30-day PnL cohort legacy slug, when available.
          type: string
        recentPnl:
          description: >-
            Realized PnL over the recent classification window, USD, when
            available.
          format: double
          type: number
        recentVolume:
          description: >-
            Traded notional over the recent classification window, USD, when
            available.
          format: double
          type: number
        recentWindowEnd:
          description: >-
            Classification window end date (YYYY-MM-DD), not request completion
            time.
          type: string
        sizeTier:
          description: All-time size cohort legacy slug, when available.
          type: string
        sizeTierRecent:
          description: Rolling 30-day size cohort legacy slug, when available.
          type: string
        totalFees:
          description: >-
            All-time fees paid, USD. null on day/week/month leaderboards, which
            do not compute it.
          format: double
          type:
            - number
            - 'null'
        totalPnl:
          description: Indexed realized PnL, USD; period follows the endpoint.
          format: double
          type: number
        totalTrades:
          description: Indexed fill count, not reconstructed position count.
          format: int64
          type: integer
        totalVolume:
          description: Indexed traded notional, USD.
          format: double
          type: number
        winRate:
          description: Winning fills divided by total fills, percent (0 to 100).
          format: double
          type: number
        winningTrades:
          description: Indexed fills with positive closed PnL.
          format: int64
          type: integer
      required:
        - activeDays
        - distinctCoins
        - address
        - totalPnl
        - totalTrades
        - winningTrades
        - winRate
        - totalVolume
        - totalFees
        - largestWin
        - largestLoss
        - firstTradeAt
        - lastTradeAt
      type: object
    APIError:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - https://api.coinversa.ai/schemas/APIError.json
          format: uri
          readOnly: true
          type: string
        code:
          description: Machine-readable error code; retained for compatibility.
          type: string
        current_tier:
          description: Caller's effective tier
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        reason:
          description: >-
            More specific recovery reason when available: missing_api_key,
            invalid_api_key, insufficient_tier, or invalid_parameters. HTTP
            statuses and legacy code values remain unchanged.
          type: string
        required_tier:
          description: Minimum tier for this operation
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upgrade_url:
          description: Where to upgrade
          type: string
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
  headers:
    X-Billing-Grace-Expires:
      description: RFC3339 time when billing grace expires, when applicable.
      schema:
        type: string
    X-Billing-State:
      description: Billing grace state, when applicable.
      schema:
        type: string
    X-RateLimit-Daily:
      description: >-
        Daily account allowance reported by the existing counter check, clamped
        at zero. Best-effort; present only for a capped tier that reaches the
        quota check.
      schema:
        type: string
    X-RateLimit-Daily-Reset:
      description: >-
        Unix seconds (UTC) after the selected daily quota bucket expires. Not a
        source-data timestamp.
      schema:
        type: string
    X-RateLimit-Monthly:
      description: >-
        Monthly account allowance reported by the existing counter check,
        clamped at zero. Best-effort; present only for a capped tier that
        reaches the quota check.
      schema:
        type: string
    X-RateLimit-Monthly-Reset:
      description: >-
        Unix seconds (UTC) after the selected monthly quota bucket expires.
        Follows the existing billing anchor.
      schema:
        type: string
    X-RateLimit-Next:
      description: >-
        Legacy Go duration string until the next token is available across the
        checked buckets; not the daily/monthly reset.
      schema:
        type: string
    X-RateLimit-Remaining:
      description: >-
        Minimum remaining tokens across the checked minute and per-route token
        buckets (account for keys, IP for anonymous requests). Not a
        fixed-window request allowance.
      schema:
        type: string
    X-RateLimit-Reset:
      description: >-
        Unix seconds (UTC), rounded up, when the checked token buckets next
        permit a request, assuming no competing traffic. Not a full bucket
        refill.
      schema:
        type: string
    X-RateLimit-Route:
      description: Remaining tokens in the account's per-route token bucket.
      schema:
        type: string
    X-RateLimit-Scope:
      description: >-
        account for authenticated requests (shared across keys); ip for
        anonymous requests. Describes the limiter scope, not the key's resolved
        tier.
      schema:
        type: string
    X-RateLimit-Tier:
      description: Effective tier for this request; only present after access checks pass.
      schema:
        type: string
    X-Request-ID:
      description: >-
        Server-generated correlation ID. Include it in a support report; not a
        guarantee that an unauthenticated request appears in account usage logs.
      schema:
        type: string
    Retry-After:
      description: >-
        On HTTP 429, whole seconds to wait before retrying, rounded up. Other
        traffic may still consume the available allowance.
      schema:
        type: string
  securitySchemes:
    apiKey:
      description: >-
        Create an API key at https://developers.coinversa.ai/keys. REST limits
        are shared across keys by account; access uses the effective tier of the
        presented key.
      in: header
      name: X-API-Key
      type: apiKey

````