Publicar um vídeo ponta a ponta
O caminho completo, do arquivo no disco ao item publicado na rede. Cada passo tem a rota na referência.
/v1/media)./v1/posts).Conferir os canais
GET /v1/channels lista os canais conectados e quantos horários cada um tem. Conecte as redes no painel, em Canais; o item com connected: false ainda não foi conectado.
curl https://praeko.app/v1/channels \
-H "Authorization: Bearer $PRAEKO_KEY" -H "X-Praeko-Contract: en"Subir o vídeo
POST /v1/media cria a mídia. Até 50 MiB, com simple: true, envie o arquivo todo em PUT /v1/media/:id/content. Acima disso, o envio é em partes: veja Enviar mídia.
curl -X POST https://praeko.app/v1/media \
-H "Authorization: Bearer $PRAEKO_KEY" -H "X-Praeko-Contract: en" \
-H "Content-Type: application/json" \
-d '{ "type": "video", "name": "v.mp4", "mime": "video/mp4", "size": 8123456, "simple": true }'
# resposta: { "id": "…", "state": "uploading", … }
curl -X PUT https://praeko.app/v1/media/$MEDIA_ID/content \
-H "Authorization: Bearer $PRAEKO_KEY" -H "Content-Type: video/mp4" \
--data-binary @v.mp4Criar o post
Um post tem um item por rede. Cada item usa o próximo horário livre do canal (queue: true), um horário fixo (scheduledFor, em ISO 8601 UTC) ou fica como rascunho (draft: true). O texto de cada rede vai em texts. Com mode você escolhe a visibilidade: YouTube private, scheduled ou public; TikTok draft ou direct; Instagram now.
curl -X POST https://praeko.app/v1/posts \
-H "Authorization: Bearer $PRAEKO_KEY" -H "X-Praeko-Contract: en" \
-H "Content-Type: application/json" \
-d '{ "title": "Meu vídeo",
"media": { "video": "'$MEDIA_ID'" },
"texts": { "youtube": { "text": "Descrição" }, "tiktok": { "text": "Legenda" } },
"items": [
{ "network": "youtube", "queue": true },
{ "network": "tiktok", "scheduledFor": "2026-11-10T20:30:00Z" }
] }'A resposta é 201 com o id do post e um item por rede, cada um com state e scheduledFor.
Conferir o resultado
GET /v1/posts/:id devolve o post com os itens. O state de um item é draft, scheduled, sent, private (no YouTube, enviado como privado, esperando você), error ou canceled. Para não ficar perguntando, cadastre um webhook: post.sent avisa quando saiu e post.failed quando o item desistiu.
Depois de criar
| Quero | Rota |
|---|---|
| Mudar título, texto, horário ou mover para o rascunho | PATCH /v1/posts/:id |
| Publicar agora um item da fila | POST /v1/posts/:id/publish-now |
| Cancelar os itens pendentes | DELETE /v1/posts/:id |
| Ver o que está agendado e os horários livres | GET /v1/calendar |
PATCH /v1/posts/:id ainda muda o horário (pelo menos 5 minutos à frente), o título, a descrição e o comentário fixo, conferindo o vídeo ao vivo; a resposta traz itemResults por item. Vídeo já público responde 409 video_not_private; horário que já passou, 409 not_editable. Cancelar com DELETE não segura esse vídeo: o YouTube o publica no horário. Use ?dismiss=true para tirar o horário (ele fica privado) ou ?dismiss=true&delete_video=true para apagá-lo.409 media_locked; apagar uma mídia usada por um post pendente responde 409 media_in_use.Idempotency-Key e a repetição recebe a resposta da primeira vez, sem criar outro post: saiba como. Sem o cabeçalho, mande o seu próprio id (repetido, volta 409 id_exists).