Skip to content

Profile

GET /api/public/:username/profile

Returns core profile fields and high-level counts used by widgets and profile cards.

ParamTypeRequiredDescription
usernamestringyesInteris username to resolve

None.

{
"username": "your_username",
"displayUsername": "Your Username",
"name": "Your Name",
"image": null,
"avatarUrl": null,
"bio": "Public bio",
"location": "Istanbul",
"favoriteGenres": ["Drama", "Thriller"],
"themeId": "null-log",
"createdAt": "2026-01-01T12:00:00.000Z",
"stats": {
"entryCount": 120,
"reviewCount": 42,
"filmCount": 95,
"listCount": 8,
"followerCount": 15,
"followingCount": 21
}
}
  • Timestamps are serialized as ISO datetime strings.
  • favoriteGenres is an array (falls back to [] when missing).
  • listCount is sourced from the user stats aggregate (not only public lists).

No array-style empty state. For existing users, this endpoint returns an object.

  • 404 when username does not exist.
  • 429 when the public rate limit is exceeded.
  • 500 for unexpected server errors.
const username = 'your_username';
const res = await fetch(`https://api.interis.gorkemkaryol.dev/api/public/${username}/profile`);
if (!res.ok) throw new Error(`Profile request failed: ${res.status}`);
const profile = await res.json();
console.log(profile.displayUsername ?? profile.username);
Terminal window
curl "https://api.interis.gorkemkaryol.dev/api/public/your_username/profile"

Practical: render a compact profile header

Section titled “Practical: render a compact profile header”
function toProfileHeader(profile) {
return {
title: profile.displayUsername ?? profile.username,
subtitle: `${profile.stats.reviewCount} reviews · ${profile.stats.entryCount} logs`,
themeId: profile.themeId,
};
}

Next: Top 4 endpoint