ACOMPANHAR / Códigos de erro

Por que meu post não foi

Quando uma publicação falha, a gente sempre devolve uma mensagem clara dizendo o porquê. Esta página é o guia rápido de "deu erro X, faça Y".


90% dos erros caem em uma das situações abaixo, e quase todos têm solução rápida. Se nada bate, manda email pra suporte@outposted.one com o request_id ou content_id que aparece no painel.

Os 8 erros mais comuns

1. Chave de acesso inválida — invalid_api_key

A chave que você colou está errada, foi revogada, ou nem existe.

  • Confere se você copiou a chave inteira (32 caracteres depois de opst_live_).
  • Confere se não foi revogada — no painel, Configurações → Chaves de acesso.
  • Se não tem certeza, cria uma chave nova.

2. Texto longo demais — caption_too_long

Cada rede tem limite de caracteres. Você ultrapassou. Reduz ou divide em thread (Threads aceita até 25 posts encadeados).

  • Threads: 500 chars por post
  • Instagram: 2.200 chars
  • LinkedIn: 3.000 chars
  • YouTube título: 100 chars · descrição 5.000

3. Mídia grande demais — media_too_large

Sua foto ou vídeo passou do tamanho máximo. Comprime (HandBrake pra vídeo, TinyPNG pra imagem) ou troca formato (PNG → JPEG, MOV → MP4).

  • Instagram foto: 8 MB · FB foto: 30 MB
  • IG reel: 4 GB · LinkedIn vídeo: 5 GB · YT vídeo: 256 GB

Além do limite da rede, há um teto do Outposted: 100 MB para mídia cujo endereço não informa o tamanho do arquivo. Acontece com mídia enviada por URL externa quando o servidor de lá não diz quanto o arquivo pesa — sem esse dado, a gente precisa ler o arquivo inteiro antes de repassá-lo. Nesse caso, a mensagem do erro diz que o endereço não informa o tamanho. Para resolver:

  • Hospede a mídia num endereço que informe o tamanho (cabeçalho Content-Length) — aí vale só o limite da rede.
  • Ou envie o arquivo pelo upload do Outposted.
  • Ou comprima abaixo de 100 MB.

4. Formato de mídia não suportado — media_unsupported_format

A rede recusou o formato.

  • Use formatos padrão: JPEG/PNG pra foto, MP4 pra vídeo.
  • Vídeo vertical pra reel/short: proporção 9:16.

5. Conexão expirou ou permissão revogada — token_expired / permission_revoked

A permissão que você deu lá no início perdeu validade. Trocou senha da rede, ou Meta/Google forçou re-autenticação.

  • Vai no painel → marca → conexão da rede em questão.
  • Clica em Reconectar e aprova de novo.

Em segundos volta ao normal. Quem publica por ChatGPT, n8n, código vai receber token_expired até você reconectar.

6. Você publicou rápido demais — rate_limited

Bateu o limite de 600 chamadas por minuto do seu workspace. Espera 1 minuto. Se acontece sempre, fala com a gente em suporte@outposted.one pra subir o limite.

7. Atingiu cota da rede — quota_exceeded

Cada rede tem cota própria. Instagram, por exemplo, limita ~25 publicações por dia por conta.

  • Espera o reset (geralmente meia-noite UTC).
  • Distribui posts entre mais conexões se você é agência.

8. Sua marca tem mais de uma conexão nessa rede — connections_required

Você não disse qual usar e a marca tem duas. Olha a lista que devolvemos junto com o erro e reenvia o post escolhendo.

Sua marca tem várias conexões do Facebook. Qual destas?
- Multicargo
- Tomorrow Academy
- DNA da Persuasão

Outros erros

  • "Recurso não encontrado" (not_found) — Você está pedindo algo que não existe (ID errado, ou não é seu). Confere os IDs.
  • "Não tem permissão" (forbidden) — Sua chave é de outro workspace. Confere se você está chamando o workspace certo.
  • "Já foi publicado" (idempotency_conflict) — Você reusou o mesmo código de idempotência com conteúdo diferente. Use código novo ou repita exatamente o mesmo conteúdo.
  • "Problema do nosso lado" (server_error) — Bug nosso, já tá logado. Tenta de novo daqui um pouco. Se persistir, suporte@outposted.one com o request_id.

Catálogo completo

Pra integradores.

Formato canônico

Toda resposta de erro: error (machine-readable), message (human), request_id (rastreamento).

{
  "error": "validation_failed",
  "message": "target_platforms must contain at least 1 item",
  "request_id": "req_abc123"
}

Tabela HTTP status × error

