Enviar um vídeo
Há dois caminhos de ingest. Escolha conforme onde o arquivo está.
Opção A — Ingest por URL (1 request)
Seção intitulada “Opção A — Ingest por URL (1 request)”Se o vídeo já está numa URL pública, deixe a plataforma baixá-lo:
curl -X POST https://api.devstreamcore.com/v1/videos \ -H "Authorization: Bearer sc_live_..." \ -H "Content-Type: application/json" \ -d '{ "input": [{ "url": "https://exemplo.com/meu-video.mp4" }], "title": "Meu primeiro vídeo", "quality": "1080p" }'Resposta 201 — o objeto Video já com status: "preparing". A
transcodificação começa em background.
Opção B — Upload direto (3 passos)
Seção intitulada “Opção B — Upload direto (3 passos)”Quando o arquivo está no seu lado. Suporta multipart automático (arquivos ≥ 50 MiB).
B.1 — Criar a sessão de upload
Seção intitulada “B.1 — Criar a sessão de upload”curl -X POST https://api.devstreamcore.com/v1/uploads \ -H "Authorization: Bearer sc_live_..." \ -H "Content-Type: application/json" \ -d '{ "new_video_settings": { "title": "Upload do cliente" }, "file_size_bytes": 12345678 }'Resposta (single-PUT, arquivo < 50 MiB):
{ "id": "up_xxxx", "url": "https://.../presigned-put-url", "video_id": "vid_xxxx", "timeout": 3600, "status": "waiting", "cors_origin": null}Para arquivos ≥ 50 MiB (ou multipart: true) a resposta traz parts[] (uma URL
presignada por chunk) + upload_id + chunk_size.
B.2 — Enviar os bytes
Seção intitulada “B.2 — Enviar os bytes”PUT do arquivo direto na(s) URL(s) presignada(s) — sem o header
Authorization (a URL já está assinada):
curl -X PUT "<url-presignada>" \ -H "Content-Type: video/mp4" \ --data-binary @meu-video.mp4No multipart, faça um PUT por chunk e guarde o ETag de cada parte.
B.3 — Finalizar (dispara o transcode)
Seção intitulada “B.3 — Finalizar (dispara o transcode)”curl -X POST https://api.devstreamcore.com/v1/uploads/up_xxxx/finalize \ -H "Authorization: Bearer sc_live_..." \ -H "Content-Type: application/json" \ -d '{ "mime_type": "video/mp4", "file_size_bytes": 12345678, "duration_secs": 92 }'No multipart, inclua também upload_id e parts: [{ partNumber, etag }].
Resposta 200 — o objeto Video. O finalize é idempotente.
Detalhes de cada campo na API Reference.