Feeds RSS
Conecte um feed RSS ou Atom e transforme cada item novo em um rascunho, uma publicação agendada ou uma publicação nas contas que você escolher, com um modelo ou com legendas de IA.
Permissão: posts.read. Veja Papéis e permissões.
Listar e ler feeds e seus itens precisa de posts.read. Criar, pré-visualizar, atualizar, pausar, retomar, verificar e excluir precisam de posts.draft, mais a permissão que o modo de publicação do feed exige: posts.schedule para SCHEDULE, posts.publish para PUBLISH e ai.generate para legendas de IA. Um feed que outro membro configurou também precisa de posts.others para atualizar, pausar, retomar, verificar ou excluir.
Um feed é verificado em um cronograma, e cada item que aparece depois que você o adicionou vira uma publicação nas contas de targets. Cada publicação passa pelas mesmas verificações de Criar publicação. Um feed publica como o membro que o salvou por último: criar, atualizar ou retomar um feed torna o membro da chave o dono dele.
| Método | Caminho | Descrição |
|---|---|---|
| GET | /api/v1/rss-feeds | Listar os feeds do espaço de trabalho, os mais novos primeiro |
| POST | /api/v1/rss-feeds | Conectar um feed |
| POST | /api/v1/rss-feeds/preview | Ler um feed sem salvá-lo e mostrar os 5 itens mais recentes |
| GET | /api/v1/rss-feeds/:id | Obter um feed |
| PATCH | /api/v1/rss-feeds/:id | Mudar os campos enviados. A URL não pode mudar |
| DELETE | /api/v1/rss-feeds/:id | Parar de verificar o feed. As publicações já criadas ficam |
| GET | /api/v1/rss-feeds/:id/items | Listar os itens que o feed já viu |
| POST | /api/v1/rss-feeds/:id/pause | Pausar o feed |
| POST | /api/v1/rss-feeds/:id/resume | Limpar o motivo da pausa e verificar o feed em até um minuto |
| POST | /api/v1/rss-feeds/:id/check | Trazer a próxima verificação para agora; o feed é lido em até um minuto |
POST /api/v1/rss-feeds
Lê o feed e registra cada item que já está nele, para que só os itens que aparecerem depois sejam publicados. Um espaço de trabalho comporta até 20 feeds.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| url | string | Sim | URL pública http ou https de um feed RSS ou Atom |
| targets | array | Sim | De 1 a 20 contas, cada uma { platform, connectionId, pageId }. connectionId é o id da conta em Contas sociais, e pageId é obrigatório para FACEBOOK |
| postMode | string | Sim | DRAFT cria um rascunho. SCHEDULE agenda a publicação publishDelayMinutes depois que o item é encontrado. PUBLISH publica na hora |
| contentMode | string | Sim | TEMPLATE preenche template. AI escreve uma legenda por plataforma a partir do artigo, adiciona o link e gasta 1 crédito de IA por plataforma e por item |
| name | string | Não | Até 120 caracteres. Por padrão, o título do feed |
| publishDelayMinutes | integer | Não | De 5 a 10080 (7 dias). Obrigatório quando postMode é SCHEDULE |
| template | string | Não | Texto da publicação com {title}, {link}, {description}, {author} e {feed}, até 2000 caracteres. Por padrão {title}\n\n{link}. Primeiro a descrição e depois o título são encurtados para caber em cada plataforma; o link nunca é cortado |
| aiInstructions | string | Não | Instruções extras para as legendas de IA, até 1000 caracteres |
| includeImage | boolean | Não | Anexar a imagem do item, ou a imagem de prévia do artigo. Por padrão true |
| twitterKeepLinks | boolean | Não | Manter os links clicáveis nas publicações do X. Só planos vitalícios, e cada publicação do X com link passa a custar mais créditos. Por padrão false |
| includeKeywords | string[] | Não | Até 50. Publicar só os itens cujo título ou resumo contenha alguma delas |
| excludeKeywords | string[] | Não | Até 50. Pular os itens cujo título ou resumo contenha alguma delas |
| maxPostsPerCheck | integer | Não | De 1 a 10, 3 por padrão. Os itens novos são publicados do mais antigo para o mais novo; o resto espera a próxima verificação |
| checkIntervalMinutes | integer | Não | 15, 30, 60, 180, 360, 720 ou 1440. Por padrão 60 |
| postLatestItem | boolean | Não | Publicar também o item mais recente na primeira verificação. Por padrão false |
Os destinos podem ser FACEBOOK, INSTAGRAM, THREADS, TWITTER, BLUESKY, LINKEDIN, MASTODON, TELEGRAM e GOOGLE_BUSINESS.
Requisição de exemplo:
{
"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": "Novo no blog: {title}\n\n{link}",
"excludeKeywords": ["sponsored"]
}Retorna 201 com o 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": "Novo no 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"
}Uma URL que não é um feed RSS ou Atom, um feed já conectado, uma plataforma de destino não suportada, a falta de publishDelayMinutes ou o limite de 20 feeds retorna 400. Um feed que não pode ser alcançado retorna 503. Uma chave sem a permissão que o modo de publicação ou as legendas de IA exigem retorna 403.
Campos do feed
| Campo | Descrição |
|---|---|
| userId | O membro como quem o feed publica: quem o salvou por último |
| status | ACTIVE ou PAUSED |
| pauseReason | Por que o feed foi pausado, preenchido só enquanto ele está PAUSED. Veja a tabela abaixo |
| lastError | O erro por trás da pausa, quando uma falha a causou |
| targets[].displayName | O nome da conta, preenchido pela AdaptlyPost. Ignorado se você o enviar |
| nextCheckAt, lastCheckedAt, lastPostedAt | Quando o feed será verificado, quando foi verificado pela última vez e quando criou a última publicação |
Os outros campos trazem as configurações acima.
| Motivo da pausa | Significado |
|---|---|
| USER | Alguém pausou pela API ou pelo app |
| FETCH_FAILURES | 5 leituras seguidas falharam |
| CONSECUTIVE_FAILURES | 3 itens seguidos não puderam ser publicados |
| ACCESS_LOST | O dono perdeu a permissão que o modo de publicação exige |
| SUBSCRIPTION_INACTIVE | O plano não cobre mais a publicação |
| CONNECTION_REMOVED | Todas as contas de destino foram desconectadas |
Corrija a causa e depois retome o feed.
POST /api/v1/rss-feeds/preview
Recebe url e um template opcional, lê o feed sem salvar nada e retorna url, title, siteUrl e os 5 items mais recentes, cada um com title, link, summary, publishedAt, imageUrl e text, o item com o modelo aplicado.
GET /api/v1/rss-feeds/:id/items
Lista os itens que o feed já viu, os mais novos primeiro, sem os que já estavam no feed quando ele foi adicionado. limit aceita de 1 a 100 e o padrão é 20. Retorna { "items": [...] }, cada um com id, title, link, publishedAt, createdAt, status, postId e error.
| Status do item | Significado |
|---|---|
| BASELINE | Já estava no feed quando ele foi adicionado |
| PROCESSING | Está virando uma publicação |
| POSTED | Virou uma publicação. postId aponta para ela |
| FILTERED | Ficou de fora pelas regras de palavras-chave |
| SKIPPED | Publicado mais de 14 dias antes de o feed ser adicionado |
| FAILED | Não foi possível criar a publicação. error diz o motivo |
Atualizar, pausar, retomar, verificar e excluir
PATCH aceita os mesmos campos da criação, exceto url e postLatestItem, e muda só os que você envia. Pausar, retomar, verificar e excluir não têm corpo. Todos, menos excluir, retornam o feed; excluir retorna { "deleted": true }. Um id que não existe ou que pertence a outro espaço de trabalho retorna 404.