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/menofhungerResponse
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. lastOnlineAtis alwaysnullhere — presence is never exposed publicly.