Erros, limites e boas práticas

Formato de erro, códigos, limites de requisição e como lidar com os limites da Meta.

🇺🇸 Read in English

Formato de erro

{
  "error": true,
  "code": "validation_failed",
  "user_message": "O nome da campanha é obrigatório",
  "request_id": "0b6f…",
  "errors": { "campaign_name": "O nome da campanha é obrigatório" }
}

user_message está sempre em português e pode ser mostrada ao usuário final. Detalhes internos (banco, Meta) nunca são devolvidos — ficam nos logs, ligados ao request_id/log_id.

HTTPcodeSignificado
400invalid_request, invalid_json, selection_missingCorpo fora do formato (o campo vem em user_message e em issues)
401unauthorizedSem credencial, chave revogada/expirada ou token inválido
403insufficient_scopeFalta permissão (veja required_scope)
403selection_denied, forbiddenCliente arquivado, conta de outra BM/desativada/inativa na Meta, recurso de outro usuário
404not_found, campaign_not_found, post_not_found, client_not_found, client_archivedRecurso inexistente (ou cliente arquivado)
409execution_running, conflict, ambiguous_clientExecução já em andamento / reexecução já feita / mais de um cliente com esse nome (use o id)
422validation_failedRegras de negócio — veja errors por campo
422audiences_unavailablePúblico personalizado que a conta não pode usar
429rate_limitedLimite da API do Media Ops (veja Retry-After)
429meta_rate_limitedA Meta limitou a conta (veja retry_after_seconds)
502upstream_error, meta_errorFalha na Meta ou no Google Drive

Limites da API

Por chave de API (ou aplicativo OAuth), por minuto:

ClasseLimiteExemplos
Leitura300GET, consultas
Escrita60POST/PATCH/DELETE comuns
Pesada10POST /campaigns, /campaigns/validate, /audiences/engagement, sincronizações

As respostas trazem x-ratelimit-limit e x-ratelimit-remaining. Ao receber 429, espere Retry-After segundos.

Limites da Meta

A Meta limita chamadas por conta de anúncio (código 17 e semelhantes). Durante uma criação, o servidor espera e reenvia sozinho — você verá progress.throttle.paused = true. Só depois de 30 minutos de espera o item é marcado como erro.

Para consultas diretas (/meta/*), um bloqueio vira 429 meta_rate_limited com retry_after_seconds.

Boas práticas

  • Valide com POST /campaigns/validate antes de criar.
  • Guarde o job_id. Em caso de queda da sua automação, retome consultando /executions/{job_id}/progress — a criação continua no servidor.
  • Não reenvie POST /campaigns para "tentar de novo": use POST /executions/{job_id}/retry, que reaproveita o que já foi criado.
  • Use chaves com o mínimo de permissões e com validade.
  • Envie x-request-id próprio se quiser correlacionar com seus logs; ele é devolvido na resposta.

Did this page help you?