Profile & identity
The authenticated user's own profile: identity, avatar, and username.
/api/community/mecommunity:readGet the authenticated user's id, username, name, and avatar URL.
Response
{ id, username, name: string | null, avatarUrl: string | null }avatarUrl (when set) is /api/images/avatar/<key>?v=<updatedAt ms> — the query param is a cache-buster, not part of the key.
/api/community/profilecommunity:writeUpdate your profile: name, tagline, job, tags, and social links.
Request
{ name, tagline?, jobTitle?, company?, tags?: string[], githubUrl?, twitterUrl?, linkedinUrl?, websiteUrl? }Response
{ name, tagline, jobTitle, company, tags, githubUrl, twitterUrl, linkedinUrl, websiteUrl }name required, 1-100 chars. tagline ≤140, jobTitle ≤80, company ≤80. Up to 10 tags (1-24 chars, alnum/underscore/hyphen). githubUrl/linkedinUrl must be https and match their platform's domain; twitterUrl accepts twitter.com or x.com (or a subdomain of either); websiteUrl just needs to be https.
/api/community/profile/avatarcommunity:writeUpload a new avatar image.
Request
multipart/form-data, field 'avatar': PNG/JPEG/WebP, max 2 MBResponse
{ avatarKey, updatedAt }Stored at a fixed per-user key (avatars/<userId>) — re-uploading overwrites the previous image.
/api/community/usernamecommunity:writeSet or change your username (required once, during onboarding).
Request
{ username: string }Response
{ username }3-24 chars, letters/numbers/underscore/hyphen; must be unique — a taken username is a 400, not a 409 (see /docs/errors).