Erros e códigos de status HTTP
Erros da aplicação usam application/problem+json (RFC 9457). Baseie a lógica nos campos estáveis code e action, não no texto legível de detail. Erros de validação incluem em errors a localização em JSON Pointer. Informe o request_id ao entrar em contato com o suporte. Falhas de proxy ou de transporte podem retornar um corpo diferente; por isso, verifique Content-Type antes de interpretar o JSON.
O exemplo sintético 422 a seguir mostra uma sintaxe de e-mail inválida antes da cobrança. O catálogo público de erros lista cada código, status, explicação e ação sugerida.
| Status HTTP | Significado típico | Próximo passo |
|---|---|---|
| 400 / 413 / 415 | JSON malformado, corpo grande demais ou tipo de mídia não suportado. | Corrija a requisição. |
| 401 / 403 | Acesso recusado, restrição da conta ou créditos insuficientes. | Verifique code; corrija o acesso ou recarregue créditos / aguarde a renovação do teste por IP. |
| 422 | Entrada inválida ou opções incompatíveis. | Corrija os campos indicados em errors. |
| 404 / 405 | Rota desconhecida ou método HTTP não suportado. | Verifique o caminho do endpoint e o cabeçalho de resposta Allow. |
| 429 | Limite de taxa ou de simultaneidade. | Aguarde o tempo de Retry-After antes de enviar outra requisição. |
| 500 | Falha inesperada no servidor. | Entre em contato com o suporte informando o request_id; verifique a cobrança antes de fazer uma nova tentativa. |
| 502 / 503 / 504 | Falha do provedor, de uma dependência, da cobrança ou por tempo limite esgotado. | Verifique code, action e billing_status antes de fazer uma nova tentativa. |
{
"type": "urn:genderapi:problem:validation_error",
"title": "validation error",
"status": 422,
"detail": "A valid email address is required.",
"instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
"code": "validation_error",
"request_id": "11111111-1111-4111-8111-111111111111",
"documentation": "https://api.genderapi.io/api/v2/errors",
"action": "correct_request",
"errors": [
{
"pointer": "/value",
"message": "Invalid email address."
}
],
"meta": {
"request_id": "11111111-1111-4111-8111-111111111111",
"duration_ms": 12,
"access": {
"mode": "ip_trial",
"reason": "api_key_missing"
},
"usage": {
"charged_credits": 0,
"remaining_credits": null,
"billing_status": "not_charged",
"resets_at": "2026-09-26T12:00:00.000Z",
"limit": 10,
"period_seconds": 86400
}
}
}Campos da resposta de erro
| Campo | Tipo | Pode ser null | Exemplo | Descrição |
|---|---|---|---|---|
type | string | Não | "urn:genderapi:problem:validation_error" | URI que identifica o tipo de problema. |
title | string | Não | "validation error" | Título curto do erro, legível por pessoas. |
status | integer | Não | 422 | Código de status HTTP. |
detail | string | Não | "The request does not match the schema." | Explicação desta falha específica. |
instance | string | Não | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Identificador da requisição com falha. |
code | string | Não | "validation_error" | Código de erro estável, legível por máquina. |
request_id | string | Não | "550e8400-e29b-41d4-a716-446655440000" | Identificador único desta tentativa HTTP; também enviado em X-Request-ID. |
documentation | string | Não | "https://api.genderapi.io/api/v2/errors" | Link para o catálogo de erros, quando fornecido. |
action | string | Não | "correct_request" | Ação de recuperação sugerida, quando definida no catálogo de erros. |
errors | array<object> | Não | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Problemas de validação, quando disponíveis. Cada item contém pointer e message. |
errors[].pointer | string | Não | "/value" | JSON Pointer que identifica a entrada inválida. |
errors[].message | string | Não | "must NOT have fewer than 1 characters" | Explicação do problema de validação. |
Metadados de acesso, cobrança e requisição
| Campo | Tipo | Pode ser null | Exemplo | Descrição |
|---|---|---|---|---|
meta.request_id | string | Não | "550e8400-e29b-41d4-a716-446655440000" | Identificador único desta tentativa HTTP; também enviado em X-Request-ID. |
meta.duration_ms | integer | Não | 42 | Tempo de processamento da requisição em milissegundos. |
meta.access.mode | string | Não | "api_key" | api_key, ip_trial ou unauthenticated. Verifique api_key ao usar uma conta paga. |
meta.access.reason | string | Sim | null | Motivo do uso do teste por IP: api_key_missing, api_key_invalid ou api_key_not_found; caso contrário, null. |
meta.usage.charged_credits | integer | Sim | 1 | Créditos líquidos cobrados. Zero antes da cobrança ou após reembolso integral confirmado; null se a cobrança não estiver confirmada. |
meta.usage.remaining_credits | integer | Sim | 99 | Saldo ao concluir a operação. Pode ser negativo; null se indisponível ou se a cobrança não estiver confirmada. |
meta.usage.billing_status | string | Não | "confirmed" | not_charged, confirmed ou unconfirmed. Verifique antes de repetir uma previsão com falha. |
meta.usage.resets_at | string | Sim | "2026-09-27T12:00:00.000Z" | Momento da renovação do teste por IP em UTC (ISO 8601); null para contas com chave de API ou quando desconhecido. |
meta.usage.limit | integer | Sim | 10 | Cota do teste por IP; null para contas com chave de API. |
meta.usage.period_seconds | integer | Sim | 86400 | Janela do teste por IP em segundos; null para contas com chave de API. |
Novas tentativas e cobrança
Cada requisição de previsão é uma nova operação, inclusive uma requisição idêntica enviada novamente. As regras normais de créditos se aplicam a cada requisição. Não há proteção contra requisições duplicadas; por isso, evite novas tentativas automáticas após uma perda de conexão ou quando o resultado da operação for desconhecido.
Em uma resposta 429, aguarde o tempo de Retry-After antes de enviar outra requisição. Em falhas de previsão, verifique primeiro code, action e meta.usage.billing_status. Em caso de billing_reconciliation_required ou de cobrança não confirmada, entre em contato com o suporte informando o request_id antes de fazer uma nova tentativa.
Um lote parcialmente bem-sucedido pode retornar HTTP 200. Verifique cada item e reenvie apenas os itens com falha depois que a cobrança for confirmada; itens bem-sucedidos seriam cobrados novamente se fossem reenviados.
X-Request-ID e meta.request_id identificam a tentativa HTTP atual. Consulte /usage para ver o saldo atual. HEAD não inicia uma previsão cobrada. Respostas de previsão e de conta não podem ser armazenadas em cache.
Os clientes devem tolerar novos campos adicionados à resposta e preservar valores null quando a informação não estiver disponível.
Limites de requisições
Trate HTTP 429 e Retry-After em vez de presumir que as requisições sempre serão aceitas até esses limites. A capacidade do serviço é compartilhada. Os valores mostrados são os padrões atuais do serviço. Respostas de limite de taxa incluem X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset (segundos Unix). Retry-After é um intervalo em segundos. Esses cabeçalhos descrevem limites de requisições, não créditos restantes. Até a consulta gratuita a /usage conta para os limites de taxa.
| Limite | Valor |
|---|---|
| Corpo JSON da requisição | No máximo 64 KiB |
| Valor da previsão | 1–254 caracteres |
| Lote | 50 itens com chave de API; 10 com o teste por IP |
| Limite por conta | 120 requisições por minuto |
| Limite por IP | 600 requisições por minuto |
| Operações simultâneas | 2 por conta; 16 em todo o serviço |