Ir al contenido
howmuchusers
Entrar

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 proyecto

Dos 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.

POST /v1/events
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"}'
Node / Next.js
// 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);
}
Navegador
<!-- 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.

POST /v1/users/import
# 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.

GET /v1/status
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.

SVG
<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.

SVG
<img src="https://howmanyusers.wtf/api/badge/tu-startup/trophy.svg?theme=dark&lang=es" alt="" height="44" />

Referencia completa

¿Cómo sabemos que estos números son reales?