---
title: "Get ranking row for a single investor"
method: GET
path: "/api/v2/portfolios/{username}/rankings"
tags: ["Rankings"]
---

# Get ranking row for a single investor

`GET /api/v2/portfolios/{username}/rankings`

## Request

- Base URL: `https://public-api.etoro.com`
- URL: `https://public-api.etoro.com/api/v2/portfolios/{username}/rankings`
- Auth: OAuth 2
  - Authorization code
  - Scopes: `etoro-public:user-info:read`
- TypeScript: <https://skmtc.dev/etoro/apis/etoro-api/docs/api/v2/portfolios/:username/rankings/get.ts> (a function with typed inputs; its response is checked against the schema)

**Rate limit:** 60 requests per 60 seconds. This is the **default shared quota** — it is shared with every other endpoint that has no dedicated limit, so requests across those endpoints all draw from the same budget.

---

Returns the full ranking row for the specified investor for a given time period. Returns 404 if the user is private, not found, or not ranked. `period` is required because every performance field is computed over a defined time window.

## Path parameters

- `username` string, required

## Query parameters

- `period` 'CurrMonth' | 'OneMonthAgo' | 'TwoMonthsAgo' | 'CurrQuarter' | 'ThreeMonthsAgo' | 'SixMonthsAgo' | 'CurrYear' | 'OneYearAgo' | 'LastYear' | 'LastTwoYears', required

## Headers

- `x-request-id` string, uuid, required
- `x-api-key` string, password, required
- `x-user-key` string, password, required

## Response `200`

Successful response

- CustomerRankingResponse
  - `data` RankItem: A single investor ranking row. Identity fields come from PublicAggregatedInfo (GDPR-safe); performance fields come from RankingsAPI and are period-scoped. Nullable identity fields are omitted from the body when their condition is not met.
    - `cid` integer: Public customer ID (Gcid).
    - `username` string
    - `fullName` string, nullable: Display name; omitted when the investor has not opted in to public name display.
    - `avatarUrl` string, nullable: Avatar image URL; omitted when no avatar is set.
    - `type` 'trader' | 'smart-portfolio': Primary portfolio category.
    - `subType` 'pi-cadet' | 'pi-rising-star' | 'pi-champion' | 'pi-elite' | 'pi-elite-pro' | 'pi-certified' | 'top-traders' | 'partners' | 'market', nullable: Detail within the primary type. PI tier slug for traders; fund strategy for smart portfolios.
    - `tags` string[]: Resolved tag names (may mix industry and sector tags).
    - `gain` number: Gain over the requested period as a decimal fraction (0.1234 = 12.34%).
    - `dailyGain` number
    - `thisWeekGain` number
    - `fiveYearGain` number
    - `tenYearGain` number
    - `annualizedReturn` number
    - `riskScore` integer: Current risk score (1-10).
    - `maxDailyRiskScore` integer
    - `maxMonthlyRiskScore` integer
    - `copiers` integer
    - `copiedTrades` integer
    - `copyTradesPct` number
    - `copyInvestmentPct` number
    - `baseLineCopiers` integer
    - `copiersGain` number
    - `aumTier` integer
    - `aumTierDesc` string, nullable
    - `aumValue` number
    - `virtualCopiers` integer
    - `dailyDD` number
    - `weeklyDD` number
    - `profitableWeeksPct` number
    - `profitableMonthsPct` number
    - `peakToValley` number
    - `peakToValleyStart` string, date-time, nullable
    - `peakToValleyEnd` string, date-time, nullable
    - `trades` integer
    - `winRatio` number: Ratio of profitable closed trades (0-1).
    - `velocity` number
    - `exposure` number
    - `avgPosSize` number
    - `optimalCopyPosSize` number
    - `highLeveragePct` number
    - `mediumLeveragePct` number
    - `lowLeveragePct` number
    - `longPosPct` number
    - `topTradedInstrumentId` integer
    - `topTradedAssetClassId` integer
    - `topTradedInstrumentPct` number
    - `totalTradedInstruments` integer
    - `activeWeeks` integer
    - `firstActivity` string, date-time
    - `lastActivity` string, date-time
    - `activeWeeksPct` number
    - `weeksSinceRegistration` integer
    - `country` string, nullable: ISO 3166-1 alpha-2 country code. Null for Smart Portfolios.

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication required
- `404`: User is missing, private, or not ranked (no reason is exposed).
- `429`: Too Many Requests — the shared rate limit (60 requests / 60s) was exceeded.

---

[API](https://skmtc.dev/etoro/apis/etoro-api.md) - [All operations](https://skmtc.dev/etoro/apis/etoro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/etoro/apis/etoro-api/revisions/69c1fb266c35?raw)
