Criar, alterar e excluir orçamento
Cria, ajusta e remove um teto de gasto em desconto.
Crie um orçamento para proteger o caixa de uma campanha. Ele vale a partir do momento em que é criado e só conta descontos concedidos depois disso. O PUT ajusta o teto, a janela, o alerta e o status; o que o orçamento limita (escopo, alvo, dimensão, dono) não muda. Para pausar sem perder o histórico de consumo, envie "status": "paused"; para voltar, "status": "active". Excluir apaga o orçamento e o razão de consumo dele.
Criar um orçamento
/api/v1/admin/promotion-budgetsAdminCria um orçamento de promoções
Corpo da requisição
scopestringobrigatóriopromotiongroupcategorybrandsellermarketplaceO que o teto limita.
scope_refuuidId do alvo. Obrigatório, em UUID, para todo escopo exceto
marketplace (onde é ignorado). Vira minúsculo.dimensionstringobrigatóriodiscount_amountredemptionsO que medir.
limit_centsintegerTeto em centavos, para
discount_amount.limit_countintegerTeto em usos, para
redemptions.windowstringpadrão: lifetimelifetimedailyweeklymonthlyJanela de contagem.
alert_threshold_pctintegerPercentual do teto que liga
alert_reached.enforcementstringpadrão: stop_applyingComportamento ao esgotar. Deixe o padrão.
on_low_balancestringpadrão: hard_stophard_stoppartialGravado, mas só
hard_stop tem efeito hoje.funding_sourcestringpadrão: sellerselleroperatormanufacturersharedQuem paga (informativo).
funding_splitobjectPartição do custo, para
shared.vendor_iduuidSeller dono. Omita para orçamento da loja.
statusstringpadrão: activeactive ou outro valor para deixar o orçamento fora do cálculo.Exemplo de requisição: criar
bash
curl -X POST "$BASE_URL/api/v1/admin/promotion-budgets" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scope": "group",
"scope_ref": "7af8cfda-fbbc-4a75-b266-fb90ad2d11fb",
"dimension": "discount_amount",
"limit_cents": 999900,
"window": "monthly",
"alert_threshold_pct": 80
}'Resposta: criar
201Orçamento criado
json
{
"id": "c777e051-253e-4da0-a156-a1fe4032e8d1",
"scope": "group",
"scope_ref": "7af8cfda-fbbc-4a75-b266-fb90ad2d11fb",
"dimension": "discount_amount",
"limit_cents": 999900,
"window": "monthly",
"alert_threshold_pct": 80,
"enforcement": "stop_applying",
"on_low_balance": "hard_stop",
"funding_source": "seller",
"status": "active",
"created_at": "2026-07-20T00:55:13.241665Z",
"updated_at": "2026-07-20T01:32:33.732761Z",
"spent": 0,
"usage_limit": 999900,
"remaining": 999900,
"unlimited": false,
"exhausted": false,
"alert_reached": false,
"pct_used": 0
}Campos da resposta
(campos do orçamento)objectO orçamento criado, com os campos de consumo (zerados).
Erros: criar
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo promotions está desligado na loja. | {"error":"module_disabled","module":"promotions"} |
| 403 | Falta o privilégio: view_promotions para ler, manage_promotions para gravar. | {"error":"insufficient privileges","required":"manage_promotions"} |
| 400 | Corpo inválido, scope ou dimension fora da lista, scope_ref ausente ou que não é UUID, ou redemptions com limit_cents e sem limit_count. | {"error":"failed to create promotion budget","detail":"promotion budget validation: scope_ref is required for scope \"group\""} |
| 500 | Valor fora da lista em window, on_low_balance ou funding_source (barrado pelo banco). | {"error":"failed to create promotion budget","detail":"..."} |
Alterar um orçamento
/api/v1/admin/promotion-budgets/{id}AdminAltera teto, janela, alerta ou status de um orçamento
Parâmetros de caminho
iduuidobrigatórioId do orçamento.
Corpo da requisição
limit_centsintegerNovo teto em centavos.
limit_countintegerNovo teto em usos.
windowstringlifetimedailyweeklymonthlyNova janela.
alert_threshold_pctintegerNovo percentual de alerta.
enforcementstringComportamento ao esgotar.
on_low_balancestringhard_stoppartialhard_stop ou partial.funding_sourcestringselleroperatormanufacturersharedQuem paga.
funding_splitobjectPartição do custo.
statusstringactive para ligar; outro valor para tirar do cálculo.Exemplo de requisição: alterar
bash
curl -X PUT "$BASE_URL/api/v1/admin/promotion-budgets/c777e051-253e-4da0-a156-a1fe4032e8d1" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"limit_cents": 1500000,
"alert_threshold_pct": 90
}'Resposta: alterar
200Orçamento alterado
json
{
"id": "c777e051-253e-4da0-a156-a1fe4032e8d1",
"scope": "group",
"scope_ref": "7af8cfda-fbbc-4a75-b266-fb90ad2d11fb",
"dimension": "discount_amount",
"limit_cents": 1500000,
"window": "lifetime",
"enforcement": "stop_applying",
"on_low_balance": "hard_stop",
"funding_source": "seller",
"status": "active",
"created_at": "2026-07-20T00:55:13.241665Z",
"updated_at": "2026-07-20T01:32:33.732761Z",
"spent": 120000,
"usage_limit": 1500000,
"remaining": 1380000,
"unlimited": false,
"exhausted": false,
"alert_reached": false,
"pct_used": 8
}Campos da resposta
(campos do orçamento)objectO orçamento já alterado, com o consumo atual.
Erros: alterar
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo promotions está desligado na loja. | {"error":"module_disabled","module":"promotions"} |
| 403 | Falta o privilégio: view_promotions para ler, manage_promotions para gravar. | {"error":"insufficient privileges","required":"manage_promotions"} |
| 400 | O corpo traz scope, scope_ref, dimension ou vendor_id: campos imutáveis. A mensagem diz para criar outro orçamento. | {"error":"immutable_field","detail":"o campo \"scope\" não pode ser alterado por este endpoint: ..."} |
| 400 | Corpo que não é JSON. | {"error":"invalid request body","detail":"..."} |
| 404 | Não existe orçamento com esse id. | {"error":"failed to get promotion budget","detail":"promotion budget not found"} |
| 500 | O id não é um UUID válido. Hoje esta rota responde 500 (e não 400) nesse caso; a mensagem em detail explica o problema. | {"error":"failed to get promotion budget","detail":"o valor \"xyz\" não é um uuid válido. ..."} |
Excluir um orçamento
/api/v1/admin/promotion-budgets/{id}AdminExclui um orçamento e o razão de consumo
Parâmetros de caminho
iduuidobrigatórioId do orçamento.
Exemplo de requisição: excluir
bash
curl -X DELETE "$BASE_URL/api/v1/admin/promotion-budgets/c777e051-253e-4da0-a156-a1fe4032e8d1" \
-H "Authorization: Bearer $TOKEN"Resposta: excluir
200Orçamento excluído
json
{
"deleted": true
}Erros: excluir
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo promotions está desligado na loja. | {"error":"module_disabled","module":"promotions"} |
| 403 | Falta o privilégio: view_promotions para ler, manage_promotions para gravar. | {"error":"insufficient privileges","required":"manage_promotions"} |
| 404 | Não existe orçamento com esse id. | {"error":"failed to get promotion budget","detail":"promotion budget not found"} |
| 500 | O id não é um UUID válido. Hoje esta rota responde 500 (e não 400) nesse caso; a mensagem em detail explica o problema. | {"error":"failed to get promotion budget","detail":"o valor \"xyz\" não é um uuid válido. ..."} |