Channels API
Public read for any creator's channel — profile, counts, live status, public tier roster, social links, and storefront URLs. Anonymous calls are allowed; sending a Bearer pk_… key as the channel owner unlocks a few owner-only fields.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /channel/:username | Public channel profile |
| GET | /channel/:username/playlists | Creator's public playlists (paginated) |
| GET | /channel/:username/videos | Creator's public videos (paginated) |
GET /channel/:username
GET https://api.dcast.pro/api/v1/channel/{username}
# Optional — owner-of-key gets extras (email, plan, storageUsedBytes):
Authorization: Bearer YOUR_API_KEYResponse
{
"success": true,
"data": {
"username": "pamela",
"displayName": "Pamela",
"avatarUrl": "https://api.dcast.pro/avatars/cmitc...jpg",
"bio": "Yoga teacher and storyteller.",
"tagline": "Movement is medicine.",
"subscribersCount": 1284,
"totalVideosCount": 56,
"totalLiveStreamsCount": 12,
"isLive": true,
"currentLiveStreamId": "cmpi...",
"socials": { "instagram": "...", "youtube": "...", "x": "..." },
"tiers": [
{
"id": "...",
"name": "Free follow",
"description": "...",
"position": 0,
"isMostPopular": false,
"trialDays": 0,
"benefits": [],
"price": 0,
"priceAnnual": null,
"currency": "USD",
"interval": "month"
}
],
"subdomain": "pamela",
"subdomainUrl": "https://pamela.dcast.tv",
"customDomain": "https://pamela.example.com",
"createdAt": "2025-12-01T10:00:00.000Z"
}
}Owner-only extras — when the authenticated pk_ key belongs to this channel, the response additionally includes:
{
"email": "[email protected]",
"plan": "PRO" | "FREE" | …,
"storageUsedBytes": 12345678
}Status discipline
- 404 NOT_FOUND — unknown username and banned creator return the same body. No existence leak.
- 400 BAD_REQUEST —
usernameempty. - 500 INTERNAL_ERROR — anything else; details only in server logs.
Rate limit & caching
60 requests / minute per IP. The response carries Cache-Control: public, max-age=60; CDN edges may serve cached profile data for up to a minute, which is fine for storefront and discovery pages.
Display fields are resolved the same way the storefront does:
displayName=siteSettings.creator.displayName→user.displayName→user.name→usernamebio=siteSettings.about.bio→user.biotagline=siteSettings.creator.tagline→user.tagline
Tiers
The tiers array is the public roster (active tiers only, ordered by position). Stripe IDs are never exposed via this endpoint — to create checkout sessions for a paid tier, use POST /checkout/subscription. Free-tier follows can be added directly via POST /subscribers.
GET /channel/:username/videos
Public list of visibility=PUBLIC videos for the named creator. No auth required. Returns viewer-safe rows only — never hlsPath, processingResults, storagePath, or owner-only metadata. Banned-creator + unknown-username return identical 404 NOT_FOUND (no existence leak).
curl -s "https://api.dcast.pro/api/v1/channel/{username}/videos?page=1&limit=20"
# Response
{
"success": true,
"data": {
"videos": [
{
"id": "cmpm…",
"title": "8 MIN PAM'S MORNING ROUTINE",
"description": "QiGong, deep breathing…",
"visibility": "PUBLIC",
"duration": 509,
"resolution": "1920x1080",
"fileSize": 104857600,
"status": "READY",
"thumbnails": { "default": "https://api.dcast.pro/api/videos/cmpm…/thumbnail" },
"playback": { "hls": "https://…/master.m3u8", "embed": "https://dcast.tv/embed/cmpm…" },
"viewCount": 41,
"publishedAt": "2026-05-25T20:30:00.000Z",
"createdAt": "2026-05-25T20:18:18.944Z",
"updatedAt": "2026-05-25T20:30:00.000Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 56, "pages": 3 }
}
}Pagination: page 1-indexed, limit 1–100 (default 20). Sorted newest-first by publishedAt. Rate limit: 60 req / min / IP. playback is null until the video has HLS. Paid-access fields are not in this list; read them per video with GET /videos/:id.
GET /channel/:username/playlists
Public list of isPublic=true playlists for the named creator. Same rules as /videos above: no auth, 60/min/IP, identical 404 envelope for unknown / banned.
curl -s "https://api.dcast.pro/api/v1/channel/{username}/playlists?page=1&limit=20"
# Response (item-count surfaced; full items via GET /playlists/:id)
{
"success": true,
"data": {
"playlists": [
{
"id": "cmpl…",
"title": "Yoga essentials",
"description": "Morning + evening flows",
"isPublic": true,
"itemCount": 12,
"createdAt": "2026-05-25T10:00:00.000Z",
"updatedAt": "2026-05-27T18:42:11.000Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 7, "pages": 1 }
}
}See Playlists API for the full read shape (with items) at GET /playlists/:id.
Related Documentation
Platform-wide discovery (search, trending, feed) has been withdrawn — see Discovery API. For tier checkout and subscriber CRUD see Monetization API.
