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

Histórico de alterações

Lista, do mais recente para o mais antigo, quem mudou o quê em um produto (preço, estoque, nome, status, categoria e outros campos).

Use esta operação para auditar um produto: quem baixou o preço, quando o status mudou de ativo para oculto, de onde veio uma alteração de estoque. Cada vez que um PUT muda um campo acompanhado, a plataforma grava uma linha por campo alterado, com o valor antigo, o valor novo, o usuário e o horário.

Os campos acompanhados são: status, intended_status, price, list_price, quantity (estoque), name, description, short_description, category_id, additional_category_ids, sku, vendor_id, slug, ncm_code, vendor_internal_sku, seo_title, seo_description, meta_keywords, search_words, promo_text, zero_price_action, free_shipping, requires_shipping, weight, width, height e length. Só entra uma linha quando o valor realmente muda: reenviar o mesmo preço não registra nada.

O que o histórico não cobre

A criação do produto não gera linha, e as alterações feitas por rotas que não são o PUT do produto (importação, lote, ajustes de estoque por rota própria) seguem a sua própria trilha de auditoria e podem não aparecer aqui. Use este histórico para o que foi alterado pela API ou pelo painel de edição do produto.

GET/api/v1/admin/products/{id}/changelogAdmin

Histórico de alterações de um produto

Autenticação: Authorization: Bearer <token> de um usuário administrador com o privilégio view_catalog ou manage_catalog. Um produto que não existe devolve 200 com a lista vazia.

Path parameters

iduuidobrigatório
UUID do produto.

Query parameters

pageintegerpadrão: 1
Página, a partir de 1.
per_pageintegerpadrão: 20
Itens por página, de 1 a 100. Valor fora desse intervalo volta ao padrão (20).

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/admin/products/0497b6a8-c868-43be-ac21-2abddd24cd3c/changelog?per_page=20" \
  -H "Authorization: Bearer $TOKEN"

Resposta

200Histórico retornado
json
{
  "entries": [
    {
      "id": "f200057e-dee4-4f53-b532-272b5d1700b9",
      "product_id": "0497b6a8-c868-43be-ac21-2abddd24cd3c",
      "user_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
      "change_type": "updated",
      "field": "name",
      "old_value": "Caneca Esmaltada",
      "new_value": "Caneca Esmaltada 350 ml",
      "created_at": "2026-10-11T20:55:15.040515Z"
    },
    {
      "id": "2b454a42-227c-409b-b827-1b4006293c0d",
      "product_id": "0497b6a8-c868-43be-ac21-2abddd24cd3c",
      "user_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
      "change_type": "price_change",
      "field": "price",
      "old_value": "49.90",
      "new_value": "52.90",
      "created_at": "2026-10-11T20:55:15.037803Z"
    }
  ],
  "total": 2,
  "page": 1,
  "per_page": 20,
  "total_pages": 1
}

Campos da resposta

entriesarray
Linhas do histórico, da mais recente para a mais antiga. Uma única edição que muda vários campos gera várias linhas com horários quase iguais.
entries[].iduuid
Id da linha.
entries[].product_iduuid
Produto alterado.
entries[].user_iduuid
Usuário que fez a alteração. Vazio quando não há usuário (por exemplo, uma automação).
entries[].change_typestring
createdupdateddeletedstatus_changeprice_changestock_changemedia_changevariant_change
Tipo da alteração. A edição do produto grava updated (campos comuns), price_change (preço e preço de lista), status_change (status) e stock_change (estoque). Os demais valores existem para outros fluxos.
entries[].fieldstring
Nome do campo alterado (price, name, status...).
entries[].old_valuestring
Valor antigo, sempre como texto. Preços saem em reais com ponto ("49.90", não em centavos). Um valor vazio sai como o caractere Unicode U+2014 (traço longo).
entries[].new_valuestring
Valor novo, no mesmo formato.
entries[].created_atstring
Quando a alteração foi gravada, RFC 3339 em UTC.
totalinteger
Total de linhas do produto, em todas as páginas.
pageinteger
Página retornada.
per_pageinteger
Itens por página aplicados.
total_pagesinteger
Quantidade de páginas.

Erros

StatusQuandoCorpo
401Sem credenciais ou token expirado{"error":"invalid or expired token"}
403Usuário sem view_catalog nem manage_catalog{"error":"insufficient privileges","privilege_required_any":["manage_catalog","view_catalog"]}
429Limite de requisições{"error":"rate limit exceeded","detail":"too many requests, please try again later"}
500{id} que não é UUID (por limitação conhecida, não é 400){"error":"failed to get changelog","detail":"o valor \"abc\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."}
Como achar quem mexeu no preço

Peça o histórico e filtre as linhas com change_type igual a price_change e field igual a price: cada uma traz o preço antigo, o novo, o user_id e o horário. Para transformar o user_id em nome, consulte o usuário pelo painel de usuários da loja.

Veja também

  • Alterar produto
  • Consultar produto
  • Preço e estoque
  • Produtos
Anterior
Ligar a um mestre
Próxima
Mídia do produto
Nesta página
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também