HTTPerrorSignificadoAção
400validation_failedBody inválido contra schema.Veja message com path do campo problemático.
400invalid_requestJSON malformado, header faltando.Cheque Content-Type + corpo.
401invalid_api_keyKey ausente, malformada, revogada ou inexistente.Confira header Authorization.
401invalid_tokenOAuth access_token expirou/revogado.Re-autentique via OAuth.
403forbiddenAPI key não pertence ao workspace.Cheque wsId no path.
403limit_reachedO plano atingiu o teto de um medidor. De ESTOQUE (marcas, conexões, armazenamento de mídia, webhooks, biblioteca de inspirações) ou POR CICLO (criacao_de_conteudos, uma por peça; publicacoes, uma por REDE — publicar em 3 redes consome 3). O corpo é o mesmo nos dois casos e traz meter, limit, used e resolve.Leia resolve: upgrade aumenta o teto; desativar_outra libera vaga desativando outra no painel. Teto por ciclo volta a zero sozinho na virada do plano — apagar o que já foi criado não devolve a cota.
402saldo_insuficienteUma operação que gasta CRÉDITO foi pedida e o saldo não cobre. É 402 e não 403 porque isto se resolve pagando: repetir depois de comprar crédito funciona (recoverable: true). O corpo traz meter, modo, preco_unitario, custo_estimado e saldo_disponivel.Consulte GET /v1/workspaces/{wsId}/wallet/preco ANTES de pedir a operação, e GET .../wallet para ver o extrato. Para recarregar, GET .../wallet/offers devolve os pacotes à venda com o link de pagamento pronto. Ou troque de modo.
402saldo_fragmentadoO saldo TOTAL bastaria, mas esta operação precisa sair de um lote único e nenhum é grande o bastante. Acontece no fim do ciclo, com o lote da concessão quase drenado ao lado de um avulso. O corpo traz maior_lote_disponivel ao lado do saldo total — é ele que limita.Gaste ou aguarde o vencimento de um lote, ou compre crédito para ter um bloco maior.
402lote_vencidoO lote de crédito escolhido para a operação venceu entre a escolha e a cobrança — uma corrida, e o momento em que ela acontece é a virada de ciclo. Nada foi gasto.Tente de novo: a escolha seguinte já não vê esse lote (recoverable: true).
402operacao_sem_precoA operação existe mas ainda não tem preço publicado. Não é "de graça" — é falha fechada de propósito: um esquecimento de catálogo não pode virar produto gratuito em silêncio. Nada foi gasto.Não é erro seu. Fale com o suporte.
404not_foundRecurso não existe ou não é seu.Confirme IDs.
409idempotency_conflictIdempotency-Key reusada com body diferente.Use nova key ou mesmo body.
422connections_requiredBrand tem >1 conexão na mesma plataforma.Reenvie com target_connections.
422platform_not_supportedcontent_type incompatível com platform.Veja /platforms.
422media_too_largeArquivo excede limite da plataforma. O teto do Outposted de 100 MB para mídia de endereço que não informa o tamanho não sai aqui: ele é detectado na publicação e aparece no job (ver tabela de jobs).Comprima ou troque formato.
422caption_too_longTexto excede limite por plataforma.Reduza ou divida em thread.
429rate_limitedLimite 600 req/min por workspace estourado.Veja header Retry-After.
500server_errorBug nosso. Logado em Sentry.Retry com backoff + request_id em ticket.

Erros de OAuth (RFC 6749)

Endpoints /api/oauth/mcp/* seguem RFC 6749. Erros em error + error_description:

errorDescrição
invalid_requestBody malformado, campo obrigatório faltando.
invalid_clientclient_id inexistente, revogado ou client_secret errado.
invalid_grantCode expirado, já usado, ou mismatch de redirect_uri / client_id / PKCE.
unsupported_grant_typeSó authorization_code é suportado.

Erros de plataforma (jobs)

error_codeCategoriaAção
token_expiredAuthReconecte via startOAuthConnection.
permission_revokedAuthUsuário removeu permissões na plataforma. Reconecte.
media_unsupported_formatValidaçãoConverta antes de enviar.
media_too_largeValidaçãoComprima/reencode. Se a mídia veio de endereço que não informa o tamanho, o teto é 100 MB (do Outposted, não da rede): hospede num endereço com Content-Length, use o upload do Outposted ou comprima abaixo de 100 MB. Sem retry automático.
quota_exceededPlataformaAtingiu limite (ex: 25/dia IG). Aguarde reset.
upstream_5xxTransitórioSistema faz retry automático. Sem ação.
upstream_unknownBugEmail pra suporte@outposted.one com job_id.
confirmacao_esgotadaConfirmaçãoA rede não confirmou a publicação dentro do prazo. O post pode ter saído: confira na rede antes de publicar de novo. Se a rede confirmar depois, o job vira published e o conteúdo recebe um evento com corrected: true.
confirmacao_indisponivelConfirmaçãoNão foi possível perguntar à rede como ficou a publicação dentro do prazo. O post pode ter saído: confira na rede antes de publicar de novo. Se a rede confirmar depois, o job vira published e o conteúdo recebe um evento com corrected: true.
post_inexistenteConfirmaçãoAo conferirmos a publicação, ela não foi encontrada, duas vezes seguidas. Confira na rede antes de publicar de novo. Se a publicação aparecer depois, o job vira published e o conteúdo recebe um evento com corrected: true.
Request-ID

Toda resposta inclui X-Request-Id. Inclua-o em qualquer ticket de suporte — faz lookup direto nos logs. Sem ele, é muito mais difícil rastrear.

Próximos passos

Nesta página