social:read
Regla del dato: una métrica en null significa que Meta no entrega ese
valor hoy — porque falta un permiso de App Review o porque no aplica a ese
tipo de medio. Un 0 es un cero de verdad. Nunca convertimos “sin dato” en 0.
Cache: las métricas se refrescan en segundo plano cada 6 horas (Meta
limita a ~120 llamadas/hora por cuenta, cupo compartido con el inbox en vivo).
metricsUpdatedAt dice de cuándo es el dato. ?refresh=true fuerza una
lectura fresca donde está disponible.
GET /social/posts
Listado de publicaciones con métricas, más recientes primero. Paginación por cursor (meta.cursor → ?cursor=).
Response 200
type: "story") traen expiresAt (publicación + 24 h). Meta
deja de servirlas al expirar, pero acá quedan guardadas con las métricas del
último refresco.
GET /social/posts/:id
Un posteo puntual por su id de Meta. Con?refresh=true se lee de Meta en el
momento (gasta 1–2 llamadas del cupo compartido; si no hay cupo devuelve 429
con Retry-After).
GET /social/posts/:id/comments
Los comentarios del posteo con su texto, autor y respuestas anidadas. Lectura en vivo de Meta con cache de 10 minutos;?refresh=true saltea el
cache. limit 1–300 (default 100, sobre los comentarios de primer nivel).
Response 200
GET /social/account/summary
Seguidores actuales por cuenta + serie de crecimiento diaria. Meta no da historial de seguidores con los permisos actuales: la serie la construye Waspy guardando un snapshot por día, así que acumula desde que la función se desplegó.Response 200
De dónde sale cada métrica (Graph API)
Cuando un número no cuadre, este es el campo exacto de Meta del que salió:
✅ = disponible hoy · ⏳ = requiere permisos pendientes de App Review de Meta
(
instagram_business_manage_insights para IG, read_insights para FB). El
código ya los pide: apenas Meta apruebe, las métricas empiezan a llenarse solas
sin ningún deploy.