Mudanças agendadas
Como agendar a troca de preço, preço de lista ou status de produtos e desfazê-la sozinha.
Uma mudança agendada diz: "neste dia e hora, troque este campo deste produto por este valor, e (opcionalmente) devolva o valor antigo em outra data". É o jeito de montar uma Black Friday na véspera sem ficar acordado à meia-noite: o preço novo entra às 00:00 e volta ao normal na terça. Um worker da plataforma confere o relógio a cada minuto e aplica o que venceu.
Como funciona
status | Significado |
|---|---|
scheduled | Aguardando apply_at. É o único estado que pode ser cancelado. |
applied | O novo valor foi gravado. Se há revert_at, aguarda a reversão. |
reverted | O valor antigo foi restaurado em revert_at. |
cancelled | Cancelada antes de ser aplicada. |
failed | A aplicação ou a reversão falhou; o motivo está em error. |
Fluxo típico
- Agende o lote
POST /scheduled-changescom os itens (preço de lançamento e preço de volta, por exemplo). A resposta traz obatch_id. Veja Agendar mudanças. - Confira o calendário
GET /scheduled-changes/calendar?month=2026-11mostra o que vai acontecer em cada dia. - AcompanheDepois do horário,
GET /scheduled-changes?status=failedrevela o que não foi aplicado. - Cancele, se precisoAntes de
apply_at, cancele o item ou o lote inteiro.
Conceitos importantes
Conflito de janela
Para o mesmo produto e o mesmo campo, a plataforma recusa um novo agendamento (409 window_conflict) se já existe outro scheduled ou applied que ainda vale, isto é, sem revert_at ou com revert_at no futuro. Na prática: depois que uma mudança permanente (sem revert_at) foi aplicada, aquele campo não aceita mais agendamentos novos para o mesmo produto.
Reversão
O valor a restaurar é lido no momento em que a mudança é aplicada, não no agendamento. Se alguém alterar o preço à mão entre a aplicação e a reversão, a reversão ainda devolve o valor que existia antes da aplicação.
Precisão do horário
O worker roda uma vez por minuto. Um apply_at no passado é aplicado na próxima passada (em até 1 minuto); não é recusado.
Endpoints
| Método e caminho | Para que serve | Auth | Página |
|---|---|---|---|
POST /api/v1/admin/scheduled-changes | Agenda um lote de mudanças | admin | Agendar mudanças |
GET /api/v1/admin/scheduled-changes | Lista mudanças agendadas | admin | Listar e ver o calendário |
GET /api/v1/admin/scheduled-changes/calendar | Agrupa as mudanças de um mês por dia | admin | Listar e ver o calendário |
POST /api/v1/admin/scheduled-changes/{id}/cancel | Cancela uma mudança | admin | Cancelar |
POST /api/v1/admin/scheduled-changes/batch/{batchId}/cancel | Cancela um lote inteiro | admin | Cancelar |
Erros comuns
- Agendar sem fuso.
2026-11-27T00:00:00Zé 21h de 26/11 em Brasília. Use-03:00. - Colocar
priceem reais. É inteiro em centavos: R$ 89,90 é8990. - Campo ou tipo que ainda não existe.
entity_typediferente deproductleva422; umfielddiferente dos três não é recusado na criação e virafailedna hora de aplicar. revert_atantes deapply_at. Não é recusado: a mudança é aplicada e revertida logo em seguida.- Tentar cancelar uma mudança já aplicada. Só
scheduledpode ser cancelada (422). Uma mudança aplicada com reversão pendente não tem rota para cancelar a reversão. - Listar sem filtro e achar que está vazio. A lista é ordenada da mais antiga para a mais nova e limitada a 500: filtre por
from/tooustatus.