VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Blog

POSTCriar post

Cria um post do blog, publicado, agendado ou em rascunho.

Cria um post. O autor é o administrador do token. Se status for published e você não enviar published_at, o post sai agora; com uma data futura ele fica agendado. O texto é sanitizado e os campos de SEO vazios são preenchidos a partir do título e do texto.

POST/api/v1/admin/blog/postsAdmin

Cria um post do blog

Rota ligada ao módulo blog: com o módulo desligado a resposta é 403. Leitura exige manage_content ou view_content; escrita exige manage_content.

Corpo da requisição

titlestringobrigatório
Título do post.
slugstringobrigatório
Trecho da URL. Na criação, se já existe, a plataforma acrescenta -2, -3...; na atualização, um slug repetido é recusado.
excerptstring
Resumo para as listas.
bodystring
Texto do post. HTML é sanitizado (scripts e atributos de evento saem).
featured_imagestring
URL da imagem de destaque.
category_iduuid
Categoria do blog (veja Categorias).
statusstringpadrão: draft
draftpublishedarchived
Estado do post.
tagsarray
Etiquetas (strings).
meta_titlestring
Título para buscadores.
meta_descriptionstring
Descrição para buscadores.
published_atstring
Quando vai ao ar (RFC 3339). Uma data futura agenda o post: a vitrine o esconde até lá. Sem ela, um post published sai agora.
vendor_iduuid
Atribui o post a um seller. Omita para post da loja.
descriptionsobject
Conteúdo por idioma, com chave no código do idioma. Cada valor tem title, body, excerpt, meta_title e meta_description.

Exemplo de requisição

bash
curl -X POST "$BASE_URL/api/v1/admin/blog/posts" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "title": "Como escolher o mouse perfeito",
  "slug": "como-escolher-o-mouse-perfeito",
  "excerpt": "Guia prático com 5 passos.",
  "body": "<h2>Por que o mouse importa</h2><p>...</p>",
  "category_id": "4e733a25-349a-4598-a916-a0984fc4aa76",
  "status": "published",
  "tags": [
    "mouse",
    "periféricos"
  ]
}'

Resposta

201Post criado
json
{
  "id": "91af684b-cf41-4243-a37d-a133a39d6ed3",
  "title": "Como escolher o mouse perfeito",
  "slug": "como-escolher-o-mouse-perfeito",
  "excerpt": "Guia prático com 5 passos.",
  "body": "<h2>Por que o mouse importa</h2><p>...</p>",
  "author_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
  "category_id": "4e733a25-349a-4598-a916-a0984fc4aa76",
  "category_name": "Guia de compras",
  "tags": [
    "mouse",
    "periféricos"
  ],
  "meta_title": "Como escolher o mouse perfeito",
  "meta_description": "Guia prático com 5 passos.",
  "published_at": "2026-09-09T14:52:00Z",
  "view_count": 0,
  "created_at": "2026-09-09T14:52:13.16253Z",
  "updated_at": "2026-09-09T14:56:05.04101Z",
  "post_id": "91af684b-cf41-4243-a37d-a133a39d6ed3",
  "page_id": "91af684b-cf41-4243-a37d-a133a39d6ed3",
  "page_title": "Como escolher o mouse perfeito",
  "seo_name": "como-escolher-o-mouse-perfeito",
  "description": "<h2>Por que o mouse importa</h2><p>...</p>",
  "short_description": "Guia prático com 5 passos.",
  "timestamp": 1788965533,
  "updated_timestamp": 1788965765,
  "published_timestamp": 1788965520,
  "company_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
  "status": "A"
}

Campos da resposta

iduuid
Identificador do post.
titlestring
Título.
slugstring
Trecho da URL pública do post. Único.
excerptstring
Resumo mostrado nas listas. Ausente quando vazio.
bodystring
Texto do post (HTML sanitizado ou Markdown, conforme foi enviado).
featured_imagestring
URL da imagem de destaque. Ausente quando não há.
author_iduuid
Usuário que criou o post.
category_iduuid
Categoria do post. Ausente quando não tem.
category_namestring
Nome da categoria, para exibir.
statusstring
Letra do estado: A publicado, R rascunho, D arquivado.
tagsarray
Etiquetas livres (strings).
meta_titlestring
Título para buscadores. Se você não enviar, copia o título.
meta_descriptionstring
Descrição para buscadores. Se você não enviar, usa os primeiros 160 caracteres do texto.
published_atstring
Quando o post vai ao ar (RFC 3339). Data futura = agendado. Ausente em rascunho.
view_countinteger
Visualizações na vitrine.
vendor_iduuid
Seller dono do post. Ausente em post da loja.
created_atstring
Criação, RFC 3339.
updated_atstring
Última alteração, RFC 3339.

Erros

StatusQuandoExemplo de corpo
401Token ausente, inválido ou expirado.{"error":"invalid or expired token"}
403O administrador não tem o privilégio exigido.{"error":"insufficient privileges","required":"manage_content"}
400Corpo inválido, ou falta title ou slug.{"error":"title and slug are required"}
500Categoria inexistente ou outra falha ao gravar.{"error":"failed to create blog post","detail":"..."}
Status entra como palavra e sai como letra

Ao gravar e ao filtrar você pode usar published, draft ou archived. A resposta do post devolve a letra: A, R ou D.

Campos repetidos

A resposta também traz campos que repetem outros valores (post_id, page_id, page_title, seo_name, description, short_description, timestamp, updated_timestamp, published_timestamp, company_id). Em integrações novas use os campos principais.

Veja também

  • Atualizar e apagar post
  • Imagem de destaque com IA
Anterior
Listar e consultar posts
Próxima
Atualizar e apagar post
Nesta página
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também