Kits
Lista, cria, consulta, altera e exclui os kits do seller: vários produtos seus vendidos juntos, com preço fixo ou desconto.
O kit mostra ao cliente um conjunto de produtos com um preço único. O preço pode ser fixo (price_bps) ou calculado: a soma dos itens menos um desconto percentual (discount_bps) ou em valor (discount_type: "fixed"). Kits do seller só aparecem na página do próprio seller, não na vitrine geral do marketplace.
Listar
/api/v1/vendor/bundlesSellerListar os kits
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
pageintegerpadrão: 1Página.
per_pageintegerpadrão: 20Itens por página, 1 a 100.
statusstringFiltra por status (
A, D).searchstringBusca no nome.
Exemplo de requisição (listar)
bash
curl "$BASE_URL/api/v1/vendor/bundles?per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta (listar)
200Kits
json
{
"bundles": [
{
"id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"name": "Kit Camiseta + Boné",
"slug": "kit-camiseta-bone",
"description": "Leve os dois e economize",
"price_bps": 0,
"discount_bps": 1000,
"discount_type": "percentage",
"price_override": 0,
"discount_value": 1000,
"status": "A",
"image_url": "",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"items": [
{
"id": "63903d90-fb9c-4c17-997b-f92f4c239e41",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 1,
"sort_order": 0,
"product_name": "Camiseta Básica Algodão Preta",
"slug": "camiseta-basica-algodao-preta",
"product_price": 4990,
"product_image": "/uploads/dfe2555e/camiseta.png",
"product_sku": "CAM-001"
},
{
"id": "ed10be82-1ba0-4c25-b9be-31be4391927b",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "0d6c7b0e-3f55-4d2c-9f0e-1d3b6d1f6a10",
"quantity": 1,
"sort_order": 1,
"product_name": "Boné Liso",
"slug": "bone-liso",
"product_price": 3990,
"product_image": "",
"product_sku": "BON-001"
}
],
"calculated_price": 8980,
"final_price": 8082
}
],
"total": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}Campos da resposta
bundlesarrayKits, no formato abaixo.
idstring (uuid)Id do kit.
namestringNome.
slugstringSlug único.
descriptionstringDescrição.
price_bpsintegerPreço final fixo do kit, em centavos (
0 = calcular a partir dos itens). Apesar do nome, não é pontos-base.discount_bpsintegerDesconto: pontos-base (1000 = 10%) se
discount_type é percentage; centavos se fixed.discount_typestringnonepercentagefixedTipo do desconto.
price_overrideintegerEspelho de
price_bps.discount_valueintegerEspelho de
discount_bps.statusstringA ativo, D desativado.image_urlstringImagem do kit.
vendor_idstring (uuid)Seu seller.
itemsarrayItens (só na consulta e na criação/alteração):
product_id, quantity, sort_order, e dados do produto.calculated_priceintegerSoma dos itens (preço × quantidade) em centavos.
final_priceintegerPreço que o cliente paga: o override, ou a soma menos o desconto. Nunca negativo.
created_atstringCriação (RFC 3339).
updated_atstringÚltima alteração (RFC 3339).
totalintegerTotal.
pageintegerPágina.
per_pageintegerItens por página.
total_pagesintegerTotal de páginas.
Erros (listar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings"]} |
Criar
/api/v1/vendor/bundlesSellerCriar um kit
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Corpo da requisição
namestringobrigatórioNome do kit.
slugstringSlug; vazio = derivado do nome.
descriptionstringDescrição.
statusstringobrigatórioADA ativo ou D desativado. Envie sempre: o padrão da API quebra a criação.price_bpsintegerPreço final fixo em centavos. Se maior que zero, ignora o desconto.
discount_bpsintegerDesconto percentual em pontos-base (1000 = 10%).
discount_typestringnonepercentagefixedOpcional. Com
discount_value, permite desconto fixed (centavos).discount_valueintegerValor do desconto conforme
discount_type.price_overrideintegerSinônimo de
price_bps.image_urlstringImagem do kit.
itemsarrayProdutos do kit. Cada um precisa ser seu.
product_idstring (uuid)obrigatórioProduto.
quantityintegerpadrão: 1Unidades no kit. Mínimo 1.
sort_orderintegerOrdem.
Exemplo de requisição (criar)
bash
curl -X POST "$BASE_URL/api/v1/vendor/bundles" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Kit Camiseta + Boné",
"status": "A",
"discount_bps": 1000,
"items": [
{
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 1
},
{
"product_id": "0d6c7b0e-3f55-4d2c-9f0e-1d3b6d1f6a10",
"quantity": 1
}
]
}'Resposta (criar)
201Kit criado
json
{
"id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"name": "Kit Camiseta + Boné",
"slug": "kit-camiseta-bone",
"description": "Leve os dois e economize",
"price_bps": 0,
"discount_bps": 1000,
"discount_type": "percentage",
"price_override": 0,
"discount_value": 1000,
"status": "A",
"image_url": "",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"items": [
{
"id": "63903d90-fb9c-4c17-997b-f92f4c239e41",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 1,
"sort_order": 0,
"product_name": "Camiseta Básica Algodão Preta",
"slug": "camiseta-basica-algodao-preta",
"product_price": 4990,
"product_image": "/uploads/dfe2555e/camiseta.png",
"product_sku": "CAM-001"
},
{
"id": "ed10be82-1ba0-4c25-b9be-31be4391927b",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "0d6c7b0e-3f55-4d2c-9f0e-1d3b6d1f6a10",
"quantity": 1,
"sort_order": 1,
"product_name": "Boné Liso",
"slug": "bone-liso",
"product_price": 3990,
"product_image": "",
"product_sku": "BON-001"
}
],
"calculated_price": 8980,
"final_price": 8082
}Campos da resposta
idstring (uuid)Id do kit.
namestringNome.
slugstringSlug único.
descriptionstringDescrição.
price_bpsintegerPreço final fixo do kit, em centavos (
0 = calcular a partir dos itens). Apesar do nome, não é pontos-base.discount_bpsintegerDesconto: pontos-base (1000 = 10%) se
discount_type é percentage; centavos se fixed.discount_typestringnonepercentagefixedTipo do desconto.
price_overrideintegerEspelho de
price_bps.discount_valueintegerEspelho de
discount_bps.statusstringA ativo, D desativado.image_urlstringImagem do kit.
vendor_idstring (uuid)Seu seller.
itemsarrayItens (só na consulta e na criação/alteração):
product_id, quantity, sort_order, e dados do produto.calculated_priceintegerSoma dos itens (preço × quantidade) em centavos.
final_priceintegerPreço que o cliente paga: o override, ou a soma menos o desconto. Nunca negativo.
created_atstringCriação (RFC 3339).
updated_atstringÚltima alteração (RFC 3339).
Erros (criar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings"]} |
| 400 | name ausente. | {"error":"name is required"} |
| 400 | Algum item aponta para produto que não é seu ou não existe. | {"error":"product 0d6c... does not belong to this vendor"} |
| 400 | status omitido: o padrão não cabe na coluna e a criação falha. | {"error":"..."} |
Consultar
/api/v1/vendor/bundles/{id}SellerConsultar um kit
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioId do kit.
Exemplo de requisição (consultar)
bash
curl "$BASE_URL/api/v1/vendor/bundles/$BUNDLE_ID" \
-H "Authorization: Bearer $TOKEN"Resposta (consultar)
200Kit
json
{
"id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"name": "Kit Camiseta + Boné",
"slug": "kit-camiseta-bone",
"description": "Leve os dois e economize",
"price_bps": 0,
"discount_bps": 1000,
"discount_type": "percentage",
"price_override": 0,
"discount_value": 1000,
"status": "A",
"image_url": "",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"items": [
{
"id": "63903d90-fb9c-4c17-997b-f92f4c239e41",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 1,
"sort_order": 0,
"product_name": "Camiseta Básica Algodão Preta",
"slug": "camiseta-basica-algodao-preta",
"product_price": 4990,
"product_image": "/uploads/dfe2555e/camiseta.png",
"product_sku": "CAM-001"
},
{
"id": "ed10be82-1ba0-4c25-b9be-31be4391927b",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "0d6c7b0e-3f55-4d2c-9f0e-1d3b6d1f6a10",
"quantity": 1,
"sort_order": 1,
"product_name": "Boné Liso",
"slug": "bone-liso",
"product_price": 3990,
"product_image": "",
"product_sku": "BON-001"
}
],
"calculated_price": 8980,
"final_price": 8082
}Campos da resposta
idstring (uuid)Id do kit.
namestringNome.
slugstringSlug único.
descriptionstringDescrição.
price_bpsintegerPreço final fixo do kit, em centavos (
0 = calcular a partir dos itens). Apesar do nome, não é pontos-base.discount_bpsintegerDesconto: pontos-base (1000 = 10%) se
discount_type é percentage; centavos se fixed.discount_typestringnonepercentagefixedTipo do desconto.
price_overrideintegerEspelho de
price_bps.discount_valueintegerEspelho de
discount_bps.statusstringA ativo, D desativado.image_urlstringImagem do kit.
vendor_idstring (uuid)Seu seller.
itemsarrayItens (só na consulta e na criação/alteração):
product_id, quantity, sort_order, e dados do produto.calculated_priceintegerSoma dos itens (preço × quantidade) em centavos.
final_priceintegerPreço que o cliente paga: o override, ou a soma menos o desconto. Nunca negativo.
created_atstringCriação (RFC 3339).
updated_atstringÚltima alteração (RFC 3339).
Erros (consultar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings"]} |
| 404 | O kit não existe ou não é seu. | {"error":"bundle not found"} |
Alterar
Altera só o que for enviado. Se enviar items, a lista substitui os itens atuais.
/api/v1/vendor/bundles/{id}SellerAlterar um kit
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioId do kit.
Corpo da requisição
slugstringSlug; vazio = derivado do nome.
descriptionstringDescrição.
price_bpsintegerPreço final fixo em centavos. Se maior que zero, ignora o desconto.
discount_bpsintegerDesconto percentual em pontos-base (1000 = 10%).
discount_typestringnonepercentagefixedOpcional. Com
discount_value, permite desconto fixed (centavos).discount_valueintegerValor do desconto conforme
discount_type.price_overrideintegerSinônimo de
price_bps.image_urlstringImagem do kit.
itemsarrayProdutos do kit. Cada um precisa ser seu.
product_idstring (uuid)obrigatórioProduto.
quantityintegerpadrão: 1Unidades no kit. Mínimo 1.
sort_orderintegerOrdem.
namestringNovo nome.
statusstringADNovo status.
Exemplo de requisição (alterar)
bash
curl -X PUT "$BASE_URL/api/v1/vendor/bundles/$BUNDLE_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"discount_bps": 1500,
"status": "A"
}'Resposta (alterar)
200Kit alterado
json
{
"id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"name": "Kit Camiseta + Boné",
"slug": "kit-camiseta-bone",
"description": "Leve os dois e economize",
"price_bps": 0,
"discount_bps": 1500,
"discount_type": "percentage",
"price_override": 0,
"discount_value": 1500,
"status": "A",
"image_url": "",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"items": [
{
"id": "63903d90-fb9c-4c17-997b-f92f4c239e41",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 1,
"sort_order": 0,
"product_name": "Camiseta Básica Algodão Preta",
"slug": "camiseta-basica-algodao-preta",
"product_price": 4990,
"product_image": "/uploads/dfe2555e/camiseta.png",
"product_sku": "CAM-001"
},
{
"id": "ed10be82-1ba0-4c25-b9be-31be4391927b",
"bundle_id": "abd73557-8dfa-4c74-bf4b-f2dafffe3e6b",
"product_id": "0d6c7b0e-3f55-4d2c-9f0e-1d3b6d1f6a10",
"quantity": 1,
"sort_order": 1,
"product_name": "Boné Liso",
"slug": "bone-liso",
"product_price": 3990,
"product_image": "",
"product_sku": "BON-001"
}
],
"calculated_price": 8980,
"final_price": 8082
}Campos da resposta
idstring (uuid)Id do kit.
namestringNome.
slugstringSlug único.
descriptionstringDescrição.
price_bpsintegerPreço final fixo do kit, em centavos (
0 = calcular a partir dos itens). Apesar do nome, não é pontos-base.discount_bpsintegerDesconto: pontos-base (1000 = 10%) se
discount_type é percentage; centavos se fixed.discount_typestringnonepercentagefixedTipo do desconto.
price_overrideintegerEspelho de
price_bps.discount_valueintegerEspelho de
discount_bps.statusstringA ativo, D desativado.image_urlstringImagem do kit.
vendor_idstring (uuid)Seu seller.
itemsarrayItens (só na consulta e na criação/alteração):
product_id, quantity, sort_order, e dados do produto.calculated_priceintegerSoma dos itens (preço × quantidade) em centavos.
final_priceintegerPreço que o cliente paga: o override, ou a soma menos o desconto. Nunca negativo.
created_atstringCriação (RFC 3339).
updated_atstringÚltima alteração (RFC 3339).
Erros (alterar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings"]} |
| 404 | O kit não existe ou não é seu. | {"error":"bundle not found"} |
| 400 | Algum item aponta para produto que não é seu ou não existe. | {"error":"product 0d6c... does not belong to this vendor"} |
Excluir
/api/v1/vendor/bundles/{id}SellerExcluir um kit
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioId do kit.
Exemplo de requisição (excluir)
bash
curl -X DELETE "$BASE_URL/api/v1/vendor/bundles/$BUNDLE_ID" \
-H "Authorization: Bearer $TOKEN"Resposta (excluir)
200Kit excluído
json
{
"message": "bundle deleted"
}Campos da resposta
messagestringConfirmação fixa.
Erros (excluir)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_settings"]} |
| 404 | O kit não existe ou não é seu. | {"error":"bundle not found"} |