Profiles

Fetch one public profile by username or user ID.

GET https://api.menofhunger.com/v1/public/users/:usernameOrId

Try it

Start typing to search members, or paste a menofhunger.com/u/<username> link. Usernames are case-insensitive.

curl https://api.menofhunger.com/v1/public/users/menofhunger

Response

Trimmed for readability.

{
  "data": {
    "id": "cm4x8ez4mn0000qab3g1r5t8kv",
    "username": "menofhunger",
    "name": "Men of Hunger",
    "bio": "A trusted community for men who want measurable progress.",
    "website": "https://menofhunger.com",
    "createdAt": "2025-03-02T18:44:09.201Z",
    "avatarUrl": "https://menofhunger.com/…",
    "bannerUrl": "https://menofhunger.com/…",
    "verifiedStatus": "identity",
    "premium": true,
    "isOrganization": true,
    "locationDisplay": "Roanoke, VA",
    "postCount": 318,
    "articleCount": 12,
    "checkinStreakDays": 46,
    "longestStreakDays": 91,
    "pinnedPostId": null,
    "lastOnlineAt": null
  }
}

Fields

id / username
string
Either one works as the path parameter.
name / bio / website
string | null
avatarUrl / bannerUrl
string | null
verifiedStatus
"none" | "identity" | "manual"
premium / premiumPlus / isOrganization
boolean
locationDisplay
string | null
Whatever the member chose to show publicly.
postCount / articleCount
number
Published totals. Drafts, deleted items, and private "only me" posts are not counted.
checkinStreakDays / longestStreakDays
number
pinnedPostId
string | null
Feed it back into /public/posts/:id.
createdAt
ISO 8601 string

Two special cases

  • Banned accounts return { "data": { "banned": true } } with a 200.
  • lastOnlineAt is always null here — presence is never exposed publicly.