· 3 min de lectura
Programa publicaciones en redes con una API: X, LinkedIn y Bluesky en una sola llamada
Una guía práctica para programar publicaciones en X, LinkedIn y Bluesky desde código, con las zonas horarias, los reintentos y los webhooks resueltos.
Si estás añadiendo programación a un producto (un CMS, una herramienta de newsletters o un asistente de contenido con IA), enseguida verás que cada red lo resuelve a su manera. Unas tienen programación nativa limitada, otras no tienen ninguna, y cada una trae su propia autenticación, sus límites y sus formas de fallar.
Lo habitual es guardar la publicación, lanzar un trabajo a la hora prevista y llamar a cada API. Eso significa que el sistema de programación, la política de reintentos, la renovación de tokens y los errores que ve el usuario pasan a ser tuyos.
Hay un camino más corto.
La versión de una sola petición
curl -X POST https://hapi.tools/v1/posts \
-H "Authorization: Bearer $HAPI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: campaign-42-post-1" \
-d '{
"content": "Our winter release is live. Here is what is new 👇",
"platforms": ["x", "linkedin", "bluesky"],
"scheduledAt": "2026-12-01T09:00:00-03:00",
"timezone": "America/Sao_Paulo"
}'Qué ocurre:
- Hapi valida el contenido contra los límites reales de cada plataforma antes de aceptarlo. Si el texto es demasiado largo para Bluesky o para X, recibes el error de validación ahora, no una publicación fallida a las 9:00.
- La publicación queda programada para ese instante exacto, etiquetada con la zona horaria en la que se planificó.
- A la hora de publicar, Hapi renueva los tokens si hace falta, publica en cada cuenta y registra el resultado de cada una.
- Tu endpoint de webhook recibe un evento firmado,
post.publishedopost.failed, por cada resultado.
Zonas horarias que no dan sorpresas
Envía siempre scheduledAt como una marca ISO 8601 con desfase (2026-12-01T09:00:00-03:00) o en UTC (2026-12-01T12:00:00Z). Una hora sin desfase se rechaza con un error de validación, así que una publicación no puede salir a la hora equivocada por el reloj del servidor. Añade una timezone IANA, como America/Sao_Paulo, para dejar constancia de la hora local con la que se planificó.
Consejo: deja que una librería de fechas calcule el desfase, y el horario de verano queda resuelto. Con Luxon: DateTime.fromISO("2026-12-01T09:00", { zone: "America/Sao_Paulo" }).toISO() devuelve 2026-12-01T09:00:00.000-03:00, que Hapi acepta tal cual.
Un texto distinto en cada red
LinkedIn premia los textos largos, Bluesky corta en 300 caracteres y X tiene sus propios límites. Con platformOptions adaptas cada uno en la misma petición:
"platformOptions": {
"linkedin": { "content": "Our winter release is live.\n\nThree things our customers asked for most: ..." },
"bluesky": { "content": "Winter release is live ❄️ hapi.tools/changelog" }
}Entérate cuando algo falla
En muchos sistemas caseros, lo programado falla en silencio. Hapi firma cada webhook con HMAC-SHA256 y reintenta la entrega con backoff exponencial (hasta 6 intentos):
hapi-signature: t=1764590400,v1=5f2b...Verifica la firma y avisa al usuario enseguida: «Tu publicación de LinkedIn no salió porque la cuenta se desconectó. ¿La reconectas?»
Reprogramar o cancelar
Las publicaciones programadas son recursos normales. Puedes consultarlas, cambiar scheduledAt o borrarlas en /v1/posts/{id}. El panel de Hapi también tiene un calendario de arrastrar y soltar, por si el equipo prefiere gestionarlas a mano.
Qué plataformas están disponibles
Ahora mismo, programar y publicar está en producción en X, LinkedIn, Bluesky, Telegram, Discord y Slack. Instagram, TikTok, YouTube, Threads, Facebook, Pinterest y otras están en modo sandbox: la misma API, validada contra los límites reales de cada plataforma, con resultados simulados. Puedes construir y probar la interfaz ya, y hacer el cambio cuando pasen a producción.
Pruébalo
Crea una clave gratis y programa tu primera publicación →
Pruébalo todo durante 15 días por 5 USD. Growth: 25 cuentas, 5000 publicaciones al mes y webhooks por 49 USD al mes. Consulta los precios.