Documentación
Una llamada HTTP. Dos tipos de clave, y la diferencia entre las dos es la razón entera por la que los números de acá significan algo.
¿Todavía no tenés cuenta? Creá tu proyecto gratis — tus claves quedan listas para copiar en la pestaña Desarrollo.
Crear mi proyectoDos claves, dos permisos
hmu_pk_live_…Clave pública — segura en el navegador. Vistas, sesiones y tus eventos personalizados. No puede crear usuarios, y eso es a propósito.
hmu_sk_live_…Clave secreta — sólo en tu servidor. Altas y bajas de usuarios, importaciones, eventos de suscripción.
Mandar eventos
Un evento, o hasta 100 de una. Un evento malo nunca tira el lote: te devolvemos qué entró y exactamente qué estaba mal en cada rechazo.
curl -X POST https://howmanyusers.wtf/api/v1/events \
-H "Authorization: Bearer $HMU_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"event":"user.created","user_id":"usr_123","created_at":"2026-08-08T20:00:00Z"}'// HowManyUsers — desde tu servidor (Node, Next.js, cualquier backend).
// La clave secreta vive en el entorno. NUNCA en el código del navegador.
async function hmuUserCreated(user) {
const res = await fetch("https://howmanyusers.wtf/api/v1/events", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.HMU_SECRET_KEY}`,
},
body: JSON.stringify({
event: "user.created",
user_id: user.id, // un id estable. No mandes emails ni nombres.
created_at: new Date(user.createdAt).toISOString(),
idempotency_key: `signup:${user.id}`, // reintentar no cuenta dos veces
}),
});
// UN 202 NO ES "SALIÓ BIEN": trae adentro lo que rechazó, y un evento
// rechazado se ve igual que todo en orden si no se mira.
const { rejected } = await res.json();
if (rejected?.length) console.warn("[hmu]", rejected);
}<!-- HowManyUsers — desde el navegador. Alimenta la analítica (dispositivo,
navegador, país, referente). NO cuenta usuarios: eso sólo lo puede hacer
tu servidor con la clave secreta, y es lo que hace que el número valga. -->
<script>
fetch("https://howmanyusers.wtf/api/v1/events", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer hmu_pk_live_..._TU_CLAVE_PUBLICA",
},
body: JSON.stringify({ event: "page.viewed" }),
});
</script>Importar tu historia
Los usuarios que tenías antes de instalarnos. Quedan marcados como importados para siempre: suman a tu total, se aclara en tu perfil público, y no cuentan para los rankings de crecimiento.
# Los usuarios que ya tenías. Quedan marcados como importados: suman a tu
# total, pero no a los rankings de crecimiento. Hasta 1.000 por pedido.
curl -X POST https://howmanyusers.wtf/api/v1/users/import \
-H "Authorization: Bearer $HMU_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"users":[
{"user_id":"usr_1","created_at":"2025-11-03"},
{"user_id":"usr_2","created_at":"2025-11-04"}
]}'Comprobar que anda
La misma cabecera, sin cuerpo. Devuelve live: true apenas llega tu primer evento.
curl https://howmanyusers.wtf/api/v1/status \
-H "Authorization: Bearer $HMU_SECRET_KEY"Badges y contadores
No necesitan clave: dibujan sólo lo que elegiste publicar. El código para pegar, con el enlace de atribución, está en la pestaña Desarrollo de tu proyecto.
<img src="https://howmanyusers.wtf/api/badge/tu-startup.svg?theme=dark&lang=es" alt="" height="44" />Badge de trofeo
Muestra tu última victoria en un desafío y a quién le ganaste. Vacío hasta que ganes uno — la misma dirección arranca a mostrar algo el día que pase.
<img src="https://howmanyusers.wtf/api/badge/tu-startup/trophy.svg?theme=dark&lang=es" alt="" height="44" />