CENBRAP · produção de conteúdo
Do tema ao conteúdo-mãe, e do conteúdo-mãe ao enxoval de canais.
CENBRAP · gestã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.
Esteira Cenbrap
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
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.
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
Quatro palavras que a API usa o tempo todo. Entender a diferença entre elas evita quase todo erro possível aqui.
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
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_tecnicaval_regulatoriaSe faltar alguma, a API responde 409 e diz exatamente o que falta:
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
/api/etapasOs funis, as etapas de cada um, a trava e a sua identidade.
/api/funisLista os funis com contagem de temas e de atrasados.
/api/funisCria 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.
/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.
/api/temasLista com filtros combináveis na querystring.
| Filtro | O que faz |
|---|---|
funil_id | só de um quadro |
etapa | só de uma coluna |
responsavel | por dono |
prioridade | alta · media · baixa |
busca | texto livre no título |
atrasados | true — passaram do prazo |
ativos | true — ainda não chegaram na última etapa |
desde | data-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. |
/api/temas/<id>Um tema com o histórico do que já aconteceu com ele.
/api/temasCria um tema. Só titulo é obrigatório; sem funil_id ele cai no primeiro funil ativo.
/api/temas/<id>Atualiza só 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.
/api/temas/<id>/moverMove dentro do funil do tema. Responde 409 se a trava pegar.
/api/temas/<id>/copiarO original fica onde está; a cópia entra na primeira etapa do destino.
/api/temas/<id>/pecaMarca uma peça do enxoval como pronta.
três passos, nesta ordem
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:
POST /api/temas/<id>/anexos
com {"nome":"capa.png","tipo":"image/png","tamanho":12345}.
Devolve o registro e uma URL de upload assinada.PUT na URL que voltou, com o
arquivo cru no corpo.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
| Campo | O que é |
|---|---|
titulo | Obrigatório na criação |
publico | Para quem é este conteúdo |
funil_id | uuid do quadro onde o tema vive |
etapa | Id de uma etapa do funil do tema |
estagio | topo · meio · fundo |
objetivo | O que este conteúdo precisa provocar |
cta | A chamada para ação desejada |
prioridade | alta · media · baixa |
prazo | AAAA-MM-DD, ou null |
responsavel | Texto livre |
val_tecnica | Booleano · val_tecnica_resp guarda quem validou |
val_regulatoria | Booleano · val_regulatoria_resp guarda quem liberou |
pecas | Lista de {canal, feito}, até 40 |
arquivado | Booleano |
concluido_em | Carimbado pela API na última etapa |
enxoval | {feitas, total} das peças |
dias_para_o_prazo | Negativo quando já passou |
atrasado | Booleano |
vence_em_5_dias | Booleano |
ativo | Ainda não chegou na última etapa |
liberado_para_copy | As duas validações marcadas |
os quatro códigos
| Código | Erro | O que houve |
|---|---|---|
| 400 | dados_invalidos | O corpo tem campo fora do vocabulário. A resposta traz a lista do que foi recusado e por quê. |
| 401 | sem_credencial | Falta o header x-api-key. |
| 404 | nao_encontrado | Id que não existe. |
| 409 | validacao_pendente | A 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
as cinco regras de um agente educado
GET /api/etapas e use os ids que vierem de lá. Nunca invente id de
etapa nem traduza o nome dela.GET /api/funis/<id>, que traz o quadro
inteiro em uma chamada, a varrer os temas um a um.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.