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
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
asset_iduuidNoScope search to a single asset
max_resultsintNoMaximum results (default: 10)

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