Errores y códigos de estado HTTP
Los errores de la aplicación usan application/problem+json (RFC 9457). Gestiona los errores mediante code y action, cuyos valores son estables, y no mediante el texto de detail. En los errores de validación, errors incluye ubicaciones JSON Pointer de los campos afectados. Facilita request_id al contactar con soporte. Los fallos de conexión o proxy pueden devolver otro contenido; compruebe Content-Type antes de interpretarlo como JSON.
El siguiente ejemplo sintético 422 muestra una sintaxis de correo electrónico no válida antes de la facturación. El catálogo público de errores enumera todos los códigos, estados, explicaciones y acciones sugeridas.
| Estado HTTP | Significado típico | Siguiente paso |
|---|---|---|
| 400 / 413 / 415 | JSON con formato incorrecto, cuerpo de gran tamaño o tipo de medio no compatible. | Corrige la solicitud. |
| 401 / 403 | Acceso rechazado, restricción de cuenta o créditos insuficientes. | Consulta code y corrige el acceso, añade créditos o espera a que se renueve la prueba, según corresponda. |
| 422 | Entrada no válida u opciones incompatibles. | Corrige los campos identificados en errors. |
| 404 / 405 | Ruta desconocida o método HTTP no compatible. | Comprueba la ruta del endpoint y la cabecera de respuesta Allow. |
| 429 | Límite de frecuencia o de solicitudes simultáneas. | Espera el tiempo indicado en Retry-After antes de enviar otra solicitud. |
| 500 | Fallo inesperado del servidor. | Contacta a soporte con request_id; comprueba la facturación antes de volver a intentarlo. |
| 502 / 503 / 504 | Fallo de proveedor, dependencia, facturación o tiempo de espera. | Revisa code, action y billing_status antes de volver a intentarlo. |
{
"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 de la respuesta de error
| Campo | Tipo | ¿Admite null? | Ejemplo | Descripción |
|---|---|---|---|---|
type | string | No | "urn:genderapi:problem:validation_error" | URI que identifica el tipo de problema. |
title | string | No | "validation error" | Título breve del error, legible para personas. |
status | integer | No | 422 | Código de estado HTTP. |
detail | string | No | "The request does not match the schema." | Explicación de este fallo concreto. |
instance | string | No | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Identificador de la solicitud fallida. |
code | string | No | "validation_error" | Código de error estable, legible por software. |
request_id | string | No | "550e8400-e29b-41d4-a716-446655440000" | Identificador único de este intento HTTP; también se envía en X-Request-ID. |
documentation | string | No | "https://api.genderapi.io/api/v2/errors" | Enlace al catálogo de errores, si se incluye. |
action | string | No | "correct_request" | Acción de recuperación sugerida, cuando está definida en el catálogo de errores. |
errors | array<object> | No | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Problemas de validación, si existen. Cada elemento contiene pointer y message. |
errors[].pointer | string | No | "/value" | JSON Pointer que identifica la entrada no válida. |
errors[].message | string | No | "must NOT have fewer than 1 characters" | Explicación del problema de validación. |
Acceso, facturación y metadatos de la solicitud
| Campo | Tipo | ¿Admite null? | Ejemplo | Descripción |
|---|---|---|---|---|
meta.request_id | string | No | "550e8400-e29b-41d4-a716-446655440000" | Identificador único de este intento HTTP; también se envía en X-Request-ID. |
meta.duration_ms | integer | No | 42 | Tiempo de procesamiento de la solicitud en milisegundos. |
meta.access.mode | string | No | "api_key" | api_key, ip_trial o unauthenticated. Comprueba api_key para cualquier integración de cuenta, gratuita o de pago. |
meta.access.reason | string | Sí | null | Motivo del acceso de prueba: api_key_missing, api_key_invalid o api_key_not_found; null en otros casos. |
meta.usage.charged_credits | integer | Sí | 1 | Créditos netos cobrados. Cero antes del cobro o tras un reembolso completo confirmado; null si el cobro no está confirmado. |
meta.usage.remaining_credits | integer | Sí | 99 | Saldo al finalizar la operación. Puede ser negativo; null si no está disponible o el cobro no está confirmado. |
meta.usage.billing_status | string | No | "confirmed" | not_charged, confirmed o unconfirmed. Compruébelo antes de reintentar una predicción fallida. |
meta.usage.resets_at | string | Sí | "2026-09-27T12:00:00.000Z" | Reinicio de la prueba por IP en UTC (ISO 8601); null para cuentas con clave API o si se desconoce. |
meta.usage.limit | integer | Sí | 10 | Créditos de la prueba por IP; null para cuentas con clave API. |
meta.usage.period_seconds | integer | Sí | 86400 | Duración de la prueba por IP en segundos; null para cuentas con clave API. |
Reintentos y facturación
Cada solicitud de predicción es una nueva operación, incluida una solicitud idéntica enviada nuevamente. Se aplican reglas de crédito normales a cada solicitud. No existe protección contra solicitudes duplicadas, así que evite los reintentos automáticos después de una pérdida de conexión o de un resultado desconocido.
Ante HTTP 429, espera el tiempo indicado en Retry-After. Si falla una predicción, revisa primero code, action y meta.usage.billing_status. Ante billing_reconciliation_required o un cobro unconfirmed, contacta con soporte e incluye request_id antes de repetir la solicitud.
Un lote parcialmente exitoso puede devolver HTTP 200. Comprueba cada elemento y vuelva a enviar solo los elementos fallidos después de confirmar la facturación; Los elementos exitosos se facturarán nuevamente si se vuelven a enviar.
X-Request-ID y meta.request_id identifican el intento actual de HTTP. Lee /usage para conocer el saldo actual. HEAD no inicia una predicción facturable. Las predicciones y las respuestas de la cuenta no se pueden almacenar en caché.
Los clientes deben tolerar campos de respuesta aditivos y preservar los valores null cuando la información no está disponible.
Límites de solicitudes
Gestiona HTTP 429 y Retry-After en lugar de asumir que las solicitudes siempre se aceptarán en estos límites máximos. La capacidad de servicio es compartida. Los valores mostrados son los valores predeterminados del servicio actual. Las respuestas de límite de velocidad incluyen X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset (segundos Unix). Retry-After es un retraso en segundos. Estos encabezados describen los límites de solicitud, no los créditos restantes. Incluso la lectura gratuita de /usage cuenta para los límites de velocidad.
| Límite | Valor |
|---|---|
| Cuerpo de solicitud JSON | 64 KiB máximo |
| Valor de predicción | 1–254 caracteres |
| Lote | 50 elementos con una clave API; 10 con la prueba IP |
| Frecuencia por cuenta | 120 solicitudes por minuto |
| Frecuencia por IP | 600 solicitudes por minuto |
| Operaciones simultáneas | 2 por cuenta; 16 en todo el servicio |