Skip to content

# 👤 Uploaders

## Overview

The `POST /api/uploaders` endpoint returns profile details for a content creator or studio. The app calls this when a user taps an uploader name to view their profile page.

### Request

`POST /api/uploaders`

At least one of `uploaderId` or `uploaderName` must be provided.

    {
      "uploaderId": "abc123",
      "profileContent": true,
      "query": "kittens"
    }

### Request Parameters

Field | Type | Required | Description
--- | --- | --- | ---
`uploaderId` | `string` | ⚠️ One of | Internal uploader ID
`uploaderName` | `string` | ⚠️ One of | Uploader display name
`query` | `string` | ⚪ | Current search query used to personalize "For You" content ranking

### Response

    {
      "id": "awesomeVids",
      "name": "Awesome Vids",
      "url": "https://www.example.com/@awesomeVids",
      "channel": "my-channel",
      "verified": true,
      "videoCount": 342,
      "totalViews": 14500000,
      "channels": [
        {
          "channel": "my-channel",
          "videoCount": 342,
          "firstSeenAt": "2024-01-15T00:00:00",
          "lastSeenAt": "2025-03-01T00:00:00"
        }
      ],
      "avatar": "https://example.com/avatar.jpg",
      "description": "The best videos on the internet.",
      "bio": "Videos are awesome.",
      "videos": [
        {
          "id": "c85017ca87477168d648727753c4ded8",
          "url": "https://www.example.com/watch?v=y0sF5xhGreA",
          "title": "20 Minutes of Adorable Kittens",
          "duration": 1200,
          "channel": "my-channel",
          "uploadedAt": "2025-01-03T10:15:54.000Z",
          "uploader": "The Pet Collective",
          "uploaderId": "abc123",
          "thumb": "https://i.example.com/vi/y0sF5xhGreA/hqdefault.jpg",
          "preview": null,
          "views": 14622653,
          "rating": 95,
          "aspectRatio": 1.78
        }
      ],
      "tapes": [],
      "playlists": [],
      "layout": [
        { "type": "horizontal", "title": "For You", "videoIds": ["c85017ca87477168d648727753c4ded8"] },
        { "type": "videos", "title": null }
      ]
    }

## Field Reference

### Uploader Object

Field | Type | Description
--- | --- | ---
`id` | `string` | Unique uploader identifier
`name` | `string` | Display name
`url` | `string \| null` | Profile URL
`channel` | `string \| null` | Primary source channel
`verified` | `boolean` | Whether the uploader is verified
`videoCount` | `number` | Total indexed videos
`totalViews` | `number` | Aggregated view count
`channels` | `ChannelStat[] \| null` | Per-channel video stats
`avatar` | `string \| null` | Avatar image URL (canonical)
`description` | `string \| null` | Short description
`bio` | `string \| null` | Long-form biography
`videos` | `VideoRef[] \| null` | Videos — present when `profileContent` is `true`
`tapes` | `any[] \| null` | Short-form content — present when `profileContent` is `true`
`playlists` | `any[] \| null` | Playlists — present when `profileContent` is `true`
`layout` | `LayoutRow[] \| null` | Ordered profile page sections

See JSON key names for camelCase vs snake_case and the legacy `profile_picture_url` avatar key.

### ChannelStat Object

Field | Type | Description
--- | --- | ---
`channel` | `string` | Source channel identifier
`videoCount` | `number` | Videos seen on this channel
`firstSeenAt` | `string \| null` | ISO timestamp of first appearance on this channel
`lastSeenAt` | `string \| null` | ISO timestamp of last appearance on this channel

### VideoRef Object

Field | Type | Description
--- | --- | ---
`id` | `string` | Video identifier
`url` | `string` | Video source URL
`title` | `string` | Video title
`duration` | `number` | Duration in seconds
`channel` | `string` | Source channel identifier
`uploadedAt` | `string \| null` | ISO upload timestamp
`uploader` | `string` | Uploader display name
`uploaderId` | `string` | Uploader identifier
`thumb` | `string` | Thumbnail URL
`preview` | `string \| null` | Preview clip URL
`views` | `number` | View count
`rating` | `number` | Percent rating score
`aspectRatio` | `number \| null` | Aspect ratio (e.g., 1.78 for 16:9)

### LayoutRow Object

Describes the ordered sections rendered on the profile page.

Field | Type | Description
--- | --- | ---
`type` | `string` | `"videos"` (vertical list) or `horizontal` (carousel). Legacy `horizontal_videos` is accepted.
`title` | `string \| null` | Section heading
`videoIds` | `string[]` | Ordered video IDs — only for `horizontal` / legacy `horizontal_videos`. Snake_case `video_ids` is accepted when decoding.

## Error Responses

Status | Condition
--- | ---
`400` | Neither `uploaderId` nor `uploaderName` given
`404` | No uploader matched the provided identifier
`500` | Internal server error

Was this page helpful?
Thanks for your feedback!
Thanks for your feedback! Help us improve this page by