POSTAgendar mudanças
Agenda um lote de mudanças de preço, preço de lista ou status de produtos.
Envie todos os itens da campanha de uma vez. A plataforma confere os conflitos de todos antes de gravar qualquer um; se um item conflita, nada é criado. Cada item pode ter revert_at para voltar ao valor anterior sozinho. A resposta devolve o batch_id, que serve para cancelar o lote inteiro.
Agendar um lote
/api/v1/admin/scheduled-changesAdminAgenda um lote de mudanças
Corpo da requisição
itemsarrayobrigatórioUm ou mais itens.
entity_typestringobrigatórioproductTipo do alvo. Hoje só
product.entity_idstringobrigatórioUUID do produto.
fieldstringobrigatóriopricelist_pricestatusCampo a mudar.
new_valueanyobrigatórioNovo valor. Centavos (inteiro) para
price e list_price (null em list_price remove o preço "de"); texto para status (active, inactive/disabled ou a letra). Obrigatório na prática: sem ele a mudança falha ao ser aplicada.apply_atstring (RFC 3339)obrigatórioQuando aplicar. Não pode ser omitido nem zero.
revert_atstring (RFC 3339)Quando restaurar o valor anterior. Omitido = permanente.
Exemplo de requisição: agendar
bash
curl -X POST "$BASE_URL/api/v1/admin/scheduled-changes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"entity_type": "product",
"entity_id": "4a6235f6-9132-4945-806d-09c617174c42",
"field": "price",
"new_value": 8990,
"apply_at": "2026-11-27T00:00:00-03:00",
"revert_at": "2026-11-29T23:59:00-03:00"
},
{
"entity_type": "product",
"entity_id": "83e6c157-293b-4acb-9f11-003a5e17ec5b",
"field": "price",
"new_value": 2490,
"apply_at": "2026-11-27T00:00:00-03:00",
"revert_at": "2026-11-29T23:59:00-03:00"
}
]
}'Resposta: agendar
201Lote agendado
json
{
"batch_id": "0d4c8f1a-6b2e-4c9d-9f31-7a5e2b8c0d14",
"items": [
{
"id": "2fe513d8-c5e4-44ce-89c5-4287ea725748",
"batch_id": "0d4c8f1a-6b2e-4c9d-9f31-7a5e2b8c0d14",
"entity_type": "product",
"entity_id": "4a6235f6-9132-4945-806d-09c617174c42",
"entity_label": "",
"field": "price",
"new_value": 8990,
"apply_at": "2026-11-27T03:00:00Z",
"revert_at": "2026-11-30T02:59:00Z",
"status": "scheduled",
"created_by": "67bf291c-0846-4053-9528-8cfd5ab0ebf1",
"created_at": "2026-10-11T15:10:00Z"
}
]
}Campos da resposta
batch_iduuidIdentificador do lote.
itemsarrayUm item por mudança agendada, na ordem enviada.
iduuidIdentificador da mudança agendada.
batch_iduuidLote em que a mudança foi criada. Todas as mudanças de uma mesma chamada compartilham o lote.
entity_typestringTipo do alvo. Hoje só
product.entity_idstringId do alvo (UUID do produto).
entity_labelstringNome legível do alvo (nome do produto). Se o alvo não existe, repete o
entity_id. Vem vazio na resposta da criação.fieldstringCampo que muda:
price, list_price ou status.new_valueanyValor aplicado em
apply_at. Centavos (inteiro) para price e list_price; texto para status.revert_valueany | omittedValor que o campo tinha quando a mudança foi aplicada. Só existe se há
revert_at e a mudança já foi aplicada.apply_atstring (RFC 3339)Quando aplicar.
revert_atstring (RFC 3339) | nullQuando desfazer.
null = permanente.statusstringscheduledappliedrevertedcancelledfailedscheduled, applied, reverted, cancelled ou failed.errorstring | omittedMotivo da falha, quando
status é failed.created_byuuid | nullUsuário que agendou.
created_atstring (RFC 3339)Quando foi agendada.
Erros: agendar
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | Falta um destes privilégios: manage_catalog, manage_layout ou manage_content. Vale também para leitura. | {"error":"insufficient privileges","required":"manage_catalog"} |
| 400 | Corpo que não é JSON. | {"error":"invalid body","detail":"..."} |
| 409 | Algum item conflita com outra mudança do mesmo produto e campo. conflicts lista cada uma, com existing_id e apply_at. Nada foi criado. | {"error":"window_conflict","conflicts":[{"entity_type":"product","entity_id":"...","field":"price","existing_id":"...","apply_at":"..."}]} |
| 422 | Lote vazio; item sem entity_type, entity_id, field ou apply_at; ou entity_type não suportado. | {"error":"failed","detail":"unsupported entity_type \"banner\""} |