Blog

· 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

bash
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:

  1. 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.
  2. La publicación queda programada para ese instante exacto, etiquetada con la zona horaria en la que se planificó.
  3. A la hora de publicar, Hapi renueva los tokens si hace falta, publica en cada cuenta y registra el resultado de cada una.
  4. Tu endpoint de webhook recibe un evento firmado, post.published o post.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:

json
"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):

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