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

Atualizar e apagar post

Altera parcialmente um post, reagenda ou apaga.

Atualizar post

Atualiza só os campos enviados. Ao mudar o estado para published sem enviar published_at, a data de publicação é preenchida com o momento atual (se o post nunca foi publicado). Reagendar é só enviar um novo published_at.

PUT/api/v1/admin/blog/posts/{id}Admin

Altera campos de um post

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.

Parâmetros de caminho

iduuidobrigatório
Identificador do post.

Corpo da requisição

titlestring
Título do post.
slugstring
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.

Exemplo de requisição (Atualizar post)

bash
curl -X PUT "$BASE_URL/api/v1/admin/blog/posts/91af684b-cf41-4243-a37d-a133a39d6ed3" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "published"
}'

Resposta (Atualizar post)

200Post atualizado
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 (Atualizar post)

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"}
500Post inexistente, slug já usado por outro post, ou id que não é UUID. Todos respondem 500.{"error":"failed to update blog post","detail":"blog post not found"}
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.

Apagar post

Remove o post e libera o slug. O sitemap da loja é atualizado. Para tirar um post do ar sem perdê-lo, mude o estado para archived ou draft.

DELETE/api/v1/admin/blog/posts/{id}Admin

Apaga um post definitivamente

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.

Parâmetros de caminho

iduuidobrigatório
Identificador do post.

Exemplo de requisição (Apagar post)

bash
curl -X DELETE "$BASE_URL/api/v1/admin/blog/posts/91af684b-cf41-4243-a37d-a133a39d6ed3" \
  -H "Authorization: Bearer $TOKEN"

Resposta (Apagar post)

200Post apagado
json
{
  "message": "blog post deleted"
}

Erros (Apagar post)

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"}
500O post não existe (ou já foi apagado), ou o id não é UUID.{"error":"failed to delete blog post","detail":"blog post not found"}
Exclusão definitiva

Não há lixeira para posts do blog.

Veja também

  • Listar e consultar posts
  • Traduções do post
Anterior
Criar post
Próxima
Traduções do post
Nesta página
  • Atualizar post
  • Exemplo de requisição (Atualizar post)
  • Resposta (Atualizar post)
  • Erros (Atualizar post)
  • Apagar post
  • Exemplo de requisição (Apagar post)
  • Resposta (Apagar post)
  • Erros (Apagar post)
  • Veja também