PlatformPublish
The PlatformPublish entity represents a publishing configuration for a specific platform, with custom metadata and status tracking.
Overview
Fields
| Field | Type | Description |
|---|---|---|
platform | enum | Target platform |
publishType | enum | Type of publish |
status | enum | Current status |
title | varchar | Platform-specific title |
description | text | Platform-specific description |
thumbnailUrl | url | Platform-specific thumbnail |
tags | text | Comma-separated tags |
visibility | enum | Public, Private, Unlisted |
scheduledAt | datetime | When to publish |
streamUrl | url | RTMP stream URL (livestreams) |
streamKey | varchar | Stream key |
platformId | varchar | ID from platform after publishing |
platformUrl | url | URL from platform |
dependsOnPlatform | varchar | Cascade dependency |
apiResponse | text | Raw API response/error |
Supported Platforms
| Platform | Livestream | Upload | Description |
|---|---|---|---|
| Rumble | ✅ | ✅ | Primary video platform |
| YouTube | ✅ | — | Google's platform |
| Boxcast | ✅ | ✅ | Enterprise streaming |
| Brighteon | ✅ | ✅ | Alternative platform |
| Odysee | ✅ | ✅ | Blockchain-based |
| Banned.Video | — | ✅ | Infowars network |
| Bitchute | — | ✅ | Alternative platform |
| Transistor | — | ✅ | Podcast hosting |
| Substack | — | ✅ | Newsletter platform |
| Restream | ✅ | — | Multi-streaming |
| ✅ | — | Social live |
Publish Types
| Type | Description | Example |
|---|---|---|
| Livestream | Real-time broadcast | Live show |
| Upload | Pre-recorded content | Episode upload |
| Podcast | Audio content | Transistor episode |
| Newsletter | Written content | Substack post |
| Simulcast | Secondary stream | Restream output |
Status Workflow
| Status | Description | Next Action |
|---|---|---|
| Pending | Created, not yet queued | Configure settings |
| Queued | Ready for processing | Bridge will pick up |
| Publishing | Currently processing | Wait for completion |
| Published | Successfully published | Complete |
| Failed | Error occurred | Check apiResponse, retry |
Dependency Cascading
Some platforms depend on others for RTMP credentials:
Configuration
Set dependsOnPlatform to the platform name this record depends on:
{
"platform": "Boxcast",
"publishType": "Livestream",
"dependsOnPlatform": "Rumble",
"status": "Pending"
}When Rumble publishes successfully:
- Bridge detects Boxcast depends on Rumble
- Copies
streamUrlandstreamKeyto Boxcast - Automatically sets Boxcast status to "Queued"
- Boxcast processing begins
X Server Endpoints
Each platform maps to an X Server endpoint:
| Platform | Livestream Endpoint | Upload Endpoint |
|---|---|---|
| Rumble | /rumble-create | /rumble-episode |
| YouTube | /youtube-create | — |
| Boxcast | /boxcast-livestream | /boxcast-media-upload |
| Brighteon | /brighteon-create | /brighteon-upload |
| Odysee | /odysee-create | /odysee-upload |
| Banned.Video | — | /banned-create |
| Bitchute | — | /bitchute-create |
| Transistor | — | /transistor-upload |
| Substack | — | /substack-create |
| Restream | /restream-create | — |
/facebook-create | — |
API Examples
Create PlatformPublish
POST /api/v1/PlatformPublish
Content-Type: application/json
{
"contentProductionId": "content-id-here",
"platform": "Rumble",
"publishType": "Livestream",
"title": "Live: Episode 42",
"description": "Join us for an exciting discussion...",
"visibility": "Public",
"scheduledAt": "2026-02-10T14:00:00.000Z"
}Queue for Publishing
PUT /api/v1/PlatformPublish/{id}
Content-Type: application/json
{
"status": "Queued"
}Check Status
GET /api/v1/PlatformPublish/{id}Response when published:
{
"id": "pp-123",
"platform": "Rumble",
"status": "Published",
"platformUrl": "https://rumble.com/v1234-episode-42.html",
"platformId": "v1234",
"streamUrl": "rtmp://live.rumble.com/live",
"streamKey": "abc123xyz"
}Best Practices
Use Platform-Specific Metadata
Each platform has different character limits and preferences. Customize titles and descriptions per platform.
Set Up Dependencies
For livestreams, configure Rumble first, then set other platforms to depend on it for RTMP credentials.
Check Failed Status
When status is "Failed", check the apiResponse field for error details from the X Server.
Retry Logic
To retry a failed publish, simply set status back to "Queued".
Related
- ContentProduction — Parent content
- Publishing Workflow — Full publishing flow
- Bridge API — Webhook handling
- X Server — Platform automation