CENBRAP · produção de conteúdo

Esteira de produção

Do tema ao conteúdo-mãe, e do conteúdo-mãe ao enxoval de canais.

Esteira de produção
conectando…

Ações priorizadas

0 resultados

CENBRAP · gestão de marketing

Plano de Ação de Marketing

Uma ferramenta simples para transformar estratégia em ações, responsáveis, prazos, anexos e validações — sem perder a visão do resultado.

Plano atual
conectando…
0Ações cadastradas
0Em andamento
0Atrasadas
0Concluídas

Ações priorizadas

0 resultados

Esteira Cenbrap

Manual da API

O contrato que um agente de IA lê antes de operar o quadro. Humanos trabalham pela tela, agentes por aqui — é o mesmo dado e a mesma regra dos dois lados.

o primeiro request de toda sessão

Por onde começar

Chame GET /api/etapas antes de qualquer outra coisa. Ela devolve o vocabulário vivo: os funis que existem, as etapas de cada um, onde a trava começa e quem a API achou que você é. Os ids de etapa que você vai usar em todas as outras chamadas saem dali — não invente nem traduza.

$ curl -H "x-api-key: $TOKEN" \ https://esteira-cenbrap.vercel.app/api/etapas

O manual inteiro também existe em texto puro, para um agente carregar de uma vez sem gastar contexto com marcação: /api/docs. A especificação em JSON está em /api/openapi.

leia antes de chamar qualquer coisa

O modelo mental

Quatro palavras que a API usa o tempo todo. Entender a diferença entre elas evita quase todo erro possível aqui.

Funil
Um quadro inteiro. A Esteira tem vários, e cada um tem as suas próprias etapas. O funil do Blog vai de pauta a publicado; o de Cortes de vídeo vai de vídeo escolhido a publicado. Nunca presuma que as etapas de um valem para outro.
Etapa
A coluna onde o card está, dentro do funil dele. O id da etapa só existe dentro daquele funil.
Tema
O card: um assunto que vai virar conteúdo. Mora em um funil, está em uma etapa, tem prazo, responsável e prioridade.
Peça
Cada item do enxoval do tema — o Reels, o carrossel, o e-mail. Marcada como feita ou não, uma a uma.
A confusão mais provável. funil_id é o quadro. estagio é topo, meio ou fundo de funil de marketing — outra coisa. O campo já se chamou funil e foi renomeado para estagio exatamente por causa disso. Se você mandar funil, a API ainda aceita como estágio, mas escreva estagio.

validação antes de andar

A regra dura

Cada funil aponta em trava_a_partir_de a etapa em que a trava começa. Dali para a frente, um tema só se move com as duas validações marcadas:

val_tecnica
A precisão clínica, conferida por um especialista.
val_regulatoria
Publicidade médica e compliance liberados.

Se faltar alguma, a API responde 409 e diz exatamente o que falta:

{ "erro": "validacao_pendente", "falta": ["tecnica", "regulatoria"], "mensagem": "…" }
Isto não é sugestão: a API não move o card. Ao receber esse 409, o caminho é marcar as validações ou avisar um humano — nunca repetir a mesma chamada. Um funil pode não ter trava, quando trava_a_partir_de vem vazio.

A última etapa de cada funil é a de “pronto”: ao chegar nela, a API carimba concluido_em sozinha. Você não preenche esse campo.

o que dá para fazer

Os endpoints

Vocabulário

GET/api/etapas

Os funis, as etapas de cada um, a trava e a sua identidade.

Funis — os quadros

GET/api/funis

Lista os funis com contagem de temas e de atrasados.

POST/api/funis

Cria um funil. Sem etapas, ele nasce com as seis padrão. O id de cada etapa é gerado a partir do nome quando você não manda um. Máximo de 12 etapas.

{"nome":"YouTube","etapas":[{"nome":"Ideia"},{"nome":"Roteiro"}], "trava_a_partir_de":"roteiro"}
GET/api/funis/<id>

O funil e todos os temas dele de uma vez. É a chamada mais eficiente quando você vai trabalhar em um quadro inteiro — prefira esta a varrer tema por tema.

Temas — os cards

GET/api/temas

Lista com filtros combináveis na querystring.

FiltroO que faz
funil_idsó de um quadro
etapasó de uma coluna
responsavelpor dono
prioridadealta · media · baixa
buscatexto livre no título
atrasadostrue — passaram do prazo
ativostrue — ainda não chegaram na última etapa
desdedata-hora ISO 8601 — só o que foi criado ou alterado depois dela. É o filtro de uma ronda periódica: guarde a hora da última verificação e passe aqui. Voltar vazio significa que nada mudou.
GET/api/temas/<id>

Um tema com o histórico do que já aconteceu com ele.

POST/api/temas

