Partner API base path is /api/v1 on https://api.dcast.pro. This site documents the live surface; use the Quickstart QA curls to validate keys and routes.

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

MethodEndpointDescription
GET/channel/:usernamePublic channel profile
GET/channel/:username/playlistsCreator's public playlists (paginated)
GET/channel/:username/videosCreator'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_KEY

Response

{
  "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 — username empty.
  • 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 → username
  • bio = siteSettings.about.bio → user.bio
  • tagline = 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.

Channels API — dcast.pro API docs