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.
/api/v1/admin/products/{id}/changelogAdminHistó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órioQuery parameters
pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/admin/products/0497b6a8-c868-43be-ac21-2abddd24cd3c/changelog?per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"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
entriesarrayentries[].iduuidentries[].product_iduuidentries[].user_iduuidentries[].change_typestringcreatedupdateddeletedstatus_changeprice_changestock_changemedia_changevariant_changeupdated (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[].fieldstringprice, name, status...).entries[].old_valuestring"49.90", não em centavos). Um valor vazio sai como o caractere Unicode U+2014 (traço longo).entries[].new_valuestringentries[].created_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem credenciais ou token expirado | {"error":"invalid or expired token"} |
| 403 | Usuário sem view_catalog nem manage_catalog | {"error":"insufficient privileges","privilege_required_any":["manage_catalog","view_catalog"]} |
| 429 | Limite 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."} |