Vouchers
Lista, consulta, cria, altera e apaga vouchers.
Operações sobre um voucher de cada vez.
Listar vouchers
/api/v1/admin/vouchersAdminLista vouchers
Parâmetros de consulta
searchstringTrecho do código ou da descrição.
statusstringactiveexpiredinactiveexhaustedactive (ligado e não expirado), expired, inactive ou exhausted (usos esgotados).typestringfixed, percentage ou free_shipping.vendor_iduuidSó vouchers deste seller.
marketplace_onlybooleantrue = só os da loja toda.pageintegerpadrão: 1Página.
per_pageintegerpadrão: 20Itens por página; fora de 1 a 100 vale 20.
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/vouchers?status=active&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
200Vouchers
json
{
"vouchers": [
{
"id": 79,
"vendor_id": null,
"code": "BEMVINDO10",
"type": "percentage",
"value": 1000,
"min_order": 5000,
"max_uses": 500,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-11T00:00:00Z",
"expires_at": "2026-12-31T23:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}
],
"total": 38,
"page": 1,
"per_page": 20,
"total_pages": 2
}Campos da resposta
totalintegerTotal.
pageintegerPágina.
per_pageintegerTamanho.
total_pagesintegerTotal de páginas.
vouchersarrayVouchers.
idintegerId do voucher.
vendor_iduuid|nullSeller dono;
null = vale para a loja toda.codestringCódigo em maiúsculas.
typestringfixedpercentagefree_shippingfixed, percentage ou free_shipping.valueintegerCentavos (fixed) ou pontos-base (percentage).
min_orderintegerPedido mínimo em centavos.
max_usesintegerLimite total de usos;
0 = ilimitado.used_countintegerUsos já feitos.
max_per_userintegerLimite por cliente;
0 = ilimitado.starts_atstring|nullInício da validade (RFC 3339).
expires_atstring|nullFim da validade (RFC 3339).
is_activebooleanLigado.
descriptionstringNota interna.
created_atstringCriação.
updated_atstringÚltima alteração.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | Módulo voucher-system desligado na loja. | {"error":"module_disabled","module":"voucher-system"} |
Consultar um voucher
/api/v1/admin/vouchers/{id}AdminConsulta um voucher
Parâmetros de caminho
idintegerobrigatórioId do voucher.
Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/vouchers/79" \
-H "Authorization: Bearer $TOKEN"Resposta
200Voucher
json
{
"id": 79,
"vendor_id": null,
"code": "BEMVINDO10",
"type": "percentage",
"value": 1000,
"min_order": 5000,
"max_uses": 500,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-11T00:00:00Z",
"expires_at": "2026-12-31T23:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
idintegerId do voucher.
vendor_iduuid|nullSeller dono;
null = vale para a loja toda.codestringCódigo em maiúsculas.
typestringfixedpercentagefree_shippingfixed, percentage ou free_shipping.valueintegerCentavos (fixed) ou pontos-base (percentage).
min_orderintegerPedido mínimo em centavos.
max_usesintegerLimite total de usos;
0 = ilimitado.used_countintegerUsos já feitos.
max_per_userintegerLimite por cliente;
0 = ilimitado.starts_atstring|nullInício da validade (RFC 3339).
expires_atstring|nullFim da validade (RFC 3339).
is_activebooleanLigado.
descriptionstringNota interna.
created_atstringCriação.
updated_atstringÚltima alteração.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não numérico. | {"error":"invalid voucher id"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | Módulo voucher-system desligado na loja. | {"error":"module_disabled","module":"voucher-system"} |
| 404 | Voucher inexistente. | {"error":"voucher not found"} |
Criar um voucher
/api/v1/admin/vouchersAdminCria um voucher
Corpo da requisição
codestringCódigo. Vazio = gerado. Vira maiúsculas.
typestringobrigatóriofixedpercentagefree_shippingTipo de desconto.
valueintegerCentavos ou pontos-base.
fixed: maior que 0. percentage: de 1 a 10000. Ignorado em free_shipping.min_orderintegerpadrão: 0Pedido mínimo em centavos.
max_usesintegerpadrão: 0Limite total;
0 = ilimitado.max_per_userintegerpadrão: 0Limite por cliente;
0 = ilimitado.starts_atstringInício (RFC 3339).
expires_atstringFim (RFC 3339).
is_activebooleanpadrão: truePadrão
true.descriptionstringNota interna.
vendor_iduuidRestringe a um seller.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/vouchers" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "BEMVINDO10",
"type": "percentage",
"value": 1000,
"min_order": 5000,
"max_uses": 500,
"max_per_user": 1,
"expires_at": "2026-12-31T23:59:59Z",
"description": "Primeira compra"
}'Resposta
201Voucher criado
json
{
"id": 79,
"vendor_id": null,
"code": "BEMVINDO10",
"type": "percentage",
"value": 1000,
"min_order": 5000,
"max_uses": 500,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-11T00:00:00Z",
"expires_at": "2026-12-31T23:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
idintegerId do voucher.
vendor_iduuid|nullSeller dono;
null = vale para a loja toda.codestringCódigo em maiúsculas.
typestringfixedpercentagefree_shippingfixed, percentage ou free_shipping.valueintegerCentavos (fixed) ou pontos-base (percentage).
min_orderintegerPedido mínimo em centavos.
max_usesintegerLimite total de usos;
0 = ilimitado.used_countintegerUsos já feitos.
max_per_userintegerLimite por cliente;
0 = ilimitado.starts_atstring|nullInício da validade (RFC 3339).
expires_atstring|nullFim da validade (RFC 3339).
is_activebooleanLigado.
descriptionstringNota interna.
created_atstringCriação.
updated_atstringÚltima alteração.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | type inválido, value fora da regra do tipo ou código repetido. | {"error":"percentage voucher value must be 1-10000 basis points (0.01%-100%)"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | Módulo voucher-system desligado na loja. | {"error":"module_disabled","module":"voucher-system"} |
| 422 | O desconto derruba produtos abaixo do piso do Protetor de Margem. O corpo é o detalhamento do protetor. | {"allowed":false,"...":"..."} |
Alterar um voucher
Atualização parcial: só os campos enviados mudam. used_count não pode ser editado.
/api/v1/admin/vouchers/{id}AdminAltera um voucher
Parâmetros de caminho
idintegerobrigatórioId do voucher.
Corpo da requisição
codestringNovo código. Vira maiúsculas. Não envie string vazia.
typestringfixedpercentagefree_shippingTipo do desconto. Ao enviar
type, envie value junto: um value omitido é validado como 0 e é recusado em fixed e percentage.valueintegerCentavos ou pontos-base.
fixed: maior que 0. percentage: de 1 a 10000. Ignorado em free_shipping.min_orderintegerPedido mínimo em centavos.
max_usesintegerLimite total;
0 = ilimitado.max_per_userintegerLimite por cliente;
0 = ilimitado.starts_atstringInício (RFC 3339).
expires_atstringFim (RFC 3339).
is_activebooleanLiga ou desliga o cupom.
descriptionstringNota interna.
vendor_iduuidRestringe a um seller.
Exemplo de requisição
bash
curl -X PUT "$BASE_URL/api/v1/admin/vouchers/79" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_active": false,
"max_uses": 1000
}'Resposta
200Voucher alterado
json
{
"id": 79,
"vendor_id": null,
"code": "BEMVINDO10",
"type": "percentage",
"value": 1000,
"min_order": 5000,
"max_uses": 1000,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-11T00:00:00Z",
"expires_at": "2026-12-31T23:59:59Z",
"is_active": false,
"description": "Primeira compra",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
idintegerId do voucher.
vendor_iduuid|nullSeller dono;
null = vale para a loja toda.codestringCódigo em maiúsculas.
typestringfixedpercentagefree_shippingfixed, percentage ou free_shipping.valueintegerCentavos (fixed) ou pontos-base (percentage).
min_orderintegerPedido mínimo em centavos.
max_usesintegerLimite total de usos;
0 = ilimitado.used_countintegerUsos já feitos.
max_per_userintegerLimite por cliente;
0 = ilimitado.starts_atstring|nullInício da validade (RFC 3339).
expires_atstring|nullFim da validade (RFC 3339).
is_activebooleanLigado.
descriptionstringNota interna.
created_atstringCriação.
updated_atstringÚltima alteração.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id inválido, corpo inválido, tipo/valor inválido ou código repetido. | {"error":"voucher code already exists"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | Módulo voucher-system desligado na loja. | {"error":"module_disabled","module":"voucher-system"} |
| 404 | Voucher inexistente. | {"error":"voucher 79 not found"} |
Apagar um voucher
/api/v1/admin/vouchers/{id}AdminApaga um voucher
Parâmetros de caminho
idintegerobrigatórioId do voucher.
Exemplo de requisição
bash
curl -X DELETE "$BASE_URL/api/v1/admin/vouchers/79" \
-H "Authorization: Bearer $TOKEN"Resposta
200Apagado
json
{
"message": "voucher deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não numérico. | {"error":"invalid voucher id"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | Módulo voucher-system desligado na loja. | {"error":"module_disabled","module":"voucher-system"} |
| 404 | Voucher inexistente. | {"error":"voucher 79 not found"} |