Pas de SDK ? Vous pouvez piloter le flux d’envoi reprenable vous-même en HTTP simple. C’est le protocole TUS : créer une session, puis envoyer les octets par chunks (PATCH). C’est exactement ce que font les SDK en interne — préférez-les si vous le pouvez.
Tous les appels utilisent votre clé API (Authorization: Bearer sk_…) et la
portée Write Assets, contre l’URL de base https://api.videas.com.
Étape 1 — créer la session d’envoi
POST /upload/ avec les en-têtes TUS. Upload-Metadata est une liste
séparée par des virgules de paires clé <base64(valeur)> ; filename et
workspace_uid sont requis (optionnels : asset_name, description,
parent_folder_uid, content_type).
# echo -n "cours.mp4" | base64 → Y291cnMubXA0
# echo -n "ws_123" | base64 → d3NfMTIz
curl -i -X POST https://api.videas.com/api/external/v1/upload/ \
-H "Authorization: Bearer $VIDEAS_API_KEY" \
-H "Tus-Resumable: 1.0.0" \
-H "Upload-Length: 734003200" \
-H "Upload-Metadata: filename Y291cnMubXA0,workspace_uid d3NfMTIz"
La réponse 201 porte un en-tête Location (où envoyer les octets) et un corps
avec asset_uid (utilisable immédiatement) et expires_at :
{ "uid": "…", "location": "/api/external/v1/upload/<session>", "asset_uid": "ast_…", "total_size": 734003200, "expires_at": "…" }
Si
locationest relatif (comme ci-dessus), résolvez-le contre l’URL de base :https://api.videas.com/api/external/v1/upload/<session>.
Étape 2 — transférer le fichier par chunks
Envoyez les octets avec une ou plusieurs requêtes PATCH. Chaque requête :
- porte
Upload-Offset(nombre d’octets déjà envoyés — commence à0), - utilise
Content-Type: application/offset+octet-stream, - ne doit pas dépasser 50 Mio de corps.
# Premier chunk : octets 0 .. 50 Mio
curl -i -X PATCH "https://api.videas.com/api/external/v1/upload/<session>" \
-H "Authorization: Bearer $VIDEAS_API_KEY" \
-H "Tus-Resumable: 1.0.0" \
-H "Upload-Offset: 0" \
-H "Content-Type: application/offset+octet-stream" \
--data-binary @chunk-0.bin
Chaque réponse 204 renvoie le nouvel Upload-Offset — utilisez-le comme
offset du chunk suivant, et répétez jusqu’à avoir envoyé Upload-Length octets.
Au dernier chunk, la réponse inclut X-Checksum-Blake3.
Une petite boucle, en pseudo-code :
offset = 0
while offset < total:
end = min(offset + CHUNK, total) # CHUNK ≤ 50 Mio
PATCH location, Upload-Offset: offset, body = bytes[offset:end]
offset = response.headers["Upload-Offset"] # offset autoritaire du serveur
Reprendre après une interruption
Si un PATCH échoue ou que la connexion tombe, demandez au serveur où il en est
avec un HEAD, puis reprenez à partir de là :
curl -I "https://api.videas.com/api/external/v1/upload/<session>" \
-H "Authorization: Bearer $VIDEAS_API_KEY" -H "Tus-Resumable: 1.0.0"
# → Upload-Offset: 314572800 (reprendre le PATCH à cet offset)
Un 409 Conflict sur un PATCH signifie que votre Upload-Offset ne
correspond pas à celui du serveur ; l’en-tête Upload-Offset de la réponse
donne le bon. Les sessions expirent après 24 heures — recommencez avec une
nouvelle session au-delà.
Après l’envoi : attendre le traitement
L’asset_uid existe immédiatement, mais la vidéo est traitée de façon
asynchrone. Interrogez-la jusqu’à ce qu’elle soit prête :
curl https://api.videas.com/api/external/v1/assets/ast_.../ \
-H "Authorization: Bearer $VIDEAS_API_KEY"
# → { "status": "ready", … } (ne pas lire/intégrer avant "ready")
Étapes suivantes
- Comment fonctionnent les envois
- Envoyer avec le SDK
- Utiliser l’API REST
POST /upload/, ses en-têtes et ses réponses dans la référence de l’API