> ## Documentation Index
> Fetch the complete documentation index at: https://start.hitorino.tv/llms.txt
> Use this file to discover all available pages before exploring further.

# Hitorino Users API — Retrieve Public Creator Profiles

> Fetch public Hitorino creator profiles by user ID. Access display names, avatars, bios, follower counts, and social links for any creator on the platform.

The Users API lets you retrieve the public profile of any creator on Hitorino. You can use this endpoint to display creator information alongside their streams or videos in your integration — showing an avatar, bio, and follower count without redirecting users to Hitorino's website. This endpoint returns only publicly available information; private account details such as email addresses or billing information are never exposed.

***

## Get User

Returns the public profile of the creator with the specified user ID.

```bash theme={null}
GET /users/{id}
```

### Path Parameters

<ParamField path="id" type="string" required>
  The unique user ID of the creator (e.g., `usr_01HABC5678`). You can obtain a creator's `id` from the `creator_id` field on any stream or video object.
</ParamField>

### Request Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.hitorino.tv/v1/users/usr_01HABC5678 \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const userId = 'usr_01HABC5678';

  const response = await fetch(`https://api.hitorino.tv/v1/users/${userId}`, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
  });

  if (!response.ok) {
    const { error } = await response.json();
    throw new Error(`${error.code}: ${error.message}`);
  }

  const user = await response.json();
  console.log(user.display_name); // "solostudio"
  console.log(user.follower_count); // 12480
  ```

  ```python Python theme={null}
  import requests

  user_id = 'usr_01HABC5678'
  headers = {'Authorization': 'Bearer YOUR_API_KEY'}

  response = requests.get(
      f'https://api.hitorino.tv/v1/users/{user_id}',
      headers=headers,
  )

  if not response.ok:
      error = response.json()['error']
      raise Exception(f"{error['code']}: {error['message']}")

  user = response.json()
  print(user['display_name'])    # "solostudio"
  print(user['follower_count'])  # 12480
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "id": "usr_01HABC5678",
  "username": "solostudio",
  "display_name": "Solo Studio",
  "bio": "Solo developer building in public. TypeScript, Go, and the occasional art stream.",
  "avatar_url": "https://cdn.hitorino.tv/avatars/usr_01HABC5678.jpg",
  "banner_url": "https://cdn.hitorino.tv/banners/usr_01HABC5678.jpg",
  "profile_url": "https://hitorino.tv/solostudio",
  "follower_count": 12480,
  "is_verified": true,
  "categories": ["coding", "art"],
  "social_links": {
    "twitter": "https://twitter.com/solostudio",
    "github": "https://github.com/solostudio",
    "website": "https://solostudio.dev"
  },
  "stream_count": 87,
  "video_count": 63,
  "created_at": "2023-01-14T10:22:00Z"
}
```

### Response Fields

<ResponseField name="id" type="string">
  Unique identifier for the user, prefixed with `usr_`.
</ResponseField>

<ResponseField name="username" type="string">
  The creator's unique lowercase username on Hitorino. Used in the profile URL.
</ResponseField>

<ResponseField name="display_name" type="string">
  The creator's public-facing display name. May differ from `username` and can contain mixed case and spaces.
</ResponseField>

<ResponseField name="bio" type="string">
  Short biography written by the creator. May be `null` if the creator has not set a bio.
</ResponseField>

<ResponseField name="avatar_url" type="string">
  URL of the creator's profile picture. Served from Hitorino's CDN. Always present; falls back to a default avatar if the creator has not uploaded one.
</ResponseField>

<ResponseField name="banner_url" type="string">
  URL of the creator's profile banner image. `null` if no banner has been set.
</ResponseField>

<ResponseField name="profile_url" type="string">
  Full URL to the creator's public profile page on Hitorino.
</ResponseField>

<ResponseField name="follower_count" type="integer">
  Total number of Hitorino users following this creator.
</ResponseField>

<ResponseField name="is_verified" type="boolean">
  `true` if Hitorino has granted this creator a verified badge, indicating authenticity of a notable individual or brand.
</ResponseField>

<ResponseField name="categories" type="array">
  Array of category slugs representing the content types this creator most frequently streams. May be empty.
</ResponseField>

<ResponseField name="social_links" type="object">
  Map of social platform names to their URLs, as configured by the creator. Possible keys include `twitter`, `github`, `instagram`, `youtube`, and `website`. Only keys the creator has filled in are present — absent platforms are not included in the object.
</ResponseField>

<ResponseField name="stream_count" type="integer">
  Total number of streams the creator has ever started on Hitorino, including ended streams.
</ResponseField>

<ResponseField name="video_count" type="integer">
  Total number of on-demand videos published by the creator.
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO 8601 timestamp of when the creator's Hitorino account was created.
</ResponseField>

***

## Usage Pattern: Enriching Stream Data

A common integration pattern is to fetch stream data and then enrich it with creator profile information. The `creator_id` on every stream and video object maps directly to the `id` parameter for this endpoint.

```javascript theme={null}
// Fetch a live stream, then display the creator's profile alongside it
async function getStreamWithCreator(streamId) {
  const baseUrl = 'https://api.hitorino.tv/v1';
  const headers = { 'Authorization': 'Bearer YOUR_API_KEY' };

  // Fetch the stream first, then use its creator_id to fetch the creator profile
  const streamRes = await fetch(`${baseUrl}/streams/${streamId}`, { headers });
  const stream = await streamRes.json();

  const creatorRes = await fetch(`${baseUrl}/users/${stream.creator_id}`, { headers });
  const creator = await creatorRes.json();

  return { stream, creator };
}

const { stream, creator } = await getStreamWithCreator('str_01HXYZ1234');
console.log(`${creator.display_name} is streaming: ${stream.title}`);
// "Solo Studio is streaming: Late Night Lo-Fi Coding"
```

<Note>
  This endpoint returns public profile data only. You cannot update user profiles, retrieve email addresses, or access any private account information via the API.
</Note>
