VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Kits e Compre junto

Gerenciar kits

Lista, cria, consulta, altera e apaga kits de produtos, com preço fechado ou desconto e a lista de itens.

Um kit junta produtos já cadastrados em um único item de venda. O cliente coloca o kit no carrinho e a plataforma aplica o preço do kit. Estas cinco rotas são o CRUD completo. Exigem o módulo product-bundles ligado e o privilégio manage_bundles ou manage_catalog. O cálculo do preço está na home da seção.

GET/api/v1/admin/bundlesAdmin

Lista os kits

Do mais novo para o mais antigo, com os itens de cada kit. A lista inclui os kits gerados pelo Compre junto (slug fbt-...).

Parâmetros de consulta

pageintegerpadrão: 1
Página, a partir de 1.
per_pageintegerpadrão: 20
Itens por página, de 1 a 100. Fora disso volta a 20.
statusstring
ADH
Status. Aceita a letra ou a palavra (active, disabled, hidden).
searchstring
Texto no nome ou na descrição do kit. Não procura no slug.
POST/api/v1/admin/bundlesAdmin

Cria um kit

Responde 201 com o kit. O slug é gerado a partir do nome (com sufixo se já existir) quando você não manda.

Corpo da requisição (JSON)

namestringobrigatório
Nome do kit.
statusstringobrigatório
ADHactivedisabledhidden
Status. Sempre envie. Omitido ou draft, a criação falha com 500.
slugstring
Trecho da URL. Gerado do nome se omitido; deve ser único.
descriptionstring
Descrição.
image_urlstring
Imagem do kit.
price_overrideinteger
Preço fechado do kit, em centavos. Quando maior que zero, vence qualquer desconto. (Alias: price_bps.)
discount_typestringpadrão: none
nonepercentagefixed
Tipo do desconto.
discount_valueinteger
Valor do desconto: em pontos-base quando percentage (1000 é 10%) ou em centavos quando fixed. (Alias: discount_bps, sempre percentual.)
vendor_iduuid
Seller dono do kit. Todos os itens precisam ser desse seller. Omitido, o kit é da loja.
itemsarray

Produtos do kit.

product_iduuidobrigatório
Id do produto.
quantityintegerpadrão: 1
Unidades do produto no kit. Menor que 1 vira 1.
sort_orderintegerpadrão: 0
Ordem de exibição.
GET/api/v1/admin/bundles/{id}Admin

Consulta um kit

Devolve o kit com os itens e os preços calculados.

Parâmetros de caminho

iduuidobrigatório
Id do kit.
PUT/api/v1/admin/bundles/{id}Admin

Altera um kit

Altera só os campos enviados. Quando items é enviado, a lista de itens é substituída por inteira; sem items, os itens não mudam.

Parâmetros de caminho

iduuidobrigatório
Id do kit.

Aceita os campos da criação, todos opcionais. Para tirar o preço fechado, envie price_override: 0.

DELETE/api/v1/admin/bundles/{id}Admin

Apaga um kit

Apaga o kit e os itens de forma definitiva.

Parâmetros de caminho

iduuidobrigatório
Id do kit.

Exemplo de requisição

Resposta

201Kit criado
200Lista
200Kit apagado

Campos do kit

iduuid
Id do kit.
namestring
Nome.
slugstring
Trecho da URL. Único.
descriptionstring
Descrição.
statusstring
ADH
Status.
image_urlstring
Imagem.
price_overrideinteger
Preço fechado em centavos. 0 sem preço fechado. Repete price_bps.
discount_typestring
nonepercentagefixed
Tipo do desconto.
discount_valueinteger
Valor do desconto (pontos-base em percentage, centavos em fixed). Repete discount_bps.
vendor_iduuid
Seller dono. Ausente nos kits da loja.
itemsarray
Itens: id, bundle_id, product_id, quantity, sort_order, e do produto product_name, slug, product_price (centavos, unitário), product_image, product_sku.
calculated_priceinteger
Soma de product_price × quantity, em centavos. Ausente (zero) quando não há itens.
final_priceinteger
Preço do kit depois do preço fechado ou do desconto, em centavos.
price_redactedboolean
true quando os preços foram ocultados (visitante em loja que esconde preços). Não ocorre em chamadas de administrador autenticado.
created_atstring
Criação, RFC 3339 em UTC.
updated_atstring
Última alteração, RFC 3339 em UTC.

