Tutoriales
Threads profile en JavaScript
Una llamada autenticada a /api/v1/threads/profile?handle=nasa, la respuesta que devolvió, y la línea que saca un campo de ella.
Lo que necesitas
Node 18 o posterior, donde fetch es global. Ningún paquete que instalar. El mismo código corre en un navegador, salvo que un navegador dejaría tu clave a la vista — llama a esto desde tu servidor.
La llamada
const url = "https://honesthook.com/api/v1/threads/profile?handle=nasa";
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.HH_KEY}` },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const envelope = await response.json();
console.log(envelope.success, envelope.platform, envelope.endpoint);
Lo que volvió
{
"success": true,
"platform": "threads",
"endpoint": "threads/profile",
"data": {
"author": {
"id": "28829152388",
"handle": "nasa",
"name": "NASA",
"followers": 12736811,
"following": null,
"posts_count": null,
"verified": true,
"is_private": false
}
},
"error": null,
"cached": false
}
Respuesta registrada, capturada el 15 Sep 2026. Una llamada en vivo devuelve el valor del momento en que preguntas, no este.
Todos los campos de esa captura
| En JavaScript | Tipo en esta captura |
|---|
envelope.success | boolean |
envelope.platform | string |
envelope.endpoint | string |
envelope.data.author.id | string |
envelope.data.author.handle | string |
envelope.data.author.name | string |
envelope.data.author.followers | number |
envelope.data.author.following | null |
envelope.data.author.posts_count | null |
envelope.data.author.verified | boolean |
envelope.data.author.is_private | boolean |
envelope.error | null |
envelope.cached | boolean |
Un campo que no podemos leer vuelve null, nunca 0. Un cero sería una afirmación sobre la cuenta; null es un hecho sobre nuestra recolección. La lista completa de lo que esta ruta no devuelve está en threads-api/profile.
Leer un campo
console.log(envelope.data.author.followers);
envelope es el objeto del bloque de arriba. Deja la clave en el servidor: una clave enviada a un navegador es una clave que cualquiera puede leer.
Lee esto antes de ejecutar nada
La llamada de esta página va a nuestro endpoint. No va a Threads. La diferencia es la razón entera de que la ruta exista, y es lo único que hay que tener claro antes de copiar nada.
Un curl normal apuntado a Threads no falla. Devuelve 200 y una página grande — y el número de seguidores no está en ella. Threads sirve el objeto que lleva el contador solo a un cliente cuyo handshake TLS se parece al de un navegador. Misma URL, misma dirección, firma distinta, página distinta.
Así que un tutorial que te apuntara directo a Threads te estaría enseñando a construir algo que informa de éxito y de ningún dato. Lo que llamas aquí es honesthook.com, y el cliente que se hace pasar por navegador está detrás.
Qué estás llamando
Un GET autenticado a nuestro endpoint, con tu clave en una cabecera Authorization. El handle del ejemplo es el que produjo la respuesta registrada más abajo.
Antes de copiar el bloque
Guarda la clave en una variable de entorno — los tres ejemplos leen HH_KEY.
Luego lee la respuesta tal como es. Threads no publica todo lo que publicaría un perfil de otra parte, y lo que no publica vuelve null y no 0. Qué campos son esos, y por qué, está en /threads-api/profile.
El endpoint en sí
Parámetros, el formato del handle, lo que la ruta no devuelve y lo que cuesta una llamada: threads-api/profile.
La misma llamada en curl · Python.
← Tutoriales · threads-api · Precios