Third-Party Integrations

Content sharing, media encoding jobs, Brightcove, Canto, Blueforce, Eluvio, EdgeCaster, Phenix, Red5, THEOlive, Bitmovin, Hybrik, Stripe, and AI processing webhooks.

Third-Party Integrations

Overview

The Third-Party Integration APIs connect Nomad Media with external platforms for content sharing, media encoding, live streaming, AI processing, and payment handling. These include both authenticated administrative endpoints and unauthenticated webhook callbacks from external services.

Base Routes

Route PrefixDescription
/shareContent sharing management
/admin/jobMedia processing job submission and callbacks
/admin/transcribe-jobExternal transcription job callbacks
/admin/brightcoveBrightcove video import
/admin/cantoCanto DAM asset import
/admin/blueforceBlueforce image submission
/eluvioEluvio content fabric token generation
/edgecasterEdgeCaster XML control and cache management
/phenixPhenix RTS channel management and webhooks
/red5Red5 Pro streaming authentication and webhooks
/theoliveTHEOlive streaming webhooks
/bitmovinBitmovin encoding webhooks
/hybrikHybrik encoding webhooks
/stripeStripe payment webhooks
/mobius-labsMobius Labs AI processing webhooks
/twelve-labsTwelve Labs video understanding webhooks

Content Sharing

Get Share

GET /share/{shareId}
Response: ShareModel

Retrieves a share configuration by its identifier.

Create Share

POST /share
Request body: ShareAddModel
Response: ShareModel

Creates a new content share with access settings, expiration, and optional password protection.

Update Share

PUT /share/{shareId}
Request body: ShareUpdateModel
Response: ShareModel

Updates an existing share configuration and invalidates the share cache.

Send Share Notification

POST /share/{shareId}/notification
Request body: ShareNotificationModel

Sends a notification (e.g., email) to share recipients.

Delete Share

DELETE /share/{shareId}
Response: IdModel

Permanently deletes a share and invalidates the share cache.

Expire Share

POST /share/expire/{shareId?}

Force-expires the specified share, or all shares if no ID is provided.

Media Processing Jobs

Submit Job

POST /admin/job
Request body: SubmitJobModel
Response: IdModel

Submits a media processing job for asynchronous execution. No authorization required.

Job Completion Callback

POST /admin/job/{assetId}
Request body: JobCompleteModel

Receives a completion callback from the media processing pipeline. No authorization required.

External Transcription Callback

POST /admin/transcribe-job/{assetId}
Request body: NomadTranscriptionModel

Receives a completion callback from the external transcription service. Validates the access key and queues the transcription for processing. No authorization required.

Brightcove Integration

Import Videos

POST /admin/brightcove/import
Request body: string[] (Brightcove video IDs)
Query: background (bool, default: true)

Imports Brightcove videos by their IDs. Can run in the foreground or as a background batch job.

Import Masters

POST /admin/brightcove/import-masters
Query: pageNumber (int), background (bool, default: true)

Imports Brightcove master video files with pagination support.

Canto Integration

Import Assets

POST /admin/canto/import
Request body: string[] (Canto asset IDs)
Query: background (bool, default: true)

Imports Canto DAM assets by their IDs. Can run in the foreground or as a background batch job.

Blueforce Integration

Upload Image

POST /admin/blueforce/upload-image
Request body: byte[] (Base64-encoded image)
Query: endpointId, imageId, alertUnknownFaces, fileName
Response: IdModel

Receives a Base64-encoded image submission from the Blueforce platform and creates an asset.

Eluvio Content Fabric

Generate Security Token

POST /eluvio/token
Request body: EluvioTokenRequestModel
Response: EluvioTokenResponseModel

Generates a signed Eluvio content fabric security token for the specified mezzanine object.

EdgeCaster Integration

Get XML Control (Unauthenticated)

GET /edgecaster
Response: application/xml

Returns EdgeCaster XML control data using the identity key from request headers. No authorization required.

Get XML Control by Channel ID

GET /edgecaster/{id}
Response: application/xml

Returns EdgeCaster XML control data for a specific Nomad Media live channel. Requires authorization.

Clear Cache

POST /edgecaster/{identityKey}/clearCache

Clears the EdgeCaster cache for the specified identity key. Requires authorization.

Phenix RTS

Status Webhook

POST /phenix/status

Receives status update webhooks from the Phenix RTS platform. Validated by a webhook request filter. No Bearer token required.

Refresh Token

POST /phenix/refreshToken
Query: liveChannelId (Guid)
Response: string

Generates a refreshed Phenix authentication token for the specified live channel and current user.

Create Channel

POST /phenix
Request body: PhenixChannelRequestModel
Response: PhenixChannelEntity

Creates a new channel on the Phenix RTS platform.

Get Channel

GET /phenix/{externalSystemId}
Response: PhenixChannelEntity

Retrieves a Phenix channel by its external system identifier.

List Channels

GET /phenix
Response: PhenixChannelEntity[]

Returns all Phenix channels.

Stop Channel

POST /phenix/{externalSystemId}/stop

Stops a Phenix channel.

Delete Channel

DELETE /phenix/{externalSystemId}

Deletes a Phenix channel from the platform.

Register Webhook

POST /phenix/registerWebhook
Request body: PhenixWebhookRegistrationModel

Registers a webhook URL on the Phenix RTS platform for receiving status callbacks.

Red5 Pro Streaming

Authenticate

POST /red5/authenticate
Request body: Red5AuthRequestModel
Response: Red5AuthResponseModel

Handles Red5 Pro authentication webhook callbacks. No authorization required.

Validate Credentials

POST /red5/validateCredentials
Request body: Red5AuthRequestModel
Response: Red5AuthResponseModel

Handles Red5 Pro credential validation webhook callbacks. No authorization required.

Status Update

POST /red5/status
Request body: Red5StatusRequestModel
Response: Red5StatusResponseModel

Processes Red5 Pro stream status webhooks (publish/unpublish events). No authorization required.

THEOlive Streaming

Webhook

POST /theolive/webhook
Request body: TheoliveWebhookRequestModel
Response: ActionResult

Receives event webhooks from the THEOlive platform and updates channel status. No authorization required.

Health Check

GET /theolive/webhook/health
Response: { status, service }

Health check endpoint for THEOlive webhook connectivity. No authorization required.

Encoding Webhooks

Bitmovin Webhook

POST /bitmovin/webhook/{status}/{id}/{eId}
Request body: object

Receives encoding status webhooks from the Bitmovin platform. Queues the result for asynchronous processing. No authorization required.

Hybrik Webhook

POST /hybrik/webhook/{id}
Request body: object

Receives encoding completion webhooks from the Hybrik platform. Queues the result for asynchronous processing. No authorization required.

Payment Integration

Stripe Webhook

POST /stripe/webhook
Request body: string (raw Stripe event JSON)
Response: bool

Receives payment event webhooks from the Stripe platform.

AI Processing Webhooks

Mobius Labs Webhook

POST /mobius-labs/notification/{id}/{callbackType}
Request body: object
Response: MobiusLabsWebhookResponseModel

Receives AI processing webhooks from Mobius Labs. Supports callback types: feature-extraction, video-analysis, index, and analyze. No authorization required.

Twelve Labs Webhook

POST /twelve-labs/notification
Request body: object

Receives video understanding webhooks from the Twelve Labs platform. Validated by a webhook request filter. No authorization required.

Common Error Responses

Status CodeDescription
200OK — Request processed successfully
204No Content — Empty input (e.g., no IDs provided for import)
400Bad Request — Missing or invalid parameters
401Unauthorized — Missing or invalid Bearer token
404Not Found — Resource not found