Erros

StatusQuandoCorpo de exemplo
400Corpo que não é JSON{"error":"invalid request body","detail":"..."}
400Sem name{"error":"name is required"}
401Token ausente ou expirado{"error":"invalid or expired token"}
403Módulo desligado, ou falta o privilégio{"error":"module_disabled","module":"product-bundles"}
404GET de um kit que não existe{"error":"bundle not found"}
500status ausente ou draft, produto inexistente, ou slug repetido{"error":"failed to create bundle","detail":"..."}
500PUT ou DELETE de um kit que não existe{"error":"failed to delete bundle","detail":"bundle not found"}
Criar sem status falha com 500

Se você omitir status, ou mandar draft, a criação responde 500 com uma mensagem sobre um valor longo demais para o campo. O status do kit é uma letra, e draft não é um valor aceito. Mande active, disabled ou hidden (ou A, D, H).

Conferir o preço antes de publicar

Crie o kit com status: "hidden", confira calculated_price e final_price na resposta e só então mude para active.

Veja também

  • Compre junto
  • Kits e Compre junto
  • Dinheiro, ids e datas
Anterior
Kits e Compre junto
Próxima
Compre junto
Nesta página
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também
bash
curl -X POST "$BASE_URL/api/v1/admin/bundles" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{
    "name": "Kit Escritório",
    "status": "active",
    "discount_type": "percentage",
    "discount_value": 1000,
    "items": [
      {"product_id": "12658adf-5a62-43c3-8310-73176df91202", "quantity": 1},
      {"product_id": "d3602023-101d-4f7d-8ef5-52abd5c7eaaf", "quantity": 2}
    ]
  }'
json
{
  "id": "66e84327-ef14-49dd-bd53-46c11958cd7b",
  "name": "Kit Escritório",
  "slug": "kit-escritorio",
  "description": "",
  "price_bps": 0,
  "discount_bps": 1000,
  "discount_type": "percentage",
  "price_override": 0,
  "discount_value": 1000,
  "status": "A",
  "image_url": "",
  "created_at": "2026-10-11T21:09:36.630755Z",
  "updated_at": "2026-10-11T21:09:36.630755Z",
  "items": [
    {
      "id": "9f078adc-78b5-48f4-ab65-a542a6aa8cbc",
      "bundle_id": "66e84327-ef14-49dd-bd53-46c11958cd7b",
      "product_id": "12658adf-5a62-43c3-8310-73176df91202",
      "quantity": 1,
      "sort_order": 0,
      "product_name": "Óculos Deluxe Preto 02710",
      "slug": "oculos-deluxe-preto-02710-2710",
      "product_price": 14990,
      "product_image": "/uploads/exemplo/product/oculos.png",
      "product_sku": "SD-002710"
    },
    {
      "id": "f61d7b2e-ff7a-4749-b3fe-9dc2dbd04274",
      "bundle_id": "66e84327-ef14-49dd-bd53-46c11958cd7b",
      "product_id": "d3602023-101d-4f7d-8ef5-52abd5c7eaaf",
      "quantity": 2,
      "sort_order": 0,
      "product_name": "Notebook Essencial Bege 02156",
      "slug": "notebook-essencial-bege-02156-2156",
      "product_price": 18990,
      "product_image": "/uploads/exemplo/product/notebook.png",
      "product_sku": "SD-002156"
    }
  ],
  "calculated_price": 52970,
  "final_price": 47673
}
json
{
  "bundles": [ { "id": "66e84327-ef14-49dd-bd53-46c11958cd7b", "name": "Kit Escritório", "status": "A", "calculated_price": 52970, "final_price": 47673, "items": [] } ],
  "total": 111,
  "page": 1,
  "per_page": 20,
  "total_pages": 6
}
json
{ "message": "bundle deleted" }