MediaCopilot
Integrations

API

Programmatic access to video processing.

The MediaCopilot API provides a robust set of endpoints to manage and process media assets, enabling seamless integration into your workflows.

Full interactive API reference is available at api.mediacopilot.cires21.ai/docs. Contact hello@mediacopilot.io for API access.

Authentication

All API requests require a Bearer token in the Authorization header.

Authorization: Bearer <YOUR_API_KEY>

API keys are provided with your MediaCopilot account.

Base URL

https://api.mediacopilot.cires21.ai

All endpoints are prefixed with /v1.

Common Patterns

Upload Flow

Uploading a media file follows a 3-step process:

  1. Create the assetPOST /v1/assets returns an asset_id.
  2. Get presigned URLsPOST /v1/assets/{asset_id}/start_upload returns presigned upload URLs (one per part).
  3. Upload directly — Upload file parts to the presigned URLs (client-side).
  4. Confirm uploadPOST /v1/assets/{asset_id}/finish_upload with ETags from each part.

Async Job Pattern

Long-running operations (translation, voice over, retranslation, video clip export) follow a create-then-poll pattern:

  1. POST to create the job — returns a job_id.
  2. GET with the job_id to poll status until completion.

Export to External Storage

All export endpoints require a body with external_storage_id pointing to a previously configured storage destination.

Processing Modes

Assets can be processed in two modes via the mc_model parameter:

ModeDescription
normalStandard processing pipeline
turboFaster processing with optimized pipeline

Assets

Manage media assets in your tenant.

Create Asset

POST /v1/assets
FieldTypeRequiredDescription
filenamestringYesName of the file
namestringNoCustom display name for the asset
template_iduuidNoTemplate to apply
collection_iduuidNoCollection to assign to
language_iduuidNoOriginal language
external_idstringNoYour custom ID (unique per tenant)
mc_modelenumNonormal or turbo (default: normal)

List Assets

GET /v1/assets
ParameterTypeRequiredDescription
pageintNoPage number (default: 1)
itemsintNoItems per page (default: 16)
collection_iduuidNoFilter by collection
entitiesstringNoFilter by entities (comma-separated)
sentimentstringNoFilter by sentiment: Negative, Neutral, Positive
classificationstringNoFilter by EBU classification
speakersstringNoFilter by speakers
language_iduuidNoFilter by language

Get / Delete Asset

GET    /v1/assets/{asset_id}
DELETE /v1/assets/{asset_id}

Get Asset by External ID

GET /v1/external/assets/{external_id}

Upload

Start Upload

POST /v1/assets/{asset_id}/start_upload
FieldTypeRequiredDescription
partsintNoNumber of file parts (default: 1)

Returns presigned URLs for each part.

Finish Upload

POST /v1/assets/{asset_id}/finish_upload
FieldTypeRequiredDescription
etagsstringYesETags returned from each part upload

Translation Jobs

Start Translation

POST /v1/assets/{asset_id}/translation_jobs
FieldTypeRequiredDescription
language_idsuuidYesTarget language IDs

Get Translation Job

GET /v1/assets/{asset_id}/translation_jobs/{job_id}

Voice Over Jobs

Start Voice Over

POST /v1/assets/{asset_id}/process_voice_over_jobs
FieldTypeRequiredDescription
language_idsstringNoTarget languages (blank for all tracks in template)

List Voice Over Jobs

GET /v1/assets/{asset_id}/process_voice_over_jobs

Get Voice Over Job

GET /v1/assets/{asset_id}/process_voice_over_jobs/{job_id}

Partial Retranslation Jobs

Create Retranslation Job

POST /v1/assets/{asset_id}/partial_retranslation_jobs

Get Retranslation Job Status

GET /v1/assets/{asset_id}/partial_retranslation_jobs/{job_id}

Transcriptions

List Transcriptions

GET /v1/assets/{asset_id}/transcriptions

Get Transcription

GET /v1/assets/{asset_id}/transcriptions/{transcription_id}

Subtitles

Get Subtitles (Inline)

GET /v1/assets/{asset_id}/transcriptions/{transcription_id}/vtt
GET /v1/assets/{asset_id}/transcriptions/{transcription_id}/srt
GET /v1/assets/{asset_id}/transcriptions/{transcription_id}/stl

VTT supports additional query parameters:

ParameterTypeDefaultDescription
flavorenumstandardstandard or simplified
include_sound_descriptionsbooltrueInclude sound descriptions

Export Subtitles (to External Storage)

POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/vtt/export
POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/srt/export
POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/stl/export
POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/json/export

All export endpoints require:

FieldTypeRequiredDescription
external_storage_iduuidYesTarget storage destination

Segments

Add Segments

POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments
FieldTypeRequiredDescription
segmentsarrayYesArray of segment objects

Each segment object:

FieldTypeRequiredDescription
textstringYesSegment text content
start_msintYesStart time in milliseconds
end_msintYesEnd time in milliseconds
speakerstringYesSpeaker identifier
original_segment_iduuidNoOriginal segment ID (for translations)

Update Multiple Segments

PATCH /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments

Update Single Segment

PATCH /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments/{segment_id}
FieldTypeRequiredDescription
speaker_iduuidNoSpeaker reference
textstringNoUpdated text
start_msintNoUpdated start time
end_msintNoUpdated end time

Metadata

Get All Metadata

GET /v1/assets/{asset_id}/metadata

Get Specific Metadata

GET /v1/assets/{asset_id}/metadata/{metadata_id}

Export Metadata

POST /v1/assets/{asset_id}/metadata/{metadata_id}/json/export
FieldTypeRequiredDescription
external_storage_iduuidYesTarget storage destination

POST /v1/nl_search
FieldTypeRequiredDescription
querystringYesSearch query (text, or multi-modal with image/audio)
asset_iduuidNoScope search to a single asset
max_resultsintNoMaximum results (default: 10)

Multi-modal search is supported — combine text queries with image or audio inputs for richer results across speech, visual content, and metadata.


Centers of Interest

Define and retrieve points of interest within your assets, used by auto-reframing and video analysis.

GET    /v1/assets/{asset_id}/centers_of_interest     # List centers of interest
POST   /v1/assets/{asset_id}/centers_of_interest     # Create center of interest
DELETE /v1/assets/{asset_id}/centers_of_interest/{coi_id}  # Delete center of interest

Channels

Create assets from live sources (RTMP, SRT, HLS).

POST   /v1/channels                    # Create channel
GET    /v1/channels                    # List channels
GET    /v1/channels/{channel_id}       # Get channel (includes playback URL)
DELETE /v1/channels/{channel_id}       # Delete channel

Create Asset from Channel

POST /v1/channels/{channel_id}/assets
FieldTypeRequiredDescription
external_idstringNoYour custom identifier

Publishing

Publish clips to connected social media accounts.

POST /v1/clips/{clip_id}/publish       # Publish a clip
GET  /v1/publish/{job_id}              # Check publishing status
FieldTypeRequiredDescription
platformstringYesTarget platform (youtube, instagram, tiktok, linkedin, x, facebook)
captionstringNoPost caption or description
schedule_atdatetimeNoSchedule for future publishing (ISO 8601)

Collections

CRUD Operations

POST   /v1/collections                          # Create collection
GET    /v1/collections                           # List collections
GET    /v1/collections/{collection_id}           # Get collection
PATCH  /v1/collections/{collection_id}           # Update collection
DELETE /v1/collections/{collection_id}           # Delete collection

Create requires:

FieldTypeRequiredDescription
namestringYesCollection name
template_iduuidNoDefault template

Manage Collection Assets

POST   /v1/collections/{collection_id}/assets    # Add assets
DELETE /v1/collections/{collection_id}/assets    # Remove assets

Both require:

FieldTypeRequiredDescription
asset_idsuuidYesAsset IDs to add/remove

Speakers

POST   /v1/assets/{asset_id}/speakers                  # Create speaker
PATCH  /v1/assets/{asset_id}/speakers/{speaker_id}      # Update speaker
DELETE /v1/assets/{asset_id}/speakers/{speaker_id}      # Delete speaker

Create requires:

FieldTypeRequiredDescription
namestringYesSpeaker name

Audio Tracks

GET /v1/assets/{asset_id}/audio_tracks                              # List audio tracks
GET /v1/assets/{asset_id}/audio_tracks/{audio_track_id}             # Get audio track
GET /v1/assets/{asset_id}/audio_tracks/{audio_track_id}/download_url # Get download URL

Sound Descriptions

GET    /v1/assets/{asset_id}/sound_descriptions                        # List descriptions
GET    /v1/assets/{asset_id}/sound_descriptions/{description_id}       # Get description
DELETE /v1/assets/{asset_id}/sound_descriptions/{description_id}       # Delete description

Video Analysis

GET /v1/assets/{asset_id}/camera_shoots    # Get camera shoots
GET /v1/assets/{asset_id}/faces            # Get face detections
GET /v1/assets/{asset_id}/autocenter       # Get autocenter data

