Feeds RSS
Conecta un feed RSS o Atom y convierte cada elemento nuevo en un borrador, una publicación programada o una publicación en las cuentas que elijas, con una plantilla o con textos de IA.
Permiso: posts.read. Consulta Roles y permisos.
Listar y leer feeds y sus elementos necesita posts.read. Crear, previsualizar, actualizar, pausar, reanudar, comprobar y eliminar necesitan posts.draft, más el permiso que pide el modo de publicación del feed: posts.schedule para SCHEDULE, posts.publish para PUBLISH y ai.generate para los textos de IA. Un feed que configuró otro miembro también necesita posts.others para actualizarlo, pausarlo, reanudarlo, comprobarlo o eliminarlo.
Un feed se comprueba según un horario, y cada elemento que aparece después de añadirlo se convierte en una publicación en las cuentas de targets. Cada publicación pasa por las mismas comprobaciones que Crear publicación. Un feed publica como el miembro que lo guardó por última vez: crear, actualizar o reanudar un feed convierte al miembro de la clave en su propietario.
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/rss-feeds | Listar los feeds del espacio de trabajo, los más nuevos primero |
| POST | /api/v1/rss-feeds | Conectar un feed |
| POST | /api/v1/rss-feeds/preview | Leer un feed sin guardarlo y mostrar sus 5 elementos más recientes |
| GET | /api/v1/rss-feeds/:id | Obtener un feed |
| PATCH | /api/v1/rss-feeds/:id | Cambiar los campos que envías. La URL no puede cambiar |
| DELETE | /api/v1/rss-feeds/:id | Dejar de comprobar el feed. Las publicaciones que ya creó se quedan |
| GET | /api/v1/rss-feeds/:id/items | Listar los elementos que ha visto el feed |
| POST | /api/v1/rss-feeds/:id/pause | Pausar el feed |
| POST | /api/v1/rss-feeds/:id/resume | Borrar el motivo de pausa y comprobar el feed en menos de un minuto |
| POST | /api/v1/rss-feeds/:id/check | Adelantar la próxima comprobación a ahora; el feed se lee en menos de un minuto |
POST /api/v1/rss-feeds
Lee el feed y registra cada elemento que ya contiene, para que solo se publiquen los elementos que aparezcan después. Un espacio de trabajo admite hasta 20 feeds.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| url | string | Sí | URL pública http o https de un feed RSS o Atom |
| targets | array | Sí | De 1 a 20 cuentas, cada una { platform, connectionId, pageId }. connectionId es el id de la cuenta en Cuentas sociales, y pageId es obligatorio para FACEBOOK |
| postMode | string | Sí | DRAFT crea un borrador. SCHEDULE programa la publicación publishDelayMinutes después de encontrar el elemento. PUBLISH la publica de inmediato |
| contentMode | string | Sí | TEMPLATE rellena template. AI escribe un texto por plataforma a partir del artículo, añade el enlace y gasta 1 crédito de IA por plataforma y elemento |
| name | string | No | Hasta 120 caracteres. Por defecto, el título del feed |
| publishDelayMinutes | integer | No | De 5 a 10080 (7 días). Obligatorio cuando postMode es SCHEDULE |
| template | string | No | Texto de la publicación con {title}, {link}, {description}, {author} y {feed}, hasta 2000 caracteres. Por defecto {title}\n\n{link}. Primero la descripción y luego el título se acortan para que quepan en cada plataforma; el enlace nunca se corta |
| aiInstructions | string | No | Instrucciones extra para los textos de IA, hasta 1000 caracteres |
| includeImage | boolean | No | Adjuntar la imagen del elemento, o la imagen de vista previa del artículo. Por defecto true |
| twitterKeepLinks | boolean | No | Mantener los enlaces clicables en las publicaciones de X. Solo planes de por vida, y cada publicación de X con enlace cuesta entonces más créditos. Por defecto false |
| includeKeywords | string[] | No | Hasta 50. Publicar solo los elementos cuyo título o resumen contenga alguna |
| excludeKeywords | string[] | No | Hasta 50. Omitir los elementos cuyo título o resumen contenga alguna |
| maxPostsPerCheck | integer | No | De 1 a 10, 3 por defecto. Los elementos nuevos se publican del más antiguo al más nuevo; el resto espera a la siguiente comprobación |
| checkIntervalMinutes | integer | No | 15, 30, 60, 180, 360, 720 o 1440. Por defecto 60 |
| postLatestItem | boolean | No | Publicar también el elemento más reciente en la primera comprobación. Por defecto false |
Los destinos pueden ser FACEBOOK, INSTAGRAM, THREADS, TWITTER, BLUESKY, LINKEDIN, MASTODON, TELEGRAM y GOOGLE_BUSINESS.
Solicitud de ejemplo:
{
"url": "https://blog.example.com/feed.xml",
"targets": [
{ "platform": "LINKEDIN", "connectionId": "conn_li_001" },
{ "platform": "FACEBOOK", "connectionId": "conn_fb_001", "pageId": "123456789012345" }
],
"postMode": "SCHEDULE",
"publishDelayMinutes": 30,
"contentMode": "TEMPLATE",
"template": "Nuevo en el blog: {title}\n\n{link}",
"excludeKeywords": ["sponsored"]
}Devuelve 201 con el feed:
{
"id": "rss_01j9x",
"userId": "user_123",
"accountGroupId": "ag_01j9x",
"name": "Example Blog",
"url": "https://blog.example.com/feed.xml",
"siteUrl": "https://blog.example.com",
"status": "ACTIVE",
"postMode": "SCHEDULE",
"publishDelayMinutes": 30,
"contentMode": "TEMPLATE",
"template": "Nuevo en el blog: {title}\n\n{link}",
"includeImage": true,
"twitterKeepLinks": false,
"includeKeywords": [],
"excludeKeywords": ["sponsored"],
"maxPostsPerCheck": 3,
"checkIntervalMinutes": 60,
"targets": [
{ "platform": "LINKEDIN", "connectionId": "conn_li_001", "displayName": "Example Inc." },
{ "platform": "FACEBOOK", "connectionId": "conn_fb_001", "pageId": "123456789012345", "displayName": "Example" }
],
"nextCheckAt": "2026-11-08T15:00:00.000Z",
"createdAt": "2026-11-08T14:00:00.000Z",
"updatedAt": "2026-11-08T14:00:00.000Z"
}Una URL que no es un feed RSS o Atom, un feed ya conectado, una plataforma de destino no admitida, la falta de publishDelayMinutes o el límite de 20 feeds devuelve 400. Un feed al que no se puede llegar devuelve 503. Una clave sin el permiso que piden el modo de publicación o los textos de IA devuelve 403.
Campos del feed
| Campo | Descripción |
|---|---|
| userId | El miembro como el que publica el feed: quien lo guardó por última vez |
| status | ACTIVE o PAUSED |
| pauseReason | Por qué se pausó el feed, solo mientras está PAUSED. Consulta la tabla de abajo |
| lastError | El error detrás de la pausa, cuando la causó un fallo |
| targets[].displayName | El nombre de la cuenta, que rellena AdaptlyPost. Se ignora si lo envías |
| nextCheckAt, lastCheckedAt, lastPostedAt | Cuándo se comprobará el feed, cuándo se comprobó por última vez y cuándo creó su última publicación |
Los demás campos llevan los ajustes de arriba.
| Motivo de pausa | Significado |
|---|---|
| USER | Alguien lo pausó desde la API o la app |
| FETCH_FAILURES | Fallaron 5 lecturas seguidas |
| CONSECUTIVE_FAILURES | 3 elementos seguidos no se pudieron publicar |
| ACCESS_LOST | Su propietario perdió el permiso que necesita su modo de publicación |
| SUBSCRIPTION_INACTIVE | El plan ya no cubre la publicación |
| CONNECTION_REMOVED | Se desconectaron todas las cuentas de destino |
Corrige la causa y luego reanuda el feed.
POST /api/v1/rss-feeds/preview
Recibe url y un template opcional, lee el feed sin guardar nada y devuelve url, title, siteUrl y sus 5 items más recientes, cada uno con title, link, summary, publishedAt, imageUrl y text, el elemento con la plantilla aplicada.
GET /api/v1/rss-feeds/:id/items
Lista los elementos que ha visto el feed, los más nuevos primero, sin los que ya estaban en el feed cuando se añadió. limit admite de 1 a 100 y por defecto es 20. Devuelve { "items": [...] }, cada uno con id, title, link, publishedAt, createdAt, status, postId y error.
| Estado del elemento | Significado |
|---|---|
| BASELINE | Ya estaba en el feed cuando se añadió |
| PROCESSING | Se está convirtiendo en una publicación |
| POSTED | Se convirtió en una publicación. postId la enlaza |
| FILTERED | Lo descartaron las reglas de palabras clave |
| SKIPPED | Se publicó más de 14 días antes de añadir el feed |
| FAILED | No se pudo crear la publicación. error dice por qué |
Actualizar, pausar, reanudar, comprobar y eliminar
PATCH acepta los mismos campos que la creación, salvo url y postLatestItem, y solo cambia los que envías. Pausar, reanudar, comprobar y eliminar no llevan cuerpo. Todos menos eliminar devuelven el feed; eliminar devuelve { "deleted": true }. Un id que no existe o que pertenece a otro espacio de trabajo devuelve 404.