Listar e detalhar promoções
Lista as promoções da loja com filtros e paginação e devolve o detalhe de uma promoção.
Use a lista para montar uma tela de gestão ou sincronizar as promoções com outro sistema. O detalhe de uma promoção acrescenta labels, o nome legível de cada produto, categoria ou seller citado nas condições, para você não precisar resolver os ids um a um. Promoções excluídas não aparecem; as inativas (D) e as expiradas (E) aparecem.
Listar promoções
/api/v1/admin/promotionsAdminLista promoções, da mais nova para a mais antiga, com filtros
Parâmetros de consulta
pageintegerpadrão: 1Página, a partir de 1.
per_pageintegerpadrão: 20Itens por página, de 1 a 100. Fora disso volta ao padrão.
statusstringFiltra pelo status. Aceita
active, inactive, disabled, expired, draft ou a letra.searchstringBusca parte do nome ou do código, sem diferenciar maiúsculas.
zonestringcartcatalogcart ou catalog.vendor_iduuidSó promoções deste seller.
marketplace_onlybooleantrue devolve só as promoções da loja (sem seller). Se vendor_id vier junto, ele vence.Exemplo de requisição: listar
bash
curl "$BASE_URL/api/v1/admin/promotions?status=active&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta: listar
200Página de promoções
json
{
"promotions": [
{
"id": "7c1f0a52-3b8e-4d11-9a47-5e2b6d8c1f30",
"name": "Black Friday 10% nas camisas",
"type": "percentage",
"code": "BLACK10",
"discount": 1000,
"status": "A",
"zone": "cart",
"valid_from": "2026-11-27T03:00:00Z",
"valid_until": "2026-11-30T02:59:59Z",
"usage_limit": 500,
"usage_count": 12
}
],
"total": 21276,
"page": 1,
"per_page": 20,
"total_pages": 1064
}Campos da resposta
promotionsarrayPromoções da página. Lista vazia vem como
null.totalintegerTotal de promoções que casam com o filtro.
pageintegerPágina devolvida.
per_pageintegerTamanho da página usado.
total_pagesintegerTotal de páginas.
Cada item da lista traz todos os campos descritos abaixo; o exemplo mostra só alguns.
Erros: listar
| 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 | O usuário não tem o privilégio exigido (view_promotions para ler, manage_promotions para gravar). | {"error":"insufficient privileges","required":"manage_promotions"} |
| 500 | Falha ao consultar o banco. | {"error":"failed to list promotions","detail":"..."} |
Detalhar uma promoção
/api/v1/admin/promotions/{id}AdminDetalha uma promoção, com os nomes das condições resolvidos
Parâmetros de caminho
iduuidobrigatórioId da promoção, UUID completo.
Exemplo de requisição: detalhar
bash
curl "$BASE_URL/api/v1/admin/promotions/7c1f0a52-3b8e-4d11-9a47-5e2b6d8c1f30" \
-H "Authorization: Bearer $TOKEN"Resposta: detalhar
200Promoção encontrada
json
{
"id": "7c1f0a52-3b8e-4d11-9a47-5e2b6d8c1f30",
"name": "Black Friday 10% nas camisas",
"description": "",
"type": "percentage",
"code": "BLACK10",
"discount": 1000,
"conditions": { "min_cart_total": 20000 },
"usage_limit": 500,
"usage_count": 0,
"valid_from": "2026-11-27T03:00:00Z",
"valid_until": "2026-11-30T02:59:59Z",
"status": "A",
"priority": 0,
"stop_other_rules": false,
"stackable": false,
"zone": "cart",
"condition_groups": null,
"bonus_type": null,
"bonus_config": null,
"bonuses": [],
"free_shipping_method_id": null,
"per_user_limit": 1,
"created_at": "2026-10-11T14:02:10.482113Z",
"updated_at": "2026-10-11T14:02:10.482113Z",
"promotion_id": "7c1f0a52-3b8e-4d11-9a47-5e2b6d8c1f30",
"coupon_id": "7c1f0a52-3b8e-4d11-9a47-5e2b6d8c1f30",
"bonus_value": 1000,
"from_date": 1795748400,
"expiry_date": 1796007599,
"users": 0,
"timestamp": 1791727330,
"updated_timestamp": 1791727330
}Campos da resposta
iduuidIdentificador da promoção (UUID).
vendor_iduuid | omittedSeller dono da promoção. Ausente quando a promoção vale para a loja toda.
namestringNome interno, mostrado no painel.
descriptionstringDescrição livre. Pode ser vazia.
typestringTipo da promoção (veja a tabela de tipos na home da seção).
codestring | nullCódigo do cupom, sempre em maiúsculas.
null quando a promoção é automática.discountintegerValor do desconto. Em
percentage são pontos-base (1000 = 10%). Em fixed são centavos (2500 = R$ 25,00).max_discountinteger | omittedTeto do desconto em centavos. Ausente quando não há teto.
conditionsobjectCondições simples (veja a home da seção).
{} quando não há.condition_groupsobject | nullCondições aninhadas E/OU.
null quando não há.usage_limitintegerMáximo de usos no total.
0 = sem limite.per_user_limitinteger | omittedMáximo de usos por cliente.
usage_countintegerQuantas vezes já foi usada em pedidos.
valid_fromstring (RFC 3339)Início da vigência, em UTC.
valid_untilstring (RFC 3339) | nullFim da vigência, em UTC.
null = sem fim.statusstringLetra do status:
A ativa, D inativa, E expirada.priorityintegerOrdem de avaliação. Menor número é avaliado primeiro.
stop_other_rulesbooleanQuando
true, as promoções seguintes deixam de ser avaliadas.stackablebooleanQuando
true, pode se combinar com outras promoções acumuláveis.zonestringcart (carrinho) ou catalog (preço na vitrine).bonus_typestring | nullTipo de bônus único (formato antigo). Prefira
bonuses.bonus_configobject | nullConfiguração do bônus único (formato antigo).
bonusesarrayLista de bônus. Cada item tem
bonus_type e config.free_shipping_method_iduuid | nullForma de envio que ganha frete grátis, quando o tipo é
free_shipping.labelsobjectSó no detalhe de uma promoção: mapa de id para nome (produto, categoria, seller, grupo) de tudo que as condições citam.
catalog_scopeobject | omittedSó em promoções de catálogo: alcance real, com
store_wide (loja toda), products e categories (quantidades).created_atstring (RFC 3339)Criação.
updated_atstring (RFC 3339)Última alteração.
promotion_id, coupon_id, bonus_value, from_date, expiry_date, users, timestamp, updated_timestampmixedApelidos que repetem
id, discount, valid_from, valid_until (estes dois em segundos Unix), usage_count e as datas de criação e alteração. coupon_id só vem quando há código. Em integrações novas ignore-os.Erros: detalhar
| 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 | O usuário não tem o privilégio exigido (view_promotions para ler, manage_promotions para gravar). | {"error":"insufficient privileges","required":"manage_promotions"} |
| 400 | O id não é um UUID completo (inclui a palavra bulk por engano). | {"error":"invalid id","detail":"o id da promoção precisa ser o uuid completo ..."} |
| 404 | Não existe promoção com esse id. | {"error":"promotion not found"} |