Publicar en tu propio sitio web: el feed por API
Para el dueño del sitio y el desarrollador: cómo crear una conexión y guardar la clave, qué solicitudes usa el sitio para pedir materiales y confirmar publicaciones, y qué hacer ante un error 401.
Para el dueño del sitio y el desarrollador: cómo crear una conexión y guardar la clave, qué solicitudes usa el sitio para pedir materiales y confirmar publicaciones, y qué hacer ante un error 401.
Después de este artículo tu sitio web recogerá los materiales terminados del proyecto (texto, imágenes, video) y los publicará por sí mismo. El dueño necesita unos minutos para generar una clave; el desarrollador, escribir tres solicitudes. El sitio no genera nada, solo recibe lo que ya está listo.
Telematic no obtiene acceso a tu sitio web. El sitio pide materiales nuevos de vez en cuando y los recibe en formato JSON. Una vez publicado un material, lo informa, y en el proyecto ese material pasa a estar publicado.
Puedes conectar varios sitios web a un mismo proyecto. Cada uno tiene su propia clave y su propio registro de lo que ya publicó; todos los sitios ven los mismos materiales.

Aparece el bloque "Tu clave secreta". La clave empieza con tlmf_.
Importante. La clave se muestra una sola vez: el servicio solo guarda su huella. Cópiala de inmediato y pásasela a tu desarrollador de forma segura. Si la pierdes, genera una nueva.
Más abajo, en la misma ventana, está "Guía de integración": comandos listos con tu clave y dirección.

La dirección de la API es https://<la dirección de la guía>/api/feed/v1. La parte /api es obligatoria: sin ella, la solicitud llega al sitio normal. Cada solicitud lleva la cabecera Authorization: Bearer <clave>.
| Solicitud | Qué hace |
|---|---|
GET /me | comprueba la clave y devuelve el proyecto y los ajustes del feed |
GET /content?since=&limit= | los materiales listos que este sitio aún no confirmó; primero los más antiguos |
GET /content/{id} | un material, incluido uno ya confirmado, para actualizar tu copia |
POST /content/{id}/ack | confirma la publicación en el sitio |
POST /content/{id}/stats | envía visualizaciones y reacciones |
GET /openapi.json | una descripción de la API legible por máquina |
BASE="https://<la dirección de la guía>/api/feed/v1"
KEY="tlmf_..."
curl -H "Authorization: Bearer $KEY" "$BASE/content?limit=20"
La respuesta contiene items, nextCursor y un bloque pacing. limit va de 1 a 100 y por defecto es 20. Guarda nextCursor y pásalo como since en tu siguiente solicitud.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"externalId":"123","url":"https://mi-sitio.com/p/123"}' \
"$BASE/content/<ID>/ack"
Todos los campos son opcionales: externalId, url, publishedAt. Después de la confirmación, el material desaparece del feed de ese sitio, y en el proyecto obtiene el estado "Publicado", o se queda en "Publicado parcialmente" mientras otras plataformas todavía lo esperan. Llamarlo de nuevo es seguro.
Para que las cifras de tu sitio lleguen a Estadísticas, envía views, reactions, comments y shares a /content/<ID>/stats. Antes de que un material se confirme, esta solicitud devuelve 404. Nosotros no recopilamos las cifras de tu sitio por nuestra cuenta.
El sitio pregunta por su cuenta, así que la velocidad la fijas tú. En un intervalo, el feed entrega como máximo un material, sea cual sea el limit de la solicitud, y no entrega de golpe lo acumulado tras una inactividad del sitio. El intervalo se cuenta desde la última confirmación.
Cuando un material aún no "toca", la respuesta llega vacía y el bloque pacing explica el motivo:
{ "items": [],
"pacing": { "reason": "interval", "intervalSeconds": 3600,
"nextAvailableAt": "2026-09-19T13:00:00.000Z" } }
reason toma los valores interval (el intervalo no ha pasado), window (ahora mismo estás fuera de la ventana horaria), daily-cap (el límite de hoy se agotó), ready y unlimited. El bloque también trae los campos enabled, source, timeFrom, timeTo, maxPerDay y allowance. La ventana se cuenta en hora del servidor: guíate por nextAvailableAt.
id, title, excerpt: el identificador, el titular, una descripción breve.bodyMarkdown: el texto principal con encabezados, listas e imágenes. Conviértelo a HTML y dale estilo con los estilos de tu sitio. body es el mismo texto sin el formato, se mantiene para conexiones antiguas.topics: normalmente 3 a 7 etiquetas en el idioma del material.sourceUrl, createdAt, updatedAt.media[]: los archivos: type (IMAGE, VIDEO, AUDIO, OTHER), url, width, height, duration, thumbnail. Los enlaces son absolutos.La primera imagen en media es la portada, y no se inserta en el texto. Toma también el video y el audio de media: como máximo un video por orientación. Los videos que esperan tu aprobación no llegan al feed.
En la página del material, la tarjeta del sitio muestra el estado ("Esperando a que el sitio lo extraiga", "Confirmado por el sitio" o "No está en el feed") y la hora de la última vez que el sitio vino a por materiales. El botón "Vista previa" muestra el texto exactamente como lo recibirá el sitio.

En la misma ventana cambias el nombre, los estados y el ritmo; no olvides "Guardar".

Authorization: Bearer … con una solicitud GET /me./api.items vacío. Primero mira pacing.reason y nextAvailableAt. Si dicen ready o unlimited, el proyecto no tiene materiales en los estados que elegiste: primero hay que aceptar un borrador, consulta Trabajar con el contenido.ack.