Cria um tema. Só titulo é obrigatório; sem funil_id ele cai no primeiro funil ativo.

{"funil_id":"<id>","titulo":"…","publico":"…","estagio":"topo", "objetivo":"…","cta":"…","prioridade":"media","prazo":"2026-09-30", "responsavel":"Equipe de Conteúdo", "pecas":[{"canal":"Reels","feito":false}]}
PATCH/api/temas/<id>

Atualiza os campos que você mandar. Serve para marcar validações, mudar prazo, trocar responsável — e para mover o card para outra esteira, mandando um funil_id diferente.

{"val_regulatoria":true,"val_regulatoria_resp":"Jurídico"}
POST/api/temas/<id>/mover

Move dentro do funil do tema. Responde 409 se a trava pegar.

{"etapa":"copy"}
POST/api/temas/<id>/copiar

O original fica onde está; a cópia entra na primeira etapa do destino.

{"funil_id":"<id>","manter_pecas":false}
POST/api/temas/<id>/peca

Marca uma peça do enxoval como pronta.

{"canal":"Reels","feito":true}

três passos, nesta ordem

Arquivos e imagens

O arquivo não passa pela Vercel — o limite de corpo lá é 4,5 MB. A API assina uma URL e você sobe direto para o Storage. São três passos, nesta ordem:

  1. 1
    POST /api/temas/<id>/anexos com {"nome":"capa.png","tipo":"image/png","tamanho":12345}. Devolve o registro e uma URL de upload assinada.
  2. 2
    PUT na URL que voltou, com o arquivo cru no corpo.
  3. 3
    PATCH /api/anexos/<id> com {"pronto":true}.

Só depois do passo 3 o anexo aparece na listagem — um upload interrompido não vira arquivo fantasma no card. Para ler, GET /api/temas/<id>/anexos devolve links assinados que valem 1 hora. Para remover, DELETE /api/anexos/<id>.

o vocabulário completo

Os campos de um tema

CampoO que é
tituloObrigatório na criação
publicoPara quem é este conteúdo
funil_iduuid do quadro onde o tema vive
etapaId de uma etapa do funil do tema
estagiotopo · meio · fundo
objetivoO que este conteúdo precisa provocar
ctaA chamada para ação desejada
prioridadealta · media · baixa
prazoAAAA-MM-DD, ou null
responsavelTexto livre
val_tecnicaBooleano · val_tecnica_resp guarda quem validou
val_regulatoriaBooleano · val_regulatoria_resp guarda quem liberou
pecasLista de {canal, feito}, até 40
arquivadoBooleano
concluido_emCarimbado pela API na última etapa

Já vêm calculados — não recalcule

enxoval{feitas, total} das peças
dias_para_o_prazoNegativo quando já passou
atrasadoBooleano
vence_em_5_diasBooleano
ativoAinda não chegou na última etapa
liberado_para_copyAs duas validações marcadas

os quatro códigos

Quando dá errado

CódigoErroO que houve
400dados_invalidosO corpo tem campo fora do vocabulário. A resposta traz a lista do que foi recusado e por quê.
401sem_credencialFalta o header x-api-key.
404nao_encontradoId que não existe.
409validacao_pendenteA trava do funil. O campo falta diz o que falta.

Todo erro vem em JSON com erro e mensagem. Leia a mensagem: ela foi escrita para dizer o que fazer, não só o que houve.

as sequências que mais se repetem

Receitas

Pegar o trabalho atrasado de um quadro

GET /api/etapas # descobre o funil_id GET /api/temas?funil_id=<id>&atrasados=true

Levar um tema da validação para a copy

PATCH /api/temas/<id> {"val_tecnica":true,"val_tecnica_resp":"Dr. Fulano"} PATCH /api/temas/<id> {"val_regulatoria":true,"val_regulatoria_resp":"Jurídico"} POST /api/temas/<id>/mover {"etapa":"copy"}

Fechar uma peça do enxoval

POST /api/temas/<id>/peca {"canal":"Reels","feito":true}

as cinco regras de um agente educado

Como se comportar aqui

  • Comece por GET /api/etapas e use os ids que vierem de lá. Nunca invente id de etapa nem traduza o nome dela.
  • Peça só o que vai usar: prefira GET /api/funis/<id>, que traz o quadro inteiro em uma chamada, a varrer os temas um a um.
  • Ao receber 409, pare e resolva a validação — não insista na mesma chamada.
  • No PATCH, mande apenas os campos que você realmente quer mudar. O que você não mandar fica como está, e isso é proposital: dois agentes conseguem trabalhar no mesmo card sem um apagar o outro.
  • Você está mexendo no trabalho de pessoas. Quando a situação não estiver clara — um tema sem responsável, um prazo impossível, uma validação que ninguém marcou — registre o que encontrou e avise um humano em vez de decidir sozinho.