Leaderboard
Returns a ranked list of employees based on their referral and recommendation activity. Use this to build custom leaderboards, reward programs, or internal dashboards.
Scope required: leaderboard:read
GET /api/v1/leaderboardQuery Parameters
Section titled “Query Parameters”| Parameter | Type | Default | Range | Description |
|---|---|---|---|---|
period | number | 365 | 1–3650 | Days to look back |
limit | number | 10 | 1–50 | Top N employees (used with groupBy=month) |
page | number | 1 | 1+ | Page number |
pageSize | number | 10 | 1–50 | Entries per page |
vacancyIds | string | - | - | Comma-separated vacancy IDs to filter by |
groupBy | string | - | month | Group results by month |
Points System
Section titled “Points System”Points are calculated based on employee actions:
| Action | Points |
|---|---|
Referral (employee_refer) | 3 |
Recommendation (employee_recommend) | 1 |
Employees are ranked by total points in descending order.
Example Request
Section titled “Example Request”curl -H "Authorization: Bearer wintro_abc123..." \ "https://app.wintro.ai/api/v1/leaderboard?period=90&pageSize=5"Response (flat)
Section titled “Response (flat)”When no groupBy parameter is set, returns a flat ranked list:
{ "data": [ { "userId": 123, "firstName": "Jane", "lastName": "Doe", "profileUrl": "https://linkedin.com/in/jane-doe", "profilePicture": "https://...", "referCount": 5, "recommendCount": 12, "totalPoints": 27 } ], "meta": { "periodDays": 90, "generatedAt": "2026-03-16T12:00:00.000Z", "pagination": { "page": 1, "pageSize": 5, "totalItems": 42, "totalPages": 9 } }}Response (monthly)
Section titled “Response (monthly)”When groupBy=month is set, returns leaderboards grouped by month plus an overall top 3:
curl -H "Authorization: Bearer wintro_abc123..." \ "https://app.wintro.ai/api/v1/leaderboard?period=365&groupBy=month&limit=5"{ "data": { "monthly": [ { "month": "2026-03", "entries": [ { "userId": 123, "firstName": "Jane", "lastName": "Doe", "profileUrl": "https://linkedin.com/in/jane-doe", "profilePicture": "https://...", "referCount": 2, "recommendCount": 5, "totalPoints": 11 } ] } ], "topOverall": [ { "userId": 456, "firstName": "John", "lastName": "Smith", "profileUrl": "https://linkedin.com/in/john-smith", "profilePicture": "https://...", "referCount": 8, "recommendCount": 20, "totalPoints": 44 } ] }, "meta": { "periodDays": 365, "limit": 5, "groupBy": "month", "generatedAt": "2026-03-16T12:00:00.000Z", "pagination": { "page": 1, "pageSize": 10, "totalItems": 12, "totalPages": 2 } }}When using groupBy=month:
monthly— One entry per month, each containing the toplimitemployees for that month. Pagination applies to months.topOverall— The top 3 employees across the entire period (always included, not paginated).limit— Controls how many employees appear per month (not used in flat mode).
Entry Fields
Section titled “Entry Fields”| Field | Type | Description |
|---|---|---|
userId | number | Wintro user ID |
firstName | string | null | Employee’s first name |
lastName | string | null | Employee’s last name |
profileUrl | string | null | LinkedIn profile URL |
profilePicture | string | null | Profile picture URL |
referCount | number | Number of referrals in the period |
recommendCount | number | Number of recommendations in the period |
totalPoints | number | Calculated score (referrals x 3 + recommendations x 1) |