Documentação para desenvolvedores

API de Publicação de Artigos

Contrato HTTP para agentes e integrações criarem ou atualizarem posts do blog (`/aprenda-marketing`). O token de autenticação fica só no servidor — esta página nunca o exibe.

Autenticação

Toda escrita exige autenticação. Use um dos headers abaixo com o valor da variável de ambiente PUBLICATION_API_TOKEN no servidor (ou um JWT de admin do CMS).

Authorization: Bearer SEU_PUBLICATION_API_TOKEN
# ou
X-API-Key: SEU_PUBLICATION_API_TOKEN

Segurança: o token real não está nesta página, no repositório público nem no Swagger aberto. Solicite ao administrador do servidor. Não cole o token em issues, chats públicos ou frontends.

Endpoint recomendado

POST https://agenciakaizen.com.br/api/v1/articles/upsert

Idempotente por slug: se o slug já existe, atualiza; senão cria. Ideal para agentes e pipelines de conteúdo.

  • POST /articles — cria
  • PUT /articles/{id} — atualiza por UUID
  • PUT /articles/slug/{slug} — atualiza por slug (404 se não existir)
  • DELETE /articles/{id} — remove
  • GET /articles/{slug} — leitura pública

HTML no campo content

Envie HTML real. Não envie entidades escapadas — isso faz o blog mostrar tags como texto (`<h2>` na tela).

Correto

<h2>Título</h2>
<p>Parágrafo com <strong>negrito</strong>.</p>

Incorreto

&lt;h2&gt;Título&lt;/h2&gt;
&lt;p&gt;Parágrafo...&lt;/p&gt;

A API tenta desescapar automaticamente e devolve o header X-Kaizen-Content-Unescaped: true quando corrige. Mesmo assim, o contrato correto é HTML cru.

Payload de exemplo

{
  "title": "Google Ads 2026: guia prático",
  "slug": "google-ads-2026-guia-pratico",
  "excerpt": "Como estruturar campanhas de performance em 2026.",
  "content": "<h2>Por que Performance Max importa</h2><p>Em 2026, o funil exige criativos e sinais de conversão sólidos.</p>",
  "is_published": true,
  "reading_time": 8,
  "seo_title": "Google Ads 2026: guia prático | Agência Kaizen",
  "seo_description": "Guia prático de Google Ads e Performance Max para 2026.",
  "category_slug": "google-ads",
  "author_name": "Agência Kaizen",
  "author_type": "Organization",
  "content_type": "article"
}

Exemplo curl

curl -X POST 'https://agenciakaizen.com.br/api/v1/articles/upsert' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer SEU_PUBLICATION_API_TOKEN' \
  -d '{
    "title": "Exemplo publicado via API",
    "slug": "exemplo-publicado-via-api",
    "excerpt": "Resumo do artigo",
    "content": "<h2>Título da seção</h2><p>Parágrafo com HTML <strong>real</strong>.</p>",
    "is_published": true,
    "seo_title": "Exemplo via API | Agência Kaizen",
    "seo_description": "Artigo de exemplo publicado pela API de publicação.",
    "author_name": "Agência Kaizen",
    "author_type": "Organization"
  }'

Erros comuns

  • 401 — token ausente ou inválido
  • 403 — JWT sem permissão admin
  • 404 — artigo não encontrado no PUT por slug/id
  • 422 — payload inválido (ex.: falta title/slug no upsert)

Dúvidas de integração: fale com a Agência Kaizen. Guia machine-readable: /api/v1/articles/publication-guide.