Referência
Erros
Como a API do Emailit informa erros. Formatos do corpo da resposta, códigos de status HTTP e o que significam, e soluções para as mensagens de erro mais frequentes.
A API do Emailit usa códigos de status HTTP para informar se uma requisição funcionou. Códigos na faixa 2xx indicam sucesso, códigos 4xx indicam que algo na requisição precisa mudar, e códigos 5xx indicam que algo deu errado do nosso lado. Esta página descreve os corpos de erro, todos os códigos de status que a API retorna e como corrigir os erros mais comuns.
Formatos de resposta de erro
Todo corpo de erro é um objeto JSON com um campo error. O formato exato depende de onde a requisição falhou. Escreva o seu tratamento de erros para ler error, depois message quando estiver presente, e depois quaisquer campos extras que o endpoint documente.
Erros de requisição
Falhas de autenticação, erros de permissão, JSON malformado e outros erros gerados antes de um endpoint ser executado usam o formato de erro HTTP padrão:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "API key required"
}| Campo | Descrição |
|---|---|
statusCode |
O código de status HTTP. |
error |
A frase de motivo HTTP, como Unauthorized ou Forbidden. |
message |
O que deu errado, em linguagem simples. |
Erros de validação
Quando um parâmetro de consulta ou um campo do corpo tem o tipo errado, está ausente ou está fora do intervalo permitido, a API rejeita a requisição com 400 antes de executá-la e lista cada problema em details:
{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation error",
"details": [
{
"instancePath": "/limit",
"schemaPath": "#/properties/limit/maximum",
"keyword": "maximum",
"params": { "comparison": "<=", "limit": 100 },
"message": "must be <= 100"
}
]
}instancePath aponta para o campo (/limit, /to, /attachments/0/filename), e message descreve a regra violada. Em alguns endpoints, como Enviar um e-mail, esses erros retornam apenas {"error": "Bad Request"}.
Erros de recurso
Erros gerados por um endpoint, como um objeto inexistente ou um nome duplicado, retornam error e muitas vezes message:
{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Alguns erros adicionam campos que ajudam você a se recuperar:
| Campo | Retornado com | Contém |
|---|---|---|
existing |
409 quando você cria um domínio, uma chave de API, uma lista de contatos, um contato ou um inscrito duplicado |
O objeto que já existe, para que você possa usá-lo em vez de criar outro. |
usage |
422 quando um limite do plano é atingido |
used, limit e, para listas de contatos, plan. |
required_plan |
403 com error: "plan_required" |
O plano mais básico que inclui o recurso, como pro. |
code |
Alguns erros 403 e 422 |
Um código estável e legível por máquina, como unverified_workspace_recipient ou events_offset_too_large. |
missing |
404 de Atualizar contatos em massa |
Os IDs de contato que não foram encontrados. |
Erros de validação de envio
Enviar um e-mail e Encaminhar um e-mail verificam a mensagem inteira de uma vez e retornam todos os problemas em validation_errors:
{
"error": "Validation failed",
"validation_errors": [
"Missing required field: subject",
"Invalid to email address at index 1: ada@example"
]
}Erros por campo
Templates, campanhas e automações retornam os problemas de validação agrupados por campo:
{
"message": "Validation failed",
"errors": {
"alias": ["Alias must contain only lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-)"]
}
}Erros de limite de requisições
As respostas 429 dos endpoints de envio incluem o limite atingido e quanto tempo esperar. Consulte Limites de requisições.
{
"error": "Rate limit exceeded",
"message": "Too many requests. Maximum 2 messages per second allowed.",
"limit": 2,
"current": 2,
"retry_after": 1
}Códigos de status HTTP
| Código | Significado | Causas típicas na API do Emailit |
|---|---|---|
200 |
OK | A requisição funcionou. Envios, atualizações, exclusões e leituras retornam 200. |
201 |
Created | Um domínio, uma chave de API, uma lista de contatos, um inscrito, um contato, um template, um webhook ou outro objeto foi criado. |
202 |
Accepted | O envio de um relatório DMARC foi aceito para processamento. |
204 |
No Content | Um formulário foi excluído. A resposta não tem corpo. |
400 |
Bad Request | JSON inválido, um campo obrigatório ausente, um valor do tipo errado ou fora do intervalo, um Idempotency-Key inválido ou nenhum campo para atualizar. |
401 |
Unauthorized | A chave de API está ausente, é inválida, foi excluída ou regenerada, ou um token OAuth expirou. Consulte Autenticação. |
402 |
Payment Required | O workspace não tem créditos suficientes para o envio, a nova tentativa ou a verificação. |
403 |
Forbidden | O escopo da chave não permite o endpoint, uma chave restrita a um domínio enviou de outro domínio, o workspace está suspenso ou ainda não foi verificado, o domínio de envio está pausado, ou o recurso exige um plano superior. |
404 |
Not Found | O objeto não existe neste workspace, ou um alias de template não tem versão publicada. |
409 |
Conflict | Já existe um objeto com o mesmo nome ou e-mail, ou uma requisição com o mesmo Idempotency-Key ainda está em execução. |
413 |
Payload Too Large | O e-mail montado tem mais de 40 MB, ou o envio de um relatório DMARC tem mais de 10 MB. |
422 |
Unprocessable Entity | A requisição é válida, mas não pode ser executada agora: o domínio de from não está verificado, um anexo não pôde ser baixado, o status do e-mail não permite cancelar nem tentar de novo, o conteúdo dele já foi apagado, ou um limite do plano foi atingido. |
429 |
Too Many Requests | O workspace atingiu o limite de envio por segundo ou diário, ou o limite de encaminhamentos por hora. |
500 |
Internal Server Error | Algo falhou do nosso lado. Tente de novo com backoff e fale com o suporte se o problema persistir. |
503 |
Service Unavailable | Uma indisponibilidade temporária de uma dependência, como o armazenamento de idempotência ou o banco de dados de autenticação. Tente de novo com backoff. |
Erros comuns e como corrigi-los
| Status | error |
Causa | Solução |
|---|---|---|---|
400 |
Validation failed |
Falta from, to, subject ou conteúdo em um envio, ou ele tem um endereço ou anexo inválido. |
Corrija cada item listado em validation_errors. |
400 |
Invalid JSON in request body (em message) |
O corpo não é um JSON válido. | Verifique as aspas e as vírgulas finais, e envie Content-Type: application/json. |
400 |
Invalid Idempotency-Key |
A chave tem mais de 256 caracteres ou contém caracteres além de letras, dígitos, - e _. |
Use um UUID ou um valor seguro semelhante. |
402 |
Insufficient credits |
Os créditos acabaram. Cada destinatário custa um crédito. | Compre créditos ou ative a recarga automática. |
403 |
Workspace not verified |
O workspace está no modo sandbox e um destinatário não é membro do workspace. | Solicite o acesso de produção. |
403 |
Domain paused |
O envio deste domínio está pausado por causa da saúde de envio dele. | Resolva o problema de bounces ou reclamações e fale com o suporte. |
403 |
Domain not authorized |
A chave de API é restrita a outro domínio de envio. | Envie do domínio da chave ou use outra chave. |
403 |
plan_required |
O recurso, como relatórios DMARC ou filtros de webhook, não está no seu plano. | Faça upgrade para o plano indicado em required_plan. |
403 |
mjml_alpha |
A requisição cria ou altera MJML, ou chama um endpoint de MJML. O MJML está em alfa e aberto apenas à equipe do Emailit. | Use outro editor ou outro tipo de conteúdo. Consulte Editores e API de MJML. |
404 |
Template not found |
O ID do template não existe, ou o alias não tem versão publicada. | Publique uma versão do template. |
409 |
… already exists |
Você criou um objeto com um nome ou e-mail que já está em uso. | Use o objeto em existing ou escolha outro nome. |
409 |
Idempotency key in progress |
Outra requisição com a mesma chave ainda não terminou. | Aguarde um momento e tente de novo com a mesma chave. |
413 |
Message too large |
O e-mail, incluindo os anexos, tem mais de 40 MB. | Envie arquivos grandes como links em vez de anexos. |
422 |
Domain not verified |
O endereço from não está em um domínio de envio verificado deste workspace. |
Verifique o domínio ou altere from. |
422 |
Attachment error |
A url de um anexo não pôde ser baixada em até 30 segundos, não está acessível ou tem mais de 25 MB. |
Confira se a URL é pública e se o arquivo é pequeno o suficiente, ou envie content no lugar. |
422 |
Cannot cancel email, Cannot retry email, Cannot update email |
O status do e-mail não permite a ação, faltam menos de 3 minutos para o horário agendado, ou o conteúdo dele foi apagado. | Verifique o status do e-mail. Consulte as regras de cada endpoint. |
422 |
Page is too deep |
Você paginou além do offset 2.500 de Listar eventos. | Restrinja os resultados com filtros type ou created_at. |
429 |
Rate limit exceeded, Daily limit exceeded |
O workspace atingiu o limite de envio. | Aguarde retry_after segundos. Consulte Limites de requisições. |
Tentar de novo com segurança
- Tente de novo as respostas
429,500e503depois de um intervalo. Use o cabeçalhoretry-afterquando ele estiver presente e, caso contrário, backoff exponencial. Limites de requisições tem código de exemplo. - Não repita sem alterações as requisições com outros erros
4xx. Elas falham da mesma forma até você corrigir a requisição. - Ao tentar enviar de novo depois de um timeout ou de um erro
5xx, reutilize o mesmoIdempotency-Keypara que o e-mail não seja enviado duas vezes.