Dateien hochladen
Es gibt zwei Wege: eine einzelne Multipart-Anfrage für alles unter 500 MB und eine fortsetzbare Sitzung für größere Dateien oder wacklige Verbindungen. Beide enden mit demselben Dateiobjekt.
Einzelne Anfrage
curl -X POST https://api.media-host.online/v1/files \
-H "Authorization: Bearer $MH_TOKEN" \
-F "file=@folge-048-final.mp3" \
-F "collection=wochenshow" \
-F "title=048 — Die stille Saison" \
-F "published_at=2026-08-21T06:00:00Z"
Die Antwort kommt, sobald die Bytes gespeichert sind. Dauer, Bitrate und Lautheit trägt der Verarbeitungs-Worker einige Sekunden später nach; bis dahin steht state auf processing.
{
"id": "f_7Q2kd9Lm",
"collection": "wochenshow",
"filename": "folge-048-final.mp3",
"bytes": 58213904,
"content_type": "audio/mpeg",
"state": "processing",
"url": "https://cdn.media-host.online/wochenshow/folge-048-final.mp3",
"created_at": "2026-08-19T14:02:11Z"
}
Fortsetzbarer Upload
Sitzung anlegen, dann Chunks mit Content-Range schicken. Chunks dürfen ab 5 MB beliebig groß sein; die CLI nimmt 32 MB. Schlägt ein Chunk fehl, einfach erneut senden. Geht die Sitzungs-ID verloren, listet GET /v1/uploads die offenen Sitzungen der letzten 48 Stunden.
# 1. Sitzung öffnen
curl -X POST https://api.media-host.online/v1/uploads \
-H "Authorization: Bearer $MH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"collection":"vorlesungen","filename":"woche-07.mp4","bytes":2147483648}'
# → { "upload_id": "up_K3m9...", "chunk_size_hint": 33554432 }
# 2. Chunks senden (wiederholen; Reihenfolge egal)
curl -X PUT https://api.media-host.online/v1/uploads/up_K3m9.../chunk \
-H "Authorization: Bearer $MH_TOKEN" \
-H "Content-Range: bytes 0-33554431/2147483648" \
--data-binary @teil-000
# 3. abschließen
curl -X POST https://api.media-host.online/v1/uploads/up_K3m9.../complete \
-H "Authorization: Bearer $MH_TOKEN"
Oder die CLI machen lassen. Sie teilt, wiederholt und setzt selbst fort:
mh put vorlesungen ./woche-07.mp4 --title "Woche 7: Signale und Rauschen"
Metadatenfelder
| Feld | Typ | Hinweise |
|---|---|---|
title | string | Erscheint in erzeugten Feeds. Standard: Dateiname ohne Endung. |
description | string | Reiner Text oder eingeschränktes HTML (p, a, b, i, br). |
published_at | RFC 3339 | Ein Datum in der Zukunft hält die Folge bis dahin aus dem Feed. |
episode, season | integer | Werden auf iTunes-Tags abgebildet. |
private | boolean | Nur über signierte URLs ausliefern. Standard folgt der Sammlung. |
Verarbeitungszustände
Normalerweise processing → ready. failed heißt, wir konnten den Container nicht lesen; die Datei wird trotzdem gespeichert und ausgeliefert, aber die Dauer ist unbekannt und Feeds lassen itunes:duration weg. Abonnieren Sie den Webhook file.ready, statt zu pollen.
application/octet-stream gespeichert und als Download ausgeliefert.