Video Clips

Create Video Clips

POST /v1/assets/{asset_id}/video_clips
FieldTypeRequiredDescription
video_clipsarrayYesArray of clip objects

Each clip object:

FieldTypeDescription
start_msintClip start time in milliseconds
end_msintClip end time in milliseconds
start_frameintClip start frame number
end_frameintClip end frame number
aspect_ratio_xinte.g. 16
aspect_ratio_yinte.g. 9
autoframingboolEnable auto-framing
branding_iduuidBranding to apply
subtitles_language_iduuidLanguage for burned-in subtitles
with_sound_descriptionsboolInclude sound descriptions

List / Get Clips

GET /v1/assets/{asset_id}/video_clips                  # List clips
GET /v1/assets/{asset_id}/video_clips/{video_id}       # Get clip

Download Clips

POST /v1/assets/{asset_id}/video_clips/download              # Synchronous download
POST /v1/assets/{asset_id}/video_clips/download_async         # Async download job
GET  /v1/assets/{asset_id}/video_clips/download_async/{job_id} # Check download status

Export Clips

POST /v1/assets/{asset_id}/video_clips/{video_clip_id}/export        # Export to storage
POST /v1/assets/{asset_id}/video_clips/{video_clip_id}/async_export  # Async export
GET  /v1/assets/{asset_id}/video_clips/{video_clip_id}/async_export/{job_id} # Check status

External Storage

CRUD Operations

POST   /v1/external_storages                           # Add storage
GET    /v1/external_storages                           # List storages
GET    /v1/external_storages/{external_storage_id}     # Get storage
PATCH  /v1/external_storages/{external_storage_id}     # Update storage
DELETE /v1/external_storages/{external_storage_id}     # Delete storage

Create requires:

FieldTypeRequiredDescription
namestringYesStorage name
typeenumYesaws_s3, azure, gcp_storage, or dummy
destinationobjectNoBucket/container details (varies by type)
export_pathstringNoPath template with variables: {asset_id}, {asset_external_id}, {video_clip_id}
authentication_dataobjectNoCredentials (varies by type)

Destination by type:

TypeFields
AWS S3bucket_name, region
Azureblob_url
GCP Storagebucket_name

Authentication by type:

TypeFields
AWS S3iam_role_arn
Azuresas_token
GCP Storagecredentials (JSON service account)

Admin Endpoints

GET /v1/admin/external_storages                        # List all (admin)
GET /v1/admin/external_storages/{external_storage_id}  # Get (admin)

Templates

POST   /v1/templates                    # Create template
GET    /v1/templates                    # List templates
GET    /v1/templates/{template_id}      # Get template
PATCH  /v1/templates/{template_id}      # Update template
DELETE /v1/templates/{template_id}      # Delete template

Create/update fields:

FieldTypeRequiredDescription
namestringYesTemplate name
domain_dictionary_idsuuidNoAssociated dictionaries
blacklist_idsuuidNoAssociated blacklists
whitelist_idsuuidNoAssociated whitelists
translation_language_idsuuidNoAuto-translate languages
voice_over_language_idsuuidNoAuto voice-over languages
enabled_ocrboolNoEnable OCR (default: false)
voice_over_configobjectNoclone_voice (bool), mute_original_voice (bool)

Brandings

Core Brandings

POST   /v1/brandings                    # Create branding
GET    /v1/brandings                    # List brandings
GET    /v1/brandings/{branding_id}      # Get branding
PATCH  /v1/brandings/{branding_id}      # Update branding
DELETE /v1/brandings/{branding_id}      # Delete branding

Branding Variants

Each branding can have variants for different aspect ratios.

POST   /v1/brandings/{branding_id}/variants                  # Add variant
GET    /v1/brandings/{branding_id}/variants                  # List variants
GET    /v1/brandings/{branding_id}/variants/{variant_id}     # Get variant
PATCH  /v1/brandings/{branding_id}/variants/{variant_id}     # Update variant
DELETE /v1/brandings/{branding_id}/variants/{variant_id}     # Delete variant
FieldTypeRequiredDescription
aspect_ratioenumYes9:16, 1:1, 4:5, 16:9, 4:3, or 3:4
overlay_iduuidNoOverlay to apply
intro_iduuidNoIntro clip
outro_iduuidNoOutro clip

Branding Overlays

