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.

DHUB bridges

A bridge is DCAST's multi-source, multi-destination broadcast routing element. You attach one or more ingest sources (RTMP push, SRT listener, SRTLA bonded uplink, WHIP, HLS pull, RTSP pull) and one or more egress destinations (RTMP/RTMPS to YouTube / Twitch / Facebook / custom, SRT caller, WHEP, HLS). The bridge handles failover, transcode, and per-destination key rotation.

Partner-API headline subset. Director-mode, WHEP playback URLs, SRTLA modem labels, failover policies, slates and network probe live on the dashboard surface (operator-grade). File a feature request via support if you need API access to any of those.

Bridge lifecycle

# 1. Create a source (the bridge's ingest point).
POST https://api.dcast.pro/api/v1/bridges/sources
{
  "name":     "Stadium hard camera",
  "protocol": "rtmps"             // rtmps | srt_listener | srt_caller | srtla | whip | hls_pull | rtsp_pull
}
# → 201 { data: { id, ingressKey, ... } }
# ingressKey is the per-source authentication token your encoder publishes with.

# 2. Create the bridge, optionally pinning the primary source up front.
POST https://api.dcast.pro/api/v1/bridges
{
  "name":             "World Cup final",
  "primarySourceId":  "<src_id>",
  "reconnectWindowS": 60,
  "ipAllowlistCidrs": ["203.0.113.0/24"]   // optional ingress IP gate
}
# → 201 { data: { id, jwtCurrentKey, primarySource: { ingressKey, ... }, destinations: [] } }

# 3. Add destinations (where the bridge sends).
POST https://api.dcast.pro/api/v1/bridges/{bridgeId}/destinations
{
  "name":            "YouTube primary",
  "protocol":        "rtmps",                       // rtmps | srt_caller | whep | hls_public | custom
  "targetUrl":       "rtmps://a.rtmps.youtube.com/live2/<stream-key>",
  "transcodeProfile": "passthrough",                // "passthrough" or a profile id
  "enabled":         true
}
# Internal/private IPs in targetUrl are rejected — 400 INVALID_URL (SSRF guard).

# 4. Start the bridge.
POST https://api.dcast.pro/api/v1/bridges/{bridgeId}/start

# 5. Stop when finished.
POST https://api.dcast.pro/api/v1/bridges/{bridgeId}/stop

Sources

MethodPathNotes
GEThttps://api.dcast.pro/api/v1/bridges/sourcesList your sources (owner-scoped).
POSThttps://api.dcast.pro/api/v1/bridges/sourcesCreate source. Required: name, protocol. Returns ingressKey.
DELETEhttps://api.dcast.pro/api/v1/bridges/sources/{sourceId}Delete. Not blocked by an attached bridge — that bridge's primarySourceId becomes null.

Bridges

MethodPathNotes
GEThttps://api.dcast.pro/api/v1/bridgesList (newest first).
POSThttps://api.dcast.pro/api/v1/bridgesCreate. jwtCurrentKey is minted for ingress auth.
GEThttps://api.dcast.pro/api/v1/bridges/{id}Read one + last 50 events.
PATCHhttps://api.dcast.pro/api/v1/bridges/{id}Update name / primarySourceId / backupSourceIds / reconnectWindowS / ipAllowlistCidrs.
DELETEhttps://api.dcast.pro/api/v1/bridges/{id}409 BRIDGE_LIVE if status is on_air or starting — stop first.
POSThttps://api.dcast.pro/api/v1/bridges/{id}/startSpin up worker assignment + per-destination ffmpeg.
POSThttps://api.dcast.pro/api/v1/bridges/{id}/stopTear down.

Destinations

MethodPathNotes
GEThttps://api.dcast.pro/api/v1/bridges/{id}/destinationsList destinations on a bridge.
POSThttps://api.dcast.pro/api/v1/bridges/{id}/destinationsAdd. SSRF-guarded.
PATCHhttps://api.dcast.pro/api/v1/bridges/destinations/{destId}Update name / targetUrl / enabled / transcodeProfile / videoCodec / lufsTarget.
DELETEhttps://api.dcast.pro/api/v1/bridges/destinations/{destId}Remove.

Operations

Beyond CRUD + start/stop, partner-API exposes the following operator endpoints:

MethodPathNotes
POSThttps://api.dcast.pro/api/v1/bridges/{id}/rotate-keyMint a new jwtCurrentKey; the old key becomes jwtPreviousKey and stays valid for the publish-grace window.
GEThttps://api.dcast.pro/api/v1/bridges/{id}/eventsPaginated event log (?limit ≤ 200). Type / fromState / toState / reason / createdAt.
PATCHhttps://api.dcast.pro/api/v1/bridges/{id}/tally-endpointsSet the Tally TSL UMD destinations. Body: { tallyEndpoints: [{ url, name }] }. URLs SSRF-guarded.
POSThttps://api.dcast.pro/api/v1/bridges/{id}/return-pgm/startTurn on Phase 5.5d Return-PGM feed (host viewing the published program output).
POSThttps://api.dcast.pro/api/v1/bridges/{id}/return-pgm/stopTurn it off.

Errors

CodeHTTPMeaning
BAD_REQUEST400missing or invalid field (e.g. unknown protocol)
INVALID_REF400primarySourceId or slateId not owned by you
INVALID_URL400destination targetUrl SSRF-blocked (private / loopback / link-local)
DHUB_REQUIRES_ADDON403creating a bridge, source or destination, reading a bridge, or starting one needs the DHUB add-on (or a plan that includes it)
NOT_FOUND404bridge / source / destination not yours
BRIDGE_LIVE409cannot delete a live bridge — stop first
SERVICE_UNAVAILABLE503internal lifecycle service down — retry

Related

  • Restreams — simpler one-source-many-dest flow without director-mode.
  • Recording — bridge sessions can be captured for replay.
DHUB bridges — dcast.pro API docs