Cupons do seller
Cria e gerencia cupons de desconto que valem apenas para os produtos do seller.
Cada seller cria os próprios cupons sem depender do administrador. O cupom nunca desconta itens de outro seller no mesmo carrinho. Não há módulo a ligar: é uma capacidade nativa do seller, mas sub-contas precisam de um privilégio de configurações.
Listar cupons
Um cupom (voucher) é um código que o cliente digita no carrinho para ganhar desconto. Os cupons do seller valem só para os itens dele no carrinho; os da loja inteira são do administrador. Lista todos os cupons do seller, sem paginação.
/api/v1/vendor/vouchersSellerCupons de desconto do seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/vouchers" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"vouchers": [
{
"id": 51,
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "BEMVINDO10",
"type": "fixed",
"value": 1200,
"min_order": 5000,
"max_uses": 10,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-01T03:00:00Z",
"expires_at": "2026-12-05T02:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-01T09:17:47Z",
"updated_at": "2026-10-01T09:21:55Z"
}
],
"total": 1
}Campos da resposta
vouchersobject[]Cupons.
idintegervendor_iduuidcodestringtypestringfixedpercentagefree_shippingvalueintegerfixed: centavos. percentage: pontos-base (1500 = 15%). free_shipping: ignorado.min_orderinteger0 = sem mínimo.max_usesinteger0 = ilimitado.used_countintegermax_per_userinteger0 = ilimitado.starts_atstring|nullnull = já vale.expires_atstring|nullnull = sem fim.is_activebooleandescriptionstringcreated_atstringupdated_atstringtotalintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios de configurações (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Criar cupom
Cria um cupom do seller. O vendor_id do corpo é ignorado: o cupom é sempre do seller do token.
/api/v1/vendor/vouchersSellerCriar um cupom
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
codestringtypestringobrigatóriofixedpercentagefree_shippingvalueintegerfixed, positivo) ou pontos-base (percentage, 1 a 10000). Ignorado em free_shipping.min_orderintegerpadrão: 0max_usesintegerpadrão: 0max_per_userintegerpadrão: 0starts_atstringexpires_atstringis_activebooleanpadrão: truedescriptionstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/vouchers" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "BEMVINDO10",
"type": "fixed",
"value": 1200,
"min_order": 5000,
"max_uses": 10,
"max_per_user": 1,
"expires_at": "2026-12-05T02:59:59Z",
"description": "Primeira compra"
}'Resposta
{
"id": 51,
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "BEMVINDO10",
"type": "fixed",
"value": 1200,
"min_order": 5000,
"max_uses": 10,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-01T03:00:00Z",
"expires_at": "2026-12-05T02:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-01T09:17:47Z",
"updated_at": "2026-10-01T09:21:55Z"
}Campos da resposta
idintegervendor_iduuidcodestringtypestringfixedpercentagefree_shippingvalueintegerfixed: centavos. percentage: pontos-base (1500 = 15%). free_shipping: ignorado.min_orderinteger0 = sem mínimo.max_usesinteger0 = ilimitado.used_countintegermax_per_userinteger0 = ilimitado.starts_atstring|nullnull = já vale.expires_atstring|nullnull = sem fim.is_activebooleandescriptionstringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Regra violada. O texto do error diz qual: tipo inválido, valor fixed não positivo, percentage fora de 1 a 10000, código já existente. Textos em inglês. | {"error":"voucher code 'BEMVINDO10' already exists"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios de configurações (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Ver cupom
Devolve um cupom do seller.
/api/v1/vendor/vouchers/{id}SellerDetalhe de um cupom
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
idintegerobrigatório400 invalid voucher id.Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/vouchers/51" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": 51,
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "BEMVINDO10",
"type": "fixed",
"value": 1200,
"min_order": 5000,
"max_uses": 10,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-01T03:00:00Z",
"expires_at": "2026-12-05T02:59:59Z",
"is_active": true,
"description": "Primeira compra",
"created_at": "2026-10-01T09:17:47Z",
"updated_at": "2026-10-01T09:21:55Z"
}Campos da resposta
idintegervendor_iduuidcodestringtypestringfixedpercentagefree_shippingvalueintegerfixed: centavos. percentage: pontos-base (1500 = 15%). free_shipping: ignorado.min_orderinteger0 = sem mínimo.max_usesinteger0 = ilimitado.used_countintegermax_per_userinteger0 = ilimitado.starts_atstring|nullnull = já vale.expires_atstring|nullnull = sem fim.is_activebooleandescriptionstringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não é inteiro. | {"error":"invalid voucher id"} |
| 404 | O cupom não existe ou não é seu. | {"error":"voucher not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios de configurações (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Atualizar cupom
Altera só os campos enviados. Você não consegue apagar starts_at nem expires_at por aqui (enviar nada mantém o valor) nem mudar o dono. Se mandar type, mande também value: sem ele o valor é tratado como zero e a validação recusa.
/api/v1/vendor/vouchers/{id}SellerAlterar um cupom
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
idintegerobrigatório400 invalid voucher id.Corpo da requisição
codestringtypestringfixedpercentagefree_shippingvalueintegerfixed, positivo) ou pontos-base (percentage, 1 a 10000). Ignorado em free_shipping.min_orderintegermax_usesintegermax_per_userintegerstarts_atstringexpires_atstringis_activebooleandescriptionstringExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/vouchers/51" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_active": false
}'Resposta
{
"id": 51,
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "BEMVINDO10",
"type": "fixed",
"value": 1200,
"min_order": 5000,
"max_uses": 10,
"used_count": 0,
"max_per_user": 1,
"starts_at": "2026-10-01T03:00:00Z",
"expires_at": "2026-12-05T02:59:59Z",
"is_active": false,
"description": "Primeira compra",
"created_at": "2026-10-01T09:17:47Z",
"updated_at": "2026-10-01T09:21:55Z"
}Campos da resposta
idintegervendor_iduuidcodestringtypestringfixedpercentagefree_shippingvalueintegerfixed: centavos. percentage: pontos-base (1500 = 15%). free_shipping: ignorado.min_orderinteger0 = sem mínimo.max_usesinteger0 = ilimitado.used_countintegermax_per_userinteger0 = ilimitado.starts_atstring|nullnull = já vale.expires_atstring|nullnull = sem fim.is_activebooleandescriptionstringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não inteiro, JSON inválido ou regra violada (mesmos textos da criação). | {"error":"fixed voucher value must be positive (in centavos)"} |
| 404 | O cupom não existe ou não é seu. | {"error":"voucher 42 not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios de configurações (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Excluir cupom
Apaga o cupom de vez. Pedidos já feitos com ele não mudam. Para só parar de aceitar, use PUT com is_active: false.
/api/v1/vendor/vouchers/{id}SellerExcluir um cupom
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
idintegerobrigatório400 invalid voucher id.Exemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/vendor/vouchers/51" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "voucher deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não é inteiro. | {"error":"invalid voucher id"} |
| 404 | O cupom não existe ou não é seu. | {"error":"voucher 42 not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios de configurações (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings","vendor_view_settings"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |