API
Die MediaCopilot API bietet eine umfangreiche Sammlung von Endpunkten zur Verwaltung und Verarbeitung von Medien-Assets und ermöglicht die nahtlose Integration in Ihre Workflows.
Authentifizierung
Alle API-Anfragen erfordern einen Bearer-Token im Authorization-Header.
Authorization: Bearer <YOUR_API_KEY>
API-Schlüssel werden mit Ihrem MediaCopilot-Konto bereitgestellt.
Basis-URL
https://api.mediacopilot.cires21.ai
Alle Endpunkte haben das Präfix /v1.
Häufige Muster
Upload-Ablauf
Das Hochladen einer Mediendatei erfolgt in einem 3-Schritt-Prozess:
- Asset erstellen —
POST /v1/assetsgibt eineasset_idzurück. - Presigned URLs abrufen —
POST /v1/assets/{asset_id}/start_uploadgibt presigned Upload-URLs zurück (eine pro Teil). - Direkt hochladen — Dateiparts zu den presigned URLs hochladen (clientseitig).
- Upload bestätigen —
POST /v1/assets/{asset_id}/finish_uploadmit ETags von jedem Part.
Async-Job-Muster
Lang laufende Operationen (Übersetzung, Voice-Over, Retranslation, Video-Clip-Export) folgen einem Create-then-Poll-Muster:
POSTzum Erstellen des Jobs — gibt einejob_idzurück.GETmit derjob_id, um den Status bis zur Fertigstellung abzufragen.
Export in externen Speicher
Alle Export-Endpunkte erfordern einen Body mit external_storage_id, der auf ein zuvor konfiguriertes Speicherziel verweist.
Verarbeitungsmodi
Assets können über den Parameter mc_model in zwei Modi verarbeitet werden:
| Modus | Beschreibung |
|---|---|
normal | Standard-Verarbeitungspipeline |
turbo | Schnellere Verarbeitung mit optimierter Pipeline |
Assets
Medien-Assets in Ihrem Tenant verwalten.
Asset erstellen
POST /v1/assets
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
filename | string | Ja | Name der Datei |
template_id | uuid | Nein | Anzuwendende Vorlage |
collection_id | uuid | Nein | Zuzuweisende Sammlung |
language_id | uuid | Nein | Originalsprache |
external_id | string | Nein | Ihre benutzerdefinierte ID (eindeutig pro Tenant) |
mc_model | enum | Nein | normal oder turbo (Standard: normal) |
Assets auflisten
GET /v1/assets
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
page | int | Nein | Seitennummer (Standard: 1) |
items | int | Nein | Einträge pro Seite (Standard: 16) |
collection_id | uuid | Nein | Nach Sammlung filtern |
entities | string | Nein | Nach Entitäten filtern (kommagetrennt) |
sentiment | string | Nein | Nach Stimmung filtern: Negative, Neutral, Positive |
classification | string | Nein | Nach EBU-Klassifizierung filtern |
speakers | string | Nein | Nach Sprechern filtern |
language_id | uuid | Nein | Nach Sprache filtern |
Asset abrufen / löschen
GET /v1/assets/{asset_id}
DELETE /v1/assets/{asset_id}
Asset über externe ID abrufen
GET /v1/external/assets/{external_id}
Upload
Upload starten
POST /v1/assets/{asset_id}/start_upload
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
parts | int | Nein | Anzahl der Dateiparts (Standard: 1) |
Gibt presigned URLs für jeden Part zurück.
Upload abschließen
POST /v1/assets/{asset_id}/finish_upload
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
etags | string | Ja | ETags von jedem Part-Upload zurückgegeben |
Übersetzungsjobs
Übersetzung starten
POST /v1/assets/{asset_id}/translation_jobs
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
language_ids | uuid | Ja | Zielsprachen-IDs |
Übersetzungsjob abrufen
GET /v1/assets/{asset_id}/translation_jobs/{job_id}
Voice-Over-Jobs
Voice-Over starten
POST /v1/assets/{asset_id}/process_voice_over_jobs
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
language_ids | string | Nein | Zielsprachen (leer für alle Spuren in der Vorlage) |
Voice-Over-Jobs auflisten
GET /v1/assets/{asset_id}/process_voice_over_jobs
Voice-Over-Job abrufen
GET /v1/assets/{asset_id}/process_voice_over_jobs/{job_id}
Partielle Retranslationsjobs
Retranslationsjob erstellen
POST /v1/assets/{asset_id}/partial_retranslation_jobs
Retranslationsjob-Status abrufen
GET /v1/assets/{asset_id}/partial_retranslation_jobs/{job_id}
Transkriptionen
Transkriptionen auflisten
GET /v1/assets/{asset_id}/transcriptions
Transkription abrufen
GET /v1/assets/{asset_id}/transcriptions/{transcription_id}
Untertitel
Untertitel abrufen (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 unterstützt zusätzliche Abfrageparameter:
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
flavor | enum | standard | standard oder simplified |
include_sound_descriptions | bool | true | Klangbeschreibungen einbeziehen |
Untertitel exportieren (in externen Speicher)
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
Alle Export-Endpunkte erfordern:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
external_storage_id | uuid | Ja | Ziel-Speicherziel |
Segmente
Segmente hinzufügen
POST /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
segments | array | Ja | Array von Segmentobjekten |
Jedes Segmentobjekt:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
text | string | Ja | Segmenttextinhalt |
start_ms | int | Ja | Startzeit in Millisekunden |
end_ms | int | Ja | Endzeit in Millisekunden |
speaker | string | Ja | Sprecherkennung |
original_segment_id | uuid | Nein | Ursprüngliche Segment-ID (für Übersetzungen) |
Mehrere Segmente aktualisieren
PATCH /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments
Einzelnes Segment aktualisieren
PATCH /v1/assets/{asset_id}/transcriptions/{transcription_id}/segments/{segment_id}
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
speaker_id | uuid | Nein | Sprecherreferenz |
text | string | Nein | Aktualisierter Text |
start_ms | int | Nein | Aktualisierte Startzeit |
end_ms | int | Nein | Aktualisierte Endzeit |
Metadaten
Alle Metadaten abrufen
GET /v1/assets/{asset_id}/metadata
Spezifische Metadaten abrufen
GET /v1/assets/{asset_id}/metadata/{metadata_id}
Metadaten exportieren
POST /v1/assets/{asset_id}/metadata/{metadata_id}/json/export
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
external_storage_id | uuid | Ja | Ziel-Speicherziel |
Natürlichsprachliche Suche
POST /v1/nl_search
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
query | string | Ja | Suchanfrage |
asset_id | uuid | Nein | Suche auf ein einzelnes Asset einschränken |
max_results | int | Nein | Maximale Ergebnisse (Standard: 10) |
Sammlungen
CRUD-Operationen
POST /v1/collections # Sammlung erstellen
GET /v1/collections # Sammlungen auflisten
GET /v1/collections/{collection_id} # Sammlung abrufen
PATCH /v1/collections/{collection_id} # Sammlung aktualisieren
DELETE /v1/collections/{collection_id} # Sammlung löschen
Erstellen erfordert:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Sammlungsname |
template_id | uuid | Nein | Standardvorlage |
Sammlungs-Assets verwalten
POST /v1/collections/{collection_id}/assets # Assets hinzufügen
DELETE /v1/collections/{collection_id}/assets # Assets entfernen
Beide erfordern:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
asset_ids | uuid | Ja | Hinzuzufügende/entfernende Asset-IDs |
Sprecher
POST /v1/assets/{asset_id}/speakers # Sprecher erstellen
PATCH /v1/assets/{asset_id}/speakers/{speaker_id} # Sprecher aktualisieren
DELETE /v1/assets/{asset_id}/speakers/{speaker_id} # Sprecher löschen
Erstellen erfordert:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Sprechername |
Audiospuren
GET /v1/assets/{asset_id}/audio_tracks # Audiospuren auflisten
GET /v1/assets/{asset_id}/audio_tracks/{audio_track_id} # Audiospur abrufen
GET /v1/assets/{asset_id}/audio_tracks/{audio_track_id}/download_url # Download-URL abrufen
Klangbeschreibungen
GET /v1/assets/{asset_id}/sound_descriptions # Beschreibungen auflisten
GET /v1/assets/{asset_id}/sound_descriptions/{description_id} # Beschreibung abrufen
DELETE /v1/assets/{asset_id}/sound_descriptions/{description_id} # Beschreibung löschen
Videoanalyse
GET /v1/assets/{asset_id}/camera_shoots # Kameraaufnahmen abrufen
GET /v1/assets/{asset_id}/faces # Gesichtserkennung abrufen
GET /v1/assets/{asset_id}/autocenter # Autocenter-Daten abrufen
Video-Clips
Video-Clips erstellen
POST /v1/assets/{asset_id}/video_clips
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
video_clips | array | Ja | Array von Clip-Objekten |
Jedes Clip-Objekt:
| Feld | Typ | Beschreibung |
|---|---|---|
start_ms | int | Clip-Startzeit in Millisekunden |
end_ms | int | Clip-Endzeit in Millisekunden |
start_frame | int | Clip-Startframe-Nummer |
end_frame | int | Clip-Endframe-Nummer |
aspect_ratio_x | int | z.B. 16 |
aspect_ratio_y | int | z.B. 9 |
autoframing | bool | Auto-Framing aktivieren |
branding_id | uuid | Anzuwendendes Branding |
subtitles_language_id | uuid | Sprache für eingebrannte Untertitel |
with_sound_descriptions | bool | Klangbeschreibungen einbeziehen |
Clips auflisten / abrufen
GET /v1/assets/{asset_id}/video_clips # Clips auflisten
GET /v1/assets/{asset_id}/video_clips/{video_id} # Clip abrufen
Clips herunterladen
POST /v1/assets/{asset_id}/video_clips/download # Synchroner Download
POST /v1/assets/{asset_id}/video_clips/download_async # Asynchroner Download-Job
GET /v1/assets/{asset_id}/video_clips/download_async/{job_id} # Download-Status prüfen
Clips exportieren
POST /v1/assets/{asset_id}/video_clips/{video_clip_id}/export # In Speicher exportieren
POST /v1/assets/{asset_id}/video_clips/{video_clip_id}/async_export # Asynchroner Export
GET /v1/assets/{asset_id}/video_clips/{video_clip_id}/async_export/{job_id} # Status prüfen
Externer Speicher
CRUD-Operationen
POST /v1/external_storages # Speicher hinzufügen
GET /v1/external_storages # Speicher auflisten
GET /v1/external_storages/{external_storage_id} # Speicher abrufen
PATCH /v1/external_storages/{external_storage_id} # Speicher aktualisieren
DELETE /v1/external_storages/{external_storage_id} # Speicher löschen
Erstellen erfordert:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Speichername |
type | enum | Ja | aws_s3, azure, gcp_storage oder dummy |
destination | object | Nein | Bucket-/Container-Details (je nach Typ) |
export_path | string | Nein | Pfadvorlage mit Variablen: {asset_id}, {asset_external_id}, {video_clip_id} |
authentication_data | object | Nein | Anmeldedaten (je nach Typ) |
Ziel nach Typ:
| Typ | Felder |
|---|---|
| AWS S3 | bucket_name, region |
| Azure | blob_url |
| GCP Storage | bucket_name |
Authentifizierung nach Typ:
| Typ | Felder |
|---|---|
| AWS S3 | iam_role_arn |
| Azure | sas_token |
| GCP Storage | credentials (JSON Service Account) |
Admin-Endpunkte
GET /v1/admin/external_storages # Alle auflisten (Admin)
GET /v1/admin/external_storages/{external_storage_id} # Abrufen (Admin)
Vorlagen
POST /v1/templates # Vorlage erstellen
GET /v1/templates # Vorlagen auflisten
GET /v1/templates/{template_id} # Vorlage abrufen
PATCH /v1/templates/{template_id} # Vorlage aktualisieren
DELETE /v1/templates/{template_id} # Vorlage löschen
Erstellen/Aktualisieren-Felder:
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Vorlagenname |
domain_dictionary_ids | uuid | Nein | Zugehörige Wörterbücher |
blacklist_ids | uuid | Nein | Zugehörige Blacklists |
whitelist_ids | uuid | Nein | Zugehörige Whitelists |
translation_language_ids | uuid | Nein | Automatische Übersetzungssprachen |
voice_over_language_ids | uuid | Nein | Automatische Voice-Over-Sprachen |
enabled_ocr | bool | Nein | OCR aktivieren (Standard: false) |
voice_over_config | object | Nein | clone_voice (bool), mute_original_voice (bool) |
Brandings
Kern-Brandings
POST /v1/brandings # Branding erstellen
GET /v1/brandings # Brandings auflisten
GET /v1/brandings/{branding_id} # Branding abrufen
PATCH /v1/brandings/{branding_id} # Branding aktualisieren
DELETE /v1/brandings/{branding_id} # Branding löschen
Branding-Varianten
Jedes Branding kann Varianten für verschiedene Seitenverhältnisse haben.
POST /v1/brandings/{branding_id}/variants # Variante hinzufügen
GET /v1/brandings/{branding_id}/variants # Varianten auflisten
GET /v1/brandings/{branding_id}/variants/{variant_id} # Variante abrufen
PATCH /v1/brandings/{branding_id}/variants/{variant_id} # Variante aktualisieren
DELETE /v1/brandings/{branding_id}/variants/{variant_id} # Variante löschen
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
aspect_ratio | enum | Ja | 9:16, 1:1, 4:5, 16:9, 4:3 oder 3:4 |
overlay_id | uuid | Nein | Anzuwendendes Overlay |
intro_id | uuid | Nein | Intro-Clip |
outro_id | uuid | Nein | Outro-Clip |
Branding-Overlays
POST /v1/branding_overlays # Overlay erstellen
GET /v1/branding_overlays # Overlays auflisten
GET /v1/branding_overlays/{overlay_id} # Overlay abrufen
PATCH /v1/branding_overlays/{overlay_id} # Overlay aktualisieren
DELETE /v1/branding_overlays/{overlay_id} # Overlay löschen
POST /v1/branding_overlays/{overlay_id}/start_upload # Upload starten
POST /v1/branding_overlays/{overlay_id}/finish_upload # Upload abschließen
GET /v1/branding_overlays/{overlay_id}/upload_jobs/{job_id} # Upload-Status prüfen
Branding-Clips
POST /v1/branding_clips # Clip erstellen
GET /v1/branding_clips # Clips auflisten
GET /v1/branding_clips/{clip_id} # Clip abrufen
PATCH /v1/branding_clips/{clip_id} # Clip aktualisieren
DELETE /v1/branding_clips/{clip_id} # Clip löschen
POST /v1/branding_clips/{clip_id}/start_upload # Upload starten
POST /v1/branding_clips/{clip_id}/finish_upload # Upload abschließen
GET /v1/branding_clips/{clip_id}/upload_jobs/{job_id} # Upload-Status prüfen
Branding-Untertitelstile
POST /v1/branding_subtitle_styles # Stil erstellen
GET /v1/branding_subtitle_styles # Stile auflisten
GET /v1/branding_subtitle_styles/{style_id} # Stil abrufen
PATCH /v1/branding_subtitle_styles/{style_id} # Stil aktualisieren
DELETE /v1/branding_subtitle_styles/{style_id} # Stil löschen
| Feld | Typ | Standard | Beschreibung |
|---|---|---|---|
name | string | — | Stilname (erforderlich) |
font_family | string | — | Schriftfamilie (erforderlich) |
text_color | hex | — | Textfarbe z.B. #050B07 (erforderlich) |
font_size_px | int | 26 | Schriftgröße in Pixeln |
font_weight | int | 600 | Schriftstärke |
line_height | float | 1.2 | Zeilenhöhe |
vertical_position_pct | float | 0.1 | Vertikale Position (% der Videohöhe) |
shadow_blur | float | 0.0 | Schattenunschärfe-Radius |
shadow_color | hex | — | Schattenfarbe |
shadow_opacity_pct | float | 1 | Schattendeckkraft |
shadow_offset_x_px | int | 1 | Schatten X-Versatz |
shadow_offset_y_px | int | 1 | Schatten Y-Versatz |
background_color | hex | — | Hintergrundfarbe |
background_opacity | float | 0.0 | Hintergrunddeckkraft |
stroke_color | hex | #000000 | Konturfarbe |
stroke_thickness_px | int | 0 | Konturstärke |
Wortlisten
Blacklists
Aus Transkriptionen zu filternde Wörter.
POST /v1/blacklists # Blacklist erstellen
GET /v1/blacklists # Blacklists auflisten
GET /v1/blacklists/{blacklist_id} # Blacklist abrufen
PATCH /v1/blacklists/{blacklist_id} # Blacklist aktualisieren
DELETE /v1/blacklists/{blacklist_id} # Blacklist löschen
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Blacklist-Name |
words | string | Ja | Zu filternde Wörter |
language_id | uuid | Ja | Sprachreferenz |
template_id | uuid | Nein | Zugehörige Vorlage |
Whitelists
In Transkriptionen beizubehaltende Wörter.
POST /v1/whitelists # Whitelist erstellen
GET /v1/whitelists # Whitelists auflisten
GET /v1/whitelists/{whitelist_id} # Whitelist abrufen
PATCH /v1/whitelists/{whitelist_id} # Whitelist aktualisieren
DELETE /v1/whitelists/{whitelist_id} # Whitelist löschen
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Whitelist-Name |
words | string | Ja | Beizubehaltende Wörter |
template_id | uuid | Nein | Zugehörige Vorlage |
Wörterbücher
Begriffsexpansions-Maps für Transkriptionsgenauigkeit.
POST /v1/dictionaries # Wörterbuch erstellen
GET /v1/dictionaries # Wörterbücher auflisten
GET /v1/dictionaries/{dictionary_id} # Wörterbuch abrufen
PATCH /v1/dictionaries/{dictionary_id} # Wörterbuch aktualisieren
DELETE /v1/dictionaries/{dictionary_id} # Wörterbuch löschen
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Wörterbuchname |
dictionary | object | Ja | Key-Value-Map, z.B. {"KI": ["Künstliche Intelligenz"]} |
template_id | uuid | Nein | Zugehörige Vorlage |
Sprachen
GET /v1/languages # Alle Sprachen auflisten
GET /v1/languages/{language_id} # Sprachdetails abrufen
Filter-Ansichten
POST /v1/views # Ansicht erstellen
GET /v1/views # Ansichten auflisten
GET /v1/views/{view_id} # Ansicht abrufen
PATCH /v1/views/{view_id} # Ansicht aktualisieren
DELETE /v1/views/{view_id} # Ansicht löschen
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Ansichtsname |
filter_params | array | Ja | Array von Filterbedingungen (min. 1) |
Nutzung & Abrechnung
GET /v1/usages/current_month # Nutzung des aktuellen Monats
GET /v1/usages/historical # Historische Nutzungsdaten

