---
title: "Get user profile and stats"
method: GET
path: "/v1/users/{pubkey}"
tags: ["Users"]
---

# Get user profile and stats

`GET /v1/users/{pubkey}`

## Request

- Base URL: `https://api.memestack.ai`
- URL: `https://api.memestack.ai/v1/users/{pubkey}`
- Auth: none declared

## Path parameters

- `pubkey` string, required

## Response `200`

User profile

- object
  - `id` string
  - `pubkey` string
  - `display_name` string
  - `role` string
  - `has_avatar` boolean
  - `upload_count` integer
  - `total_sats_earned` integer
  - `created_at` string, date-time
  - `tier` 'Pleb' | 'Memer' | 'Stacker' | 'Memelord' | 'Admin': Computed upload tier. Frontend renders this as a colored pill on the user profile page.
  - `badges` EarnedBadge[]: Earned milestone badges — the HIGHEST tier held per track, so at most six entries, in catalog order (uploads, sats_earned, supporter, streak, contests, tenure). Always present; an empty array means none earned. Permanent once awarded. Progress toward the next tier is owner-only and lives on GET /v1/me/badges.
    - `badge_key` string, required: `{track}_{tier name}`, e.g. `uploads_silver`. Unique per user.
    - `track` 'uploads' | 'sats_earned' | 'supporter' | 'streak' | 'contests' | 'tenure', required
    - `tier` 1 | 2 | 3, required: 1 bronze, 2 silver, 3 gold.
    - `earned_at` string, date-time, required: When the threshold was crossed. An account merge keeps the EARLIER of two stamps.

## Other responses

- `404`: User not found

---

[API](https://skmtc.dev/memestack/apis/memestack-api.md) · [All operations](https://skmtc.dev/memestack/apis/memestack-api/llms.txt) · [OpenAPI document](https://skmtc.dev/memestack/apis/memestack-api/revisions/9d3a19565f75?raw)
