Adicionar itens ao carrinho
Adiciona um produto, vários produtos de uma vez, um kit ou um mix ao carrinho do cliente ou do visitante.
Estas quatro rotas põem produtos no carrinho. Use POST /cart/items para o botão "Comprar" de uma página de produto, POST /cart/bulk para um formulário de pedido rápido (várias linhas), POST /cart/add-bundle para um kit montado pelo lojista e POST /cart/items/batch para um mix que o comprador montou.
Todas devolvem o carrinho inteiro já atualizado (ou, no caso do bulk, um resultado por linha com o carrinho dentro). Se o mesmo produto, com a mesma variação, as mesmas opções, a mesma observação e a mesma origem de estoque, já estiver no carrinho, a quantidade é somada à linha existente. Se qualquer um desses elementos mudar, nasce uma linha nova.
Cada adição valida as regras do produto: ele precisa estar ativo e à venda, ter seller, ter estoque para a quantidade (somada ao que já está no carrinho), respeitar quantidade mínima, máxima e múltiplo, e a visibilidade por grupo de clientes. O preço da linha é resolvido no servidor (faixas de quantidade, preço B2B); você nunca envia preço, exceto no mix.
Adicionar um item
/api/v1/storefront/cart/itemsAutenticadaAdiciona um item ao carrinho
Cabeçalhos
AuthorizationstringBearer <token> do cliente logado.X-Session-IDstringCorpo da requisição
product_iduuidobrigatórioquantitynumberobrigatórioamount também é aceito (compatibilidade com a plataforma anterior); se os dois vierem, vale quantity.variation_iduuidunified_variation_idintegeroptionsarray[{"option_id":"...","value":"..."}] ou uma lista simples de ids de valor. Cada valor pode somar preço e peso à linha. Combinações diferentes de opções viram linhas diferentes.notestringbox_idstring400 com box_required.warehouse_idstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/cart/items" \
-H "X-Session-ID: $SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 2
}'Resposta
{
"id": "01ff5b45-566b-4b98-94a1-23a648c9ea23",
"session_id": "6f1c3c0e-8f5b-4c3e-9d6a-2b7d0e0f1a11",
"items": [
{
"line_id": "64ddde83-28ce-4bba-86e5-ba9ebf1ba500",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Notebook Slim Rosa 02373",
"sku": "SD-002373",
"unit_price": 11500,
"quantity": 2,
"total": 23000
}
],
"subtotal": 23000,
"total": 23000,
"currency": "BRL"
}Os campos são os mesmos de Ler o carrinho; aqui a resposta está reduzida.
Adicionar vários itens
POST /cart/bulk adiciona até 50 linhas por chamada. Cada linha é validada sozinha: uma que falha não impede as outras. O resultado separa o que entrou do que não entrou e traz o carrinho final.
/api/v1/storefront/cart/bulkAutenticadaAdiciona vários itens de uma vez
Cabeçalhos
AuthorizationstringBearer <token> do cliente logado.X-Session-IDstringCorpo da requisição
itemsarrayobrigatórioitems[].product_iduuidobrigatórioitems[].quantitynumberitems[].variation_iduuiditems[].unified_variation_idintegeritems[].optionsarrayPOST /cart/items.curl -X POST "$BASE_URL/api/v1/storefront/cart/bulk" \
-H "X-Session-ID: $SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"product_id": "2a6541bf-d5b0-4a2e-ad7b-1183af189d42",
"quantity": 1
},
{
"product_id": "00000000-0000-0000-0000-000000000000",
"quantity": 1
}
]
}'{
"added": [
{
"line_id": "e0a45a70-6e1c-4a2b-8f55-1f6a7d3c9b22",
"product_id": "2a6541bf-d5b0-4a2e-ad7b-1183af189d42",
"name": "Cafeteira Moderno Branco 01426",
"unit_price": 80990,
"quantity": 1,
"total": 80990
}
],
"failed": [
{
"product_id": "00000000-0000-0000-0000-000000000000",
"reason": "product not found or inactive: 00000000-0000-0000-0000-000000000000"
}
],
"cart": { "id": "01ff5b45-566b-4b98-94a1-23a648c9ea23", "subtotal": 115490, "total": 115490 }
}Campos da resposta
addedarrayfailedarrayproduct_id e reason (texto do motivo, em inglês).cartobjectAdicionar um kit
Um kit (bundle) é um conjunto de produtos que o lojista vende junto, com desconto. Esta rota adiciona todos os produtos do kit de uma vez e marca cada linha com o bundle_id, para que o desconto do kit seja aplicado em Calcular o carrinho. Exige o módulo de kits ligado na loja; sem ele a resposta é 403 module_disabled.
/api/v1/storefront/cart/add-bundleAutenticadaAdiciona um kit ao carrinho
Cabeçalhos
AuthorizationstringBearer <token> do cliente logado.X-Session-IDstringCorpo da requisição
bundle_iduuidobrigatórioquantityintegerobrigatóriocurl -X POST "$BASE_URL/api/v1/storefront/cart/add-bundle" \
-H "X-Session-ID: $SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"bundle_id": "3b0a4f0e-6a39-4c1f-9d57-0d9e5b1c2a44",
"quantity": 1
}'A resposta 200 é o carrinho completo, com uma linha por produto do kit, cada uma com bundle_id.
Adicionar um mix
Um mix é uma combinação de produtos que o próprio comprador monta, por um preço fechado. A vitrine primeiro pede ao módulo de mixes a lista de componentes com o preço de cada um já distribuído, e depois envia essa lista aqui. Exige o módulo de mixes; sem ele a resposta é 403 module_disabled.
/api/v1/storefront/cart/items/batchAutenticadaAdiciona ao carrinho um mix de produtos já resolvido
Cabeçalhos
AuthorizationstringBearer <token> do cliente logado.X-Session-IDstringCorpo da requisição
mix_iduuidobrigatóriomix_id.linesarrayobrigatóriolines[].product_iduuidobrigatóriolines[].quantityintegerobrigatóriolines[].unit_price_centavosintegerobrigatóriolines[].component_idstringcurl -X POST "$BASE_URL/api/v1/storefront/cart/items/batch" \
-H "X-Session-ID: $SESSION_ID" \
-H "Content-Type: application/json" \
-d '{
"mix_id": "7d1f3a52-0b8c-4e6d-a2b1-5c4e9f8a1d33",
"lines": [
{
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 1,
"unit_price_centavos": 9000
},
{
"product_id": "2a6541bf-d5b0-4a2e-ad7b-1183af189d42",
"quantity": 1,
"unit_price_centavos": 71000
}
]
}'A resposta 200 é o carrinho completo, com uma linha por componente, cada uma com mix_id. O estoque de cada componente é conferido, mas as linhas de mix não são comparadas com o preço de catálogo no checkout: o valor enviado em unit_price_centavos é o que o comprador paga. Por isso, repasse sempre os valores devolvidos pela resolução do mix, sem alterá-los.
Erros
As quatro rotas usam as mesmas respostas de erro. O corpo é {"error":"<mensagem>"}.
| Status | Quando | Mensagem ou código |
|---|---|---|
| 400 | Sem token e sem X-Session-ID | session_id or authentication required |
| 400 | Corpo que não é JSON | invalid request body |
| 400 | product_id, bundle_id, mix_id ou lines ausentes | product_id is required, bundle_id is required, mix_id is required, lines is required |
| 400 | quantity menor ou igual a zero (/cart/items) | quantity must be positive |
| 400 | items vazio ou com mais de 50 linhas (/cart/bulk) | items list is required and must not be empty, maximum 50 items per bulk add request |
| 400 | Estoque insuficiente | insufficient stock for 'Notebook Slim Rosa 02373': requested 100002, available 51, out of stock |
| 400 | Regra de quantidade do produto | qty_below_minimum, qty_above_maximum, qty_not_multiple_of_step |
| 400 | Produto vendido por caixa sem caixa | box_required |
| 400 | Produto fora do ar ou sem seller | product_not_yet_available, product_not_sellable, product_not_available_for_user, zero_price_purchase_disabled, zero_price_quote_required |
| 401 | A loja não aceita carrinho de visitante | guest cart is not allowed (o texto segue com o pedido para entrar na conta) |
| 403 | O produto não é entregue na região do comprador | product_outside_delivery_region |
| 403 | Módulo desligado (add-bundle, items/batch) | {"error":"module_disabled","module":"product-bundles"} ou "mix-products" |
| 500 | product_id inexistente ou inativo em /cart/items; kit inexistente ou indisponível; produto inexistente em um mix | {"error":"failed to add item","detail":"product not found or inactive: ..."} |