Depois deste artigo o seu site vai buscar sozinho os materiais prontos do projeto — texto, imagens, vídeo — e publicá-los. O dono precisa de alguns minutos para gerar uma chave; o desenvolvedor precisa escrever três requisições. O site não gera nada, só recebe o que já está pronto.
Como funciona
A Telematic não tem acesso ao seu site. O site pede materiais novos de tempos em tempos e os recebe em formato JSON. Depois de publicar um material, ele avisa — e no projeto esse material passa a estar publicado.
Você pode conectar vários sites a um mesmo projeto. Cada um tem sua própria chave e seu próprio registro do que já publicou; todos os sites veem os mesmos materiais.
Crie a conexão e copie a chave
- Abra a seção "Integrações" e clique em "Adicionar feed de site".
- Na janela "Conectar um site externo" preencha "Nome do site".
- No bloco "Quais status expor no feed" mantenha os status que você precisa: "Aceito", "Agendado", "Publicado". Rascunhos, materiais rejeitados e arquivados nunca são entregues ao site.
- Escolha "Ritmo de entrega" — mais sobre isso abaixo.
- Clique em "Gerar chave".

O bloco "Sua chave secreta" aparece. A chave começa com tlmf_.
Importante. A chave é mostrada só uma vez: o serviço guarda apenas sua impressão digital. Copie a chave na hora e passe ao seu desenvolvedor de forma segura. Se perder, gere uma nova.
Mais abaixo, na mesma janela, está "Guia de integração": comandos prontos com sua chave e endereço.

Busque os materiais: as requisições para o desenvolvedor
O endereço da API é https://<o endereço do guia>/api/feed/v1. A parte /api é obrigatória: sem ela, a requisição cai no site comum. Cada requisição carrega o cabeçalho Authorization: Bearer <chave>.
| Requisição | O que faz |
|---|---|
GET /me | verifica a chave e retorna o projeto e as configurações do feed |
GET /content?since=&limit= | os materiais prontos que esse site ainda não confirmou; os mais antigos primeiro |
GET /content/{id} | um material, incluindo um já confirmado — para atualizar sua cópia |
POST /content/{id}/ack | confirma a publicação no site |
POST /content/{id}/stats | envia visualizações e reações |
GET /openapi.json | uma descrição da API legível por máquina |
BASE="https://<o endereço do guia>/api/feed/v1"
KEY="tlmf_..."
curl -H "Authorization: Bearer $KEY" "$BASE/content?limit=20"
A resposta traz items, nextCursor e um bloco pacing. limit vai de 1 a 100 e o padrão é 20. Guarde o nextCursor e passe-o como since na próxima requisição.
Confirme a publicação e envie as estatísticas
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"externalId":"123","url":"https://meu-site.com.br/p/123"}' \
"$BASE/content/<ID>/ack"
Todos os campos são opcionais: externalId, url, publishedAt. Depois da confirmação, o material desaparece do feed desse site, e no projeto ele recebe o status "Publicado" — ou permanece "Publicado parcialmente" enquanto outras plataformas ainda esperam por ele. Chamar de novo é seguro.
Para que os números do seu site cheguem às Estatísticas, envie views, reactions, comments e shares para /content/<ID>/stats. Antes de um material ser confirmado, essa requisição retorna 404. Nós mesmos não coletamos os números do seu site.
O ritmo de entrega: um material por intervalo
O site é quem pergunta, então a velocidade é você quem define. Em um intervalo, o feed entrega no máximo um material, seja qual for o limit da requisição, e não entrega de uma vez o que se acumulou depois de o site ficar inativo. O intervalo é contado a partir da última confirmação.
- "Seguir a programação do projeto" usa o intervalo, a janela de horário e o limite diário da programação de publicações do projeto. O limite é contado separadamente para o site. Se não houver programação, não há limites.
- "Ritmo personalizado" — seu próprio intervalo, de 5 minutos a 30 dias, uma janela de horário e um limite de 1 a 1.000 por dia.
- "Sem limite" — o site recebe tudo que pedir: até 100 materiais de uma vez.
Quando um material ainda não está "liberado", a resposta chega vazia e o bloco pacing explica o motivo:
{ "items": [],
"pacing": { "reason": "interval", "intervalSeconds": 3600,
"nextAvailableAt": "2026-09-19T13:00:00.000Z" } }
reason recebe os valores interval (o intervalo ainda não passou), window (você está fora da janela de horário agora), daily-cap (o limite de hoje foi atingido), ready e unlimited. O bloco também traz os campos enabled, source, timeFrom, timeTo, maxPerDay e allowance. A janela é contada no horário do servidor — guie-se pelo nextAvailableAt.
Os campos de um material
id,title,excerpt— o identificador, o título, uma descrição curta.bodyMarkdown— o texto principal com títulos, listas e imagens. Converta-o para HTML e estilize com os estilos do seu site.bodyé o mesmo texto sem a formatação, mantido para conexões antigas.topics— normalmente de 3 a 7 tags no idioma do material.sourceUrl,createdAt,updatedAt.media[]— os arquivos:type(IMAGE,VIDEO,AUDIO,OTHER),url,width,height,duration,thumbnail. Os links são absolutos.
A primeira imagem em media é a capa, e ela não é inserida no texto. Pegue o vídeo e o áudio também de media: no máximo um vídeo por orientação. Vídeos que esperam sua aprovação não chegam ao feed.
Na página do material, o cartão do site mostra o status — "Aguardando o site buscar", "Confirmado pelo site" ou "Não está no feed" — e a hora da última vez que o site buscou materiais. O botão "Pré-visualização" mostra o texto exatamente como o site vai recebê-lo.

Pausa e nova chave
- Pausa. Na seção "Integrações" clique no botão de pausa no cartão do site. A mensagem "Integração pausada" aparece e o site passa a receber um erro 401. O mesmo botão liga a entrega de novo.
- Nova chave. Clique no cartão do site e escolha "Rotacionar chave" na janela "Feed de site". A nova chave também é mostrada só uma vez, e a antiga para de funcionar imediatamente — atualize-a no site.
Na mesma janela você muda o nome, os status e o ritmo; não esqueça "Salvar".

Se o site não recebe nada
- Resposta 401. A chave não foi copiada por inteiro, foi reemitida, ou a conexão está pausada. Confira o cabeçalho
Authorization: Bearer …com uma requisiçãoGET /me. - Chega uma página do site em vez de JSON. Falta
/apino endereço. itemsvazio. Primeiro vejapacing.reasonenextAvailableAt. Se disseremreadyouunlimited, o projeto não tem materiais nos status que você escolheu: é preciso aceitar um rascunho antes, veja Trabalhando com conteúdo.- O mesmo material chega de novo. O site não enviou o
ack.
O que vem a seguir
- Projetos e plataformas — as outras plataformas do projeto.
- Publicações e calendário — a programação de onde o feed tira seu ritmo.
- Solução de problemas frequentes — se precisar de ajuda do suporte.