Player e biblioteca na API.
Controle o player por eventos. Gerencie vídeos, coleções e analytics pela REST versionada.
player.on("timeupdate", ({ currentTime }) =>
setBar(currentTime / player.duration));Ver em profundidadeControle o player por uma API de eventos completa. Gerencie a biblioteca pela REST API versionada. Receba webhook assinado e granular pra cada passo do vídeo. Proteja conteúdo com token de curta duração que o seu backend assina. Tudo documentado, com exemplo que roda. Feito por um desenvolvedor com mais de 15 anos de mercado, pra desenvolvedor.
Eu programo há mais de 15 anos. Boa parte deles integrando vídeo no produto dos outros.
Sei onde isso trava. API que faz pela metade. Webhook que avisa pouco e tarde. Segurança tratada como item de roadmap, não como base.
A Moviie é a ferramenta que eu queria ter recebido pronta. Não porque eu seja especial. Porque já apanhei o suficiente pra saber o que não pode faltar.
Você não precisa acreditar nisso. Lê a doc. Mexe no player aí em cima. Olha a assinatura dos webhooks. O produto fala por mim.
É você quem decide. O resto desta página é a lista de motivos pra decidir pela Moviie.
Entrega o básico e tranca o resto fora do seu alcance. Sem versão, sem OpenAPI, sem automação no que importa. Cada coisa que a API não cobre vira trabalho manual que volta toda semana.
Como a Moviie resolveVocê estiliza até onde deixaram. Passou disso, começa o override de CSS, o hack no DOM, o fork que quebra no próximo update. Sem API de eventos, sua UI nunca fica em sincronia.
Como a Moviie resolvePoucos eventos, sem assinatura, sem retry. Você acaba fazendo polling, fila de gambiarra, e descobre o estado do vídeo perguntando, não sendo avisado. E quando o aviso vem, vem sem como confiar na origem.
Como a Moviie resolveLink aberto, embed que roda em qualquer lugar, chave sem escopo. Proteção vira backlog até o dia em que o vídeo vaza. Aí não é mais detalhe.
Como a Moviie resolveControle o player por eventos. Gerencie vídeos, coleções e analytics pela REST versionada.
player.on("timeupdate", ({ currentTime }) =>
setBar(currentTime / player.duration));Ver em profundidadeVocê assina só o que importa. Cada entrega vem assinada, com retry e contador de tentativa.
{ "type": "video.ready",
"data": { "video": { "id": "…" } } }Ver em profundidadeVídeo privado, token de minutos ligado a um vídeo, URL de asset efêmera.
jwt.sign({ sub: videoId }, signingKey, {
algorithm: "HS256", expiresIn: "5m" });Ver em profundidadeA REST API vive em api.moviie.ai/v1, versionada por prefixo. Você autentica com uma chave Bearer criada no dash, em Settings → API Keys. Lista, busca, atualiza, apaga e sobe vídeo. Organiza em coleções. Puxa métricas de audiência. Tem OpenAPI publicada, então você gera client na sua linguagem sem adivinhar contrato. E o dash espelha tudo isso, com a chave a dois cliques.
# chave secreta criada no dash: Settings > API Keys
curl https://api.moviie.ai/v1/me \
-H "Authorization: Bearer mvi_sua_chave"
# { "organization": { "id": "...", "name": "Acme", "plan": "pro" } }Primeira chamada autenticada em uma linha.
Suba o embed com controls=0 e construa os seus próprios controles. O player expõe a API com métodos pra tudo: play, pause, seek, volume, velocidade, tela cheia, picture-in-picture. E uma API de eventos completa mantém a sua interface em sincronia, mesmo quando o viewer usa atalho de teclado, tecla de mídia ou os controles do sistema. A diferença de um player travado: aqui a UI é sua, e ela nunca mente sobre o estado.
<iframe src="https://watch.moviie.ai/embed/EMBED_ID?controls=0"
allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>// sua UI dirige o player; os eventos mantem ela em sincronia
const player = Moviie.getPlayer(iframe);
player.on("play", () => paintPlaying());
player.on("pause", () => paintPaused());
player.on("timeupdate", ({ currentTime }) =>
setBar(currentTime / player.duration));
seekBar.oninput = (e) =>
player.seek(player.duration * (e.target.value / 100));É o mesmo modelo da demo lá em cima.
Catálogo granular de eventos: upload, encoding, publicação, legenda, capítulo, CTA, e telemetria com milestones de 25, 50, 75 e 100 por cento, completion rate, view milestones e thresholds de banda e storage. Você habilita por endpoint só o que importa. Cada entrega chega assinada com HMAC-SHA256 no header, com contador de tentativa, e retry automático de até seis tentativas com backoff que respeita o seu sistema. E falha de verdade só vira evento depois de confirmada, sem alarme falso de um callback instável.

Um recorte do catálogo. Você liga só o que precisa, por endpoint.
Marque o vídeo como privado e ele não serve nada sem um token válido. Seu backend assina um JWT curto, ligado a um vídeo só, com a chave de assinatura que fica no servidor. O asset volta como URL assinada e efêmera. A chave de assinatura você rotaciona sem downtime e revoga na hora. Some a isso allowed domains e chaves separadas por função: publishable no cliente, secreta no servidor, signing pra tokens. Sem prometer DRM de Hollywood. Proteção por token, URL assinada e domínio, dita na cara.
import jwt from "jsonwebtoken";
// chave de assinatura (mvi_sign_) fica no backend
const token = jwt.sign({ sub: videoId }, signingKeySecret, {
algorithm: "HS256",
keyid: signingKeyId,
expiresIn: "5m", // token curto, por sessao
});<iframe src="https://watch.moviie.ai/embed/EMBED_ID?token=THE_JWT"></iframe>Token errado pro vídeo errado? 403. Sem exceção.
Você não está avaliando um plugin. É a mesma malha de entrega que segura lançamento, área de membros e VSL no pico. Rate limits e SLA
Tudo isso está na doc. Não é promessa, é referência. Abrir a documentação
14 dias de trial completo. Cartão no cadastro, cancelamento em um clique. Sem ligação de vendas. Você sai do trial sabendo se a Moviie resolve o seu problema.