InstaPoster API

Envie vídeos para aprovação, aprove, rejeite e acompanhe a publicação dos Reels. Base: https://instaposter-api.gyttech.com

Autenticação

Todas as rotas (exceto esta página e /saude) exigem o cabeçalho:

Authorization: Bearer SEU_TOKEN

Sem token ou com token inválido: 401. Depois de 20 tentativas inválidas em 15 minutos, o IP recebe 429.

Ciclo de vida de um vídeo

pendenteaguardando aprovação
na_filaaprovado; publica sozinho em segundos (ou quando liberar o limite de 24h)
publicadono Instagram, com link
erroa Meta recusou 3 vezes; veja erro
rejeitadodescartado; pode restaurar ou excluir

O id de cada vídeo é o nome sem extensão no padrão NNN_nome-curto (ex.: 012_dica-de-treino). Os números definem a ordem e não podem se repetir; o próximo livre vem em GET /v1/status.

Exemplo completo

TOKEN=seu_token
API=https://instaposter-api.gyttech.com

# 1. próximo número livre
curl -s -H "Authorization: Bearer $TOKEN" $API/v1/status

# 2. legenda (antes ou depois do vídeo)
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: text/plain; charset=utf-8" \
     --data-binary @012_dica-de-treino.txt $API/v1/videos/012_dica-de-treino/legenda

# 3. vídeo (corpo = bytes do arquivo)
curl -s -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: video/mp4" \
     -T 012_dica-de-treino.mp4 $API/v1/videos/012_dica-de-treino/video

# 4. (opcional) aprovar pela API — ou deixe para aprovar no painel
curl -s -X POST -H "Authorization: Bearer $TOKEN" $API/v1/videos/012_dica-de-treino/aprovar

# 5. acompanhar até virar "publicado" e pegar o link
curl -s -H "Authorization: Bearer $TOKEN" $API/v1/videos/012_dica-de-treino

Rotas

GET/v1/status

Publicação em andamento, limite de 24h (usados, maximo, libera_em), contagem por status e proximo_numero.

GET/v1/videos?status=pendente,na_fila

Lista vídeos. status é opcional (vários separados por vírgula): pendente, na_fila, publicado, erro, rejeitado.

GET/v1/videos/{id}

Detalhes de um vídeo: status, legenda, duração, orientação, checagem técnica, e para publicados link, media_id e publicado_em.

PUT/v1/videos/{id}/video

Envia o arquivo de vídeo (até 1 GB) para pendente. Content-Type: video/mp4 ou video/quicktime (ou ?formato=mov). Responde 201 com o vídeo e a checagem técnica. 409 se o id já existir.

PUT/v1/videos/{id}/legenda

Define a legenda: corpo em text/plain ou JSON {"legenda": "..."}. Máximo 2.200 caracteres e 30 hashtags (422 se passar). Funciona para vídeos pendentes ou na fila, ou antes do vídeo existir (status aguardando_video).

POST/v1/videos/{id}/aprovar

Pendente → na fila; o painel publica em seguida. Se a checagem técnica tiver problemas, responde 422 com a lista; use ?forcar=true para aprovar mesmo assim.

POST/v1/videos/{id}/rejeitar

Pendente → rejeitado.

POST/v1/videos/{id}/desaprovar

Na fila → pendente (se ainda não começou a publicar; senão 409).

POST/v1/videos/{id}/restaurar

Erro ou rejeitado → pendente.

DELETE/v1/videos/{id}

Apaga definitivamente um vídeo rejeitado. Responde 204.

GET/v1/videos/{id}/video · /v1/videos/{id}/miniatura

Baixa o arquivo (aceita Range) ou uma miniatura JPEG.

GET/v1/log?linhas=100

Últimas linhas do log de publicação (máximo 500).

Erros

CódigoQuando
400Parâmetro ou id inválido
401Token ausente ou inválido
404Vídeo ou rota não encontrados
409Ação incompatível com o status atual, ou id já usado
413Arquivo maior que 1 GB
422Legenda fora dos limites, ou checagem técnica falhou ao aprovar
429Muitas tentativas com token inválido

Todas as respostas de erro têm o formato {"erro": "mensagem"}.