POST   /v1/branding_overlays                              # Create overlay
GET    /v1/branding_overlays                              # List overlays
GET    /v1/branding_overlays/{overlay_id}                 # Get overlay
PATCH  /v1/branding_overlays/{overlay_id}                 # Update overlay
DELETE /v1/branding_overlays/{overlay_id}                 # Delete overlay
POST   /v1/branding_overlays/{overlay_id}/start_upload    # Start upload
POST   /v1/branding_overlays/{overlay_id}/finish_upload   # Finish upload
GET    /v1/branding_overlays/{overlay_id}/upload_jobs/{job_id} # Check upload status

Branding Clips

POST   /v1/branding_clips                              # Create clip
GET    /v1/branding_clips                              # List clips
GET    /v1/branding_clips/{clip_id}                    # Get clip
PATCH  /v1/branding_clips/{clip_id}                    # Update clip
DELETE /v1/branding_clips/{clip_id}                    # Delete clip
POST   /v1/branding_clips/{clip_id}/start_upload       # Start upload
POST   /v1/branding_clips/{clip_id}/finish_upload      # Finish upload
GET    /v1/branding_clips/{clip_id}/upload_jobs/{job_id} # Check upload status

Branding Subtitle Styles

POST   /v1/branding_subtitle_styles                    # Create style
GET    /v1/branding_subtitle_styles                    # List styles
GET    /v1/branding_subtitle_styles/{style_id}         # Get style
PATCH  /v1/branding_subtitle_styles/{style_id}         # Update style
DELETE /v1/branding_subtitle_styles/{style_id}         # Delete style
FieldTypeDefaultDescription
namestringStyle name (required)
font_familystringFont family (required)
text_colorhexText color e.g. #050B07 (required)
font_size_pxint26Font size in pixels
font_weightint600Font weight
line_heightfloat1.2Line height
vertical_position_pctfloat0.1Vertical position (% of video height)
shadow_blurfloat0.0Shadow blur radius
shadow_colorhexShadow color
shadow_opacity_pctfloat1Shadow opacity
shadow_offset_x_pxint1Shadow X offset
shadow_offset_y_pxint1Shadow Y offset
background_colorhexBackground color
background_opacityfloat0.0Background opacity
stroke_colorhex#000000Stroke color
stroke_thickness_pxint0Stroke thickness

Word Lists

Blacklists

Words to filter from transcriptions.

POST   /v1/blacklists                      # Create blacklist
GET    /v1/blacklists                      # List blacklists
GET    /v1/blacklists/{blacklist_id}       # Get blacklist
PATCH  /v1/blacklists/{blacklist_id}       # Update blacklist
DELETE /v1/blacklists/{blacklist_id}       # Delete blacklist
FieldTypeRequiredDescription
namestringYesBlacklist name
wordsstringYesWords to filter
language_iduuidYesLanguage reference
template_iduuidNoAssociated template

Whitelists

Words to preserve in transcriptions.

POST   /v1/whitelists                      # Create whitelist
GET    /v1/whitelists                      # List whitelists
GET    /v1/whitelists/{whitelist_id}       # Get whitelist
PATCH  /v1/whitelists/{whitelist_id}       # Update whitelist
DELETE /v1/whitelists/{whitelist_id}       # Delete whitelist
FieldTypeRequiredDescription
namestringYesWhitelist name
wordsstringYesWords to preserve
template_iduuidNoAssociated template

Dictionaries

Term expansion maps for transcription accuracy.

POST   /v1/dictionaries                      # Create dictionary
GET    /v1/dictionaries                      # List dictionaries
GET    /v1/dictionaries/{dictionary_id}      # Get dictionary
PATCH  /v1/dictionaries/{dictionary_id}      # Update dictionary
DELETE /v1/dictionaries/{dictionary_id}      # Delete dictionary
FieldTypeRequiredDescription
namestringYesDictionary name
dictionaryobjectYesKey-value map, e.g. {"AI": ["Artificial Intelligence"]}
template_iduuidNoAssociated template

Languages

GET /v1/languages                  # List all languages
GET /v1/languages/{language_id}    # Get language details

Filter Views

POST   /v1/views                    # Create view
GET    /v1/views                    # List views
GET    /v1/views/{view_id}          # Get view
PATCH  /v1/views/{view_id}          # Update view
DELETE /v1/views/{view_id}          # Delete view
FieldTypeRequiredDescription
namestringYesView name
filter_paramsarrayYesArray of filter conditions (min 1)

Usage & Billing

GET /v1/usages/current_month    # Current month usage
GET /v1/usages/historical       # Historical usage data
Copyright © 2026