Ejecuta la integración en tu servidor Node.js
Utiliza Node.js 22 o posterior y descarga genderapi-v2.mjs. El módulo ES llama a https://api.genderapi.io/api/v2/gender con una clave Bearer mediante fetch y AbortSignal.timeout integrados; no necesita un paquete npm. La extensión .mjs permite importarlo desde otro módulo ES sin modificar package.json.
Define GENDERAPI_API_KEY en el entorno del servidor. YOUR_API_KEY no es una clave válida. No incluyas la clave real en el control de versiones, cuadernos compartidos, paquetes React/Vue ni código del navegador. El navegador debe llamar a tu servidor autenticado y este debe enviar la petición a GenderAPI.io. Importar el archivo o ejecutarlo sin la opción explícita de demo no envía consultas.
node --version
export GENDERAPI_API_KEY="YOUR_API_KEY"Envía tu primera consulta solo al conjunto de datos
Guarda el código como single.mjs junto al módulo descargado y ejecuta node single.mjs. Envía type: name, value: Alice y options.ai_mode: off. Lee la predicción en response.data y la información de solicitud y facturación en response.meta.
Esta consulta completada cuesta 1 crédito, aunque gender sea null. El nombre de ejemplo no garantiza un resultado. Puedes enviar nombres, correos o usuarios; añade country solo si tienes contexto relevante.
El archivo auxiliar exige un modo de IA explícito y una clave hexadecimal de 24 caracteres. Esto valida el formato, no su existencia. En respuestas correctas verifica que meta.access.mode sea api_key. Rechaza ip_trial como discrepancia de acceso, pero esa comprobación posterior a la respuesta no recupera créditos de prueba ya consumidos.
import { predict, GenderAPIError } from "./genderapi-v2.mjs";
try {
const response = await predict({
type: "name", value: "Alice", options: { ai_mode: "off" },
});
const result = response.data;
console.log(result.result_status, result.gender);
console.log(result.confidence, result.confidence_kind);
console.log(response.meta.usage);
} catch (error) {
if (!(error instanceof GenderAPIError)) throw error;
// Do not log error.body: it can include the submitted value.
console.error("Request failed:", error.code, error.requestId);
process.exitCode = 1;
}Interpreta el resultado junto con sus evidencias
Una asociación inferida no equivale al género declarado por la persona. Conserva por separado el dato original, las evidencias de la respuesta y la información facilitada por la persona. unknown es un resultado válido; no lo conviertas en una categoría inventada.
| Campo | Cómo utilizarlo |
|---|---|
data.gender / data.result_status | Utiliza male o female solo cuando el resultado sea identified. Conserva el valor JSON null cuando sea unknown. |
data.name / data.match | Revisa el nombre devuelto y el candidato seleccionado. Una coincidencia parcial no demuestra que el dato pertenezca a una persona con ese nombre. |
data.confidence / data.confidence_kind | La confianza se expresa entre 0 y 1, o como null. observed_frequency procede de recuentos almacenados; model_reported es una puntuación de IA. Evalúa los umbrales por separado para cada tipo. |
data.source / data.sample_count | Distingue dataset, ai y none. Los resultados de IA no tienen un recuento de muestras almacenadas. El tamaño de la muestra no es una medida de exactitud. |
meta.access.mode | Comprueba api_key en una integración de cuenta. Si falta la clave o no se reconoce, puede utilizarse la prueba compartida por IP. |
meta.usage | Revisa charged_credits y billing_status. Un resultado unknown completado correctamente consume créditos. No recibir la respuesta no demuestra que la consulta haya sido gratuita. |
Conserva la identidad de cada fila en los lotes mixtos
Envía lotes mixtos mediante POST https://api.genderapi.io/api/v2/gender/batch. Se admiten hasta 50 elementos con clave de cuenta o 10 en la prueba por IP. Estos ejemplos requieren una clave de cuenta. Asigna a cada elemento un id estable y único, un modo de IA explícito y country cuando corresponda. Puedes combinar nombres, correos y usuarios.
Revisa cada elemento de data y el resumen meta.summary. HTTP 200 puede incluir errores de elementos; si todos fallan, puede devolverse un Problem de nivel superior con los resultados. Los resultados unknown completados cuentan como succeeded. id e index permiten vincular cada resultado con su fila original.
Divide los trabajos grandes en grupos de hasta 50 y empieza enviándolos secuencialmente. Guarda la respuesta y el uso antes del siguiente grupo. Si hay problemas de conexión, acceso o facturación sin confirmar, detente y aclara el estado del grupo actual. Ajusta la concurrencia según los límites de la cuenta; el límite de elementos no garantiza una velocidad.
import { predictBatch, GenderAPIError } from "./genderapi-v2.mjs";
const items = [
{ id: "row-1", type: "name", value: "Alice", options: { ai_mode: "off" } },
{ id: "row-2", type: "email", value: "alex@example.com", options: { ai_mode: "off" } },
{ id: "row-3", type: "username", value: "sample_handle", options: { ai_mode: "off" } },
];
try {
const response = await predictBatch(items);
for (const item of response.data) {
if (item.error) {
console.log(item.id, "failed", item.error.code);
} else {
console.log(item.id, item.data.result_status, item.data.gender);
}
}
console.log(response.meta.summary, response.meta.usage);
if (response.meta.summary.failed > 0) process.exitCode = 2;
} catch (error) {
if (!(error instanceof GenderAPIError)) throw error;
// error.body can retain an all-failed batch and billing details.
console.error("Batch needs review:", error.code, error.requestId);
process.exitCode = 1;
}Elige cuándo utilizar la IA
forceToGenderize es opcional para nombres, correos electrónicos y nombres de usuario. Si lo activas, omite ai_mode o utiliza fallback; combinarlo con off o always devuelve un error 422. Basta con un saldo inicial positivo para iniciar la consulta, aunque el cargo final deje el saldo por debajo de cero.
El análisis de alias puede devolver un género con name: null. También puede devolver unknown. Ni el respaldo estándar de IA ni el análisis de alias garantizan una respuesta correcta o distinta de null.
El auxiliar JavaScript exige options.ai_mode. Para alias, envía forceToGenderize: true y options: { ai_mode: 'fallback' }.
| Opción de la solicitud | Comportamiento | Créditos por consulta completada |
|---|---|---|
| options.ai_mode: off | Consulta únicamente el conjunto de datos. | 1 crédito, incluido unknown |
| options.ai_mode: fallback | Consulta primero el conjunto de datos y recurre a la IA estándar si no obtiene un género. Es el modo predeterminado de las consultas individuales. | 1 crédito en total, incluido el respaldo de IA |
| options.ai_mode: always | Consulta directamente a la IA. | 2 créditos |
| forceToGenderize: true | Consulta primero el conjunto de datos; si no encuentra un género, permite interpretar el significado de un alias personal, aunque no contenga un nombre real. | 1 crédito si el conjunto de datos resuelve la consulta; 2 en total si se utiliza IA |
Decide cómo continuar después de un error
Los ejemplos envían cada operación una sola vez y no reintentan automáticamente. Cada nuevo envío es una nueva operación facturable. Un error de red o tiempo de espera indica que el cliente no recibió una respuesta completa; no demuestra que el servidor se haya detenido ni que no se hayan consumido créditos.
Guarda request_id y el estado de facturación junto con el registro del trabajo. El objeto de error conserva la respuesta para una revisión controlada; puede contener la entrada original. No escribas el objeto completo, la respuesta ni la clave API en registros rutinarios.
| Situación | Decisión de la aplicación |
|---|---|
| unknown completado | Conserva null, reason y usage. Es un resultado completado y facturable, no un error que deba repetirse automáticamente. |
| 422 | Corrige la entrada indicada en Problem Details antes de enviar una nueva solicitud. |
| 401 / 403 | Comprueba el acceso a la cuenta y los créditos. Repetir la petición no resuelve la causa. |
| 429 | Respeta Retry-After si está presente. Revisa el error y la facturación antes de planificar otro intento. |
| Error de red, tiempo de espera o respuesta ilegible | Registra que el resultado y el cargo no están confirmados. Aclara el estado antes de reenviar; el cliente no puede deshacer una operación ya completada. |
| billing_status: unconfirmed | charged_credits y remaining_credits pueden ser null. Contacta con soporte con request_id; no sustituyas null por cero. |
| Algunos elementos del lote fallan | Guarda primero los completados. Revisa la facturación de los fallidos y reenvía solo los que corresponda, no todo el lote. |
Comprende los tiempos de espera y el comportamiento de conexión
El límite predeterminado es de 10.000 milisegundos mediante AbortSignal.timeout e incluye leer el cuerpo de la respuesta. Detener el cliente no demuestra que el servidor haya detenido el procesamiento o la facturación. El módulo bloquea redirecciones, distingue errores HTTP de respuestas ilegibles y no reintenta automáticamente.
Las pruebas locales usan respuestas simuladas para éxito, unknown, errores parciales, acceso y conexión. No realizan predicciones reales ni consumen créditos; tampoco miden disponibilidad, exactitud o latencia de producción. Cada comando explícito de demo mostrado envía una consulta facturable independiente.
node genderapi-v2.mjs --run-single
# Run separately to submit another billable sample batch:
node genderapi-v2.mjs --run-batchPreguntas frecuentes
¿Puedo ejecutar este código en el navegador?
Ejecuta el código en el servidor para proteger tu clave. Un paquete de navegador expone la clave al usuario. El navegador debe llamar a tu backend autenticado y este debe enviar la solicitud a GenderAPI.io.
¿Es un paquete SDK oficial?
La guía utiliza un archivo auxiliar HTTP descargable, no un SDK publicado por separado en pip o npm. Guárdalo junto a tu aplicación, revísalo y adáptalo a tu caso.
¿Se cobran créditos cuando gender es null?
Sí. Un resultado unknown completado también consume créditos. El ejemplo ai_mode: off de esta guía cuesta 1 crédito. Conserva el resultado y meta.usage; no repitas automáticamente una respuesta desconocida.
¿Puedo reutilizar directamente mi cliente V1?
Estos ejemplos utilizan los campos type/value y la respuesta data/meta de V2. Un paquete o conector V1 puede utilizar otro contrato. No cambies solo la URL: comprueba el endpoint, la autenticación, los campos y la facturación.
Referencias
La referencia API define las solicitudes y respuestas. La documentación del entorno explica las herramientas HTTP utilizadas.