Caixas de embalagem
Mantém o catálogo de caixas que a plataforma usa para dividir um carrinho em volumes ao cotar frete em tempo real.
Para cotar frete numa transportadora, a plataforma precisa saber quantos pacotes o pedido vira e que tamanho cada um tem. As caixas cadastradas aqui são o que o empacotador preenche: ele distribui os itens do carrinho nas caixas, da menor para a maior, e cota cada volume. Sem nenhuma caixa, o carrinho inteiro é cotado como um único pacote do tamanho dos itens somados.
Uma caixa pode ser da loja (qualquer seller usa) ou de um seller. Uma caixa dedicada é exclusiva de uma lista de produtos: só esses produtos vão nela, até max_items unidades.
As quatro rotas só existem quando o módulo correios-shipping está ligado na loja. Com o módulo desligado, respondem 403 {"error":"module_disabled","module":"correios-shipping"}.
Listar caixas
Com vendor_id, devolve as caixas desse seller mais as da loja. As desativadas (D) aparecem; as apagadas não.
/api/v1/admin/shipping/packaging-boxesAdminLista as caixas de embalagem
Exige view_shipping ou manage_shipping.
Parâmetros de consulta
vendor_iduuidExemplo de requisição
curl "$BASE_URL/api/v1/admin/shipping/packaging-boxes" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"packaging_boxes": [
{
"id": "9f1c2b7e-3d58-4f0a-8a3e-5b6f1d2c7a10",
"name": "Caixa 3 garrafas",
"length_mm": 330,
"width_mm": 120,
"height_mm": 340,
"max_weight_grams": 5000,
"max_items": 3,
"tare_weight_grams": 250,
"dedicated": false,
"status": "A",
"position": 0,
"length_cm": 33,
"width_cm": 12,
"height_cm": 34
}
],
"total": 1
}Campos da resposta
packaging_boxesarraytotalintegerpackaging_boxes[].iduuidpackaging_boxes[].vendor_iduuidpackaging_boxes[].namestringpackaging_boxes[].length_mmintegerpackaging_boxes[].width_mmintegerpackaging_boxes[].height_mmintegerpackaging_boxes[].length_cmnumberpackaging_boxes[].width_cmnumberpackaging_boxes[].height_cmnumberpackaging_boxes[].max_weight_gramsintegerpackaging_boxes[].max_itemsinteger0 = sem limite de unidades.packaging_boxes[].tare_weight_gramsintegerpackaging_boxes[].dedicatedbooleanproduct_ids).packaging_boxes[].product_idsarraypackaging_boxes[].statusstringADA ativa ou D desativada.packaging_boxes[].positionintegerCriar uma caixa
/api/v1/admin/shipping/packaging-boxesAdminCria uma caixa de embalagem
Exige manage_shipping. As medidas podem vir em mm (length_mm) ou em cm (length_cm), cada dimensão por conta própria.
Corpo da requisição
namestringobrigatóriolength_mmintegerobrigatóriolength_cm. Se os dois vierem, vale o de mm.width_mmintegerobrigatóriowidth_cm).height_mmintegerobrigatórioheight_cm).max_weight_gramsintegerobrigatóriomax_itemsinteger0 = sem limite. Não pode ser negativo.tare_weight_gramsintegerdedicatedbooleanproduct_ids.product_idsarraydedicated: true.vendor_iduuidstatusstringADA ou D. Vazio = A. Outra letra é recusada.positionintegerExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/shipping/packaging-boxes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Caixa 3 garrafas",
"length_cm": 33,
"width_cm": 12,
"height_cm": 34,
"max_weight_grams": 5000,
"max_items": 3,
"tare_weight_grams": 250
}'Resposta
{
"id": "9f1c2b7e-3d58-4f0a-8a3e-5b6f1d2c7a10",
"name": "Caixa 3 garrafas",
"length_mm": 330,
"width_mm": 120,
"height_mm": 340,
"max_weight_grams": 5000,
"max_items": 3,
"tare_weight_grams": 250,
"dedicated": false,
"status": "A",
"position": 0,
"length_cm": 33,
"width_cm": 12,
"height_cm": 34
}Alterar uma caixa
Esta rota regrava a caixa inteira: envie todos os campos, não só os que mudam, ou os ausentes viram zero e a validação recusa. O seller dono não muda.
/api/v1/admin/shipping/packaging-boxes/{id}AdminAltera uma caixa de embalagem
Exige manage_shipping. Uma caixa apagada responde 404.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringobrigatóriolength_mmintegerobrigatóriolength_cm. Se os dois vierem, vale o de mm.width_mmintegerobrigatóriowidth_cm).height_mmintegerobrigatórioheight_cm).max_weight_gramsintegerobrigatóriomax_itemsinteger0 = sem limite. Não pode ser negativo.tare_weight_gramsintegerdedicatedbooleanproduct_ids.product_idsarraydedicated: true.vendor_iduuidstatusstringADA ou D. Vazio = A. Outra letra é recusada.positionintegerExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/shipping/packaging-boxes/$BOX_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Caixa 3 garrafas",
"length_cm": 33,
"width_cm": 12,
"height_cm": 34,
"max_weight_grams": 5000,
"max_items": 3,
"tare_weight_grams": 250,
"status": "D"
}'Resposta
{
"id": "9f1c2b7e-3d58-4f0a-8a3e-5b6f1d2c7a10",
"name": "Caixa 3 garrafas",
"length_mm": 330,
"width_mm": 120,
"height_mm": 340,
"max_weight_grams": 5000,
"max_items": 3,
"tare_weight_grams": 250,
"dedicated": false,
"status": "D",
"position": 0,
"length_cm": 33,
"width_cm": 12,
"height_cm": 34
}Apagar uma caixa
É uma exclusão lógica: a caixa deixa de aparecer e de ser usada, mas pedidos antigos continuam podendo referenciá-la. Se a caixa dedicada tem produtos associados, a rota recusa com 409 e informa quantos; repita com force=true para apagar e desfazer as associações.
/api/v1/admin/shipping/packaging-boxes/{id}AdminApaga uma caixa de embalagem
Exige manage_shipping.
Parâmetros de caminho
iduuidobrigatórioParâmetros de consulta
forcebooleanpadrão: falsetrue (ou 1, yes) apaga mesmo com produtos associados.Exemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/shipping/packaging-boxes/$BOX_ID?force=true" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "packaging box deleted",
"associated_products": 0
}Campos da resposta
messagestringassociated_productsintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado | {"error":"invalid or expired token"} |
| 403 | Usuário sem o privilégio manage_shipping | {"error":"insufficient privileges","privilege_required_any":["manage_shipping"]} |
| 400 | Corpo que não é JSON, nome vazio, medida menor ou igual a zero, max_weight_grams menor que 1, valores negativos, product_ids sem dedicated, ou status diferente de A/D | {"error":"failed to create packaging box","detail":"length_cm must be greater than zero"} |
| 403 | Módulo correios-shipping desligado | {"error":"module_disabled","module":"correios-shipping"} |
| 404 | Caixa inexistente ou já apagada; ou product_ids com produto que não é do seller da caixa | {"error":"packaging box not found","detail":"..."} / {"error":"packaging box product not found","detail":"..."} |
| 409 | Apagar caixa com produtos associados, sem force=true | {"error":"packaging box has associated products","associated_products":3} |