meu ecommercedevelopers

Erros e limites

Respostas HTTP, falhas de negócio e como tentar novamente.

Erros REST

{
  "error": {
    "code": "invalid_api_key",
    "message": "Chave de API inválida."
  }
}

actionUrl pode aparecer dentro de error quando o lojista precisa concluir uma ação.

StatusExemplos de códigoAção
400invalid_json, invalid_body, invalid_destination_cep, too_many_items, too_many_codesCorrija a requisição
401missing_api_key, invalid_api_keyRevise o header e a credencial
403secret_key_required, wrong_key_scopeUse a credencial com o escopo correto
402subscription_required, free_quota_exceededConfira o acesso ao plano e a actionUrl; free_quota_exceeded traz Retry-After até a virada do mês
404merchant_not_foundConfira a loja vinculada à credencial
405method_not_allowedUse o método documentado
413payload_too_largeReduza o corpo JSON
429rate_limitedAguarde os segundos indicados em Retry-After
502quote_failed, track_failedTrate a indisponibilidade temporária

Respostas vazias

200 não garante cotação disponível. Examine rates, reason e actionUrl. Exemplos incluem no_services_enabled e correios_auth_failed, que pedem revisão da configuração da loja.

No MCP, examine structuredContent.reason e o texto em content, mesmo quando a chamada ao protocolo foi concluída.

Validação de etiquetas no MCP

invalid_invoice_key indica que invoiceKey foi informada sem exatamente 44 dígitos após remover espaços e separadores. Peça a chave completa da NF-e; o MCP rejeita a solicitação antes de emitir nos Correios. Não complete dígitos ausentes nem troque automaticamente para DC-e.

declaration_required indica que faltam itens em declaredItems quando invoiceKey não foi informada. Nesse caso, a emissão também é bloqueada antes da chamada aos Correios. Consulte o guia de etiquetas.

Limites da implementação REST

LimiteValor
Itens por cotaçãoAté 50 linhas de itens
Códigos por rastreamentoAté 50 códigos
Corpo JSONAté 32.000 bytes

Limites de uso por loja

Os limites valem por loja e por operação, e são os mesmos na API REST e no Meu Ecommerce MCP.

OperaçãoPor minuto
Cotação (/v1/rates, get_shipping_rates)60
Rastreio (/v1/tracking, track_shipment)30
Download de etiqueta (get_label_pdf)30
Emissão de etiqueta (generate_label)20

Acima do limite por minuto, a resposta é rate_limited (REST 429, com Retry-After). A janela é o minuto do relógio em UTC, não os últimos 60 segundos.

Loja sem plano ativo está no plano Grátis e pode fazer até 10 chamadas por mês de cada operação. Depois disso, a resposta é free_quota_exceeded (REST 402), com actionUrl para assinar e Retry-After até o início do próximo mês em UTC. Lojas com plano ativo não têm limite mensal.

Planos

PlanoChamadas por mês, por operaçãoEmbalagens usadas no cálculo
Grátis (sem assinatura)101
ProSem limite1
AvançadoSem limiteAté 5

Todos os planos têm os limites por minuto acima. Embalagens cadastradas além do limite do plano ficam salvas, mas não entram na cotação. Assinatura e planos ficam no painel.

No MCP, os mesmos motivos aparecem em structuredContent.reason, com retryAfterSeconds.

Os valores descrevem a configuração atual da implementação, não uma garantia de capacidade. Sua integração deve sempre tratar 429 e 402.

Novas tentativas

Para cotação e rastreio, use espera progressiva com variação e um número máximo de tentativas em falhas transitórias. Não repita automaticamente erros de configuração ou autenticação.

requestId pode ajudar a correlacionar uma cotação. A implementação não documenta garantia de deduplicação por esse campo.

Na emissão de etiquetas, uma nova tentativa pode criar outra pré-postagem. Se já recebeu um identificador, use get_label_pdf para recuperar o PDF. Sem ele, consulte a tentativa com diagnose_label_issue.

Nesta página