Embalagem de envio do produto
Lê e grava a caixa externa medida de um produto (dimensões, capacidade e tara) usada no cálculo de frete, com controle de versão por updated_at.
A embalagem de envio descreve a caixa externa em que o produto viaja: as três dimensões da caixa, quantas unidades do produto cabem nela (mínimo e máximo) e o peso da caixa vazia (a tara). A transportadora cota o frete com base nessas medidas, e não só nas medidas do item. Não confunda com as dimensões do próprio produto (peso, largura, altura, comprimento), que ficam no cadastro dele.
Ao gravar, a plataforma descarta o cache de cotações de frete, então a próxima cotação já usa a embalagem nova.
Como funciona
A embalagem tem três estados:
| Estado | Como é | O que significa |
|---|---|---|
| Sem embalagem | As três dimensões em 0, e capacidades e tara em 0. | O frete usa só as medidas do item. É o estado de um produto sem configuração. |
| Embalagem medida | As três dimensões maiores que 0, e ao menos um entre min_items_in_box e max_items_in_box maior que 0. | O frete considera a caixa externa. |
| Inválido | Qualquer mistura (por exemplo, só duas dimensões preenchidas). | O PUT é recusado com 400. |
Regras de validação
box_length,box_widthebox_height: números de 0 a 99999999,99 em centímetros, com no máximo 2 casas decimais.min_items_in_boxemax_items_in_box: inteiros de 0 a 1000000. Semax_items_in_boxfor maior que 0,min_items_in_boxnão pode ser maior que ele.box_tare_grams: inteiro de 0 a 2147483647.- Embalagem medida (dimensões maiores que 0) exige capacidade mínima ou máxima.
- Para zerar, as três dimensões e também capacidades e tara precisam ir a
0.
Controle de versão com updated_at
Todo GET devolve updated_at. Para gravar, você devolve esse mesmo valor no PUT. Se a embalagem mudou depois da sua leitura, o updated_at não confere e a gravação é recusada com 409 product_packaging_changed, para que você não apague a alteração de outra pessoa. A resposta do PUT traz o updated_at novo.
Consultar a embalagem
/api/v1/admin/products/{id}/shipping-packagingAdminConsulta a embalagem de envio de um produto
Devolve a embalagem atual do produto e a versão (updated_at) para a próxima gravação. A resposta não é guardada em cache (Cache-Control: no-store).
Path parameters
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/shipping-packaging" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"box_length": 30,
"box_width": 20,
"box_height": 15.5,
"min_items_in_box": 1,
"max_items_in_box": 12,
"box_tare_grams": 250,
"updated_at": "2026-10-11T20:54:44.466233Z"
}Response fields
box_lengthnumber0 se não houver embalagem.box_widthnumberbox_heightnumbermin_items_in_boxinteger0 se não definida.max_items_in_boxinteger0 se não definida.box_tare_gramsintegerupdated_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 400 | O {id} não é um UUID. | {"error":"invalid product id"} |
| 401 | Sem token. | {"error":"missing authorization header"} |
| 403 | O recurso de frete pelos Correios está desligado na loja. | {"error":"module_disabled","module":"correios-shipping"} |
| 403 | Sem view_catalog nem manage_catalog. | {"error":"insufficient privileges","privilege_required_any":["manage_catalog","view_catalog"]} |
| 404 | Produto inexistente ou na lixeira. | {"error":"product not found"} |
Gravar a embalagem
/api/v1/admin/products/{id}/shipping-packagingAdminSalva a embalagem de envio de um produto
Exige manage_catalog. Grava a embalagem e devolve o estado novo no mesmo formato do GET. Não é uma atualização parcial: os sete campos são obrigatórios, nenhum pode ser null, e não pode haver campos extras.
Path parameters
iduuidobrigatórioCorpo da requisição
box_lengthnumberobrigatóriobox_widthnumberobrigatóriobox_heightnumberobrigatóriomin_items_in_boxintegerobrigatóriomax_items_in_boxintegerobrigatóriobox_tare_gramsintegerobrigatórioupdated_atstringobrigatórioupdated_at recebido na última leitura, sem alterar.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/shipping-packaging" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"box_length": 30,
"box_width": 20,
"box_height": 15.5,
"min_items_in_box": 1,
"max_items_in_box": 12,
"box_tare_grams": 250,
"updated_at": "2026-10-11T20:54:44.466233Z"
}'Para remover a embalagem medida:
curl -X PUT "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/shipping-packaging" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"box_length": 0,
"box_width": 0,
"box_height": 0,
"min_items_in_box": 0,
"max_items_in_box": 0,
"box_tare_grams": 0,
"updated_at": "2026-10-11T21:02:10.381907Z"
}'Resposta
{
"box_length": 30,
"box_width": 20,
"box_height": 15.5,
"min_items_in_box": 1,
"max_items_in_box": 12,
"box_tare_grams": 250,
"updated_at": "2026-10-11T21:02:10.381907Z"
}Use o updated_at desta resposta na próxima gravação.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é um JSON único, ou maior que 4 KB. | {"error":"invalid request body"} |
| 400 | Falta algum dos sete campos, algum é null, ou há campo extra. | {"error":"all packaging fields are required"} |
| 400 | Um valor não tem o tipo certo (por exemplo, texto no lugar de número). | {"error":"invalid packaging values"} |
| 400 | Valores fora das regras: dimensão negativa ou com mais de 2 casas, só algumas dimensões preenchidas, capacidade ausente, mínimo maior que máximo, tara fora do limite, ou zerar as dimensões sem zerar capacidade e tara. | {"error":"invalid packaging values","detail":"all three outer packaging dimensions are required"} |
| 400 | updated_at com a data zero (0001-01-01T00:00:00Z). | {"error":"updated_at from the last read is required"} |
| 400 | O {id} não é um UUID. | {"error":"invalid product id"} |
| 404 | Produto inexistente ou na lixeira. | {"error":"product not found"} |
| 409 | O updated_at não é o atual: a embalagem foi alterada desde a sua leitura. | {"error":"product_packaging_changed"} |
| 403 | Recurso de frete pelos Correios desligado, ou sem manage_catalog. | {"error":"module_disabled","module":"correios-shipping"} / {"error":"insufficient privileges","required":"manage_catalog"} |
As mensagens de detail do 400 de validação vêm em inglês, como o servidor as devolve:
detail | Causa |
|---|---|
packaging dimensions must be finite, nonnegative centimetres | Dimensão negativa ou fora do intervalo. |
packaging dimensions allow at most two decimal places | Mais de 2 casas decimais. |
packaging quantities and tare must be nonnegative whole numbers within storage limits | Capacidade ou tara negativa, fracionada ou acima do limite. |
all three outer packaging dimensions are required | Só uma ou duas dimensões maiores que 0. |
measured packaging requires a minimum or maximum item capacity | Dimensões preenchidas e mínimo e máximo ambos em 0. |
minimum item capacity cannot exceed maximum | min_items_in_box maior que max_items_in_box. |
clear capacity and tare when disabling product packaging | As três dimensões em 0, mas capacidade ou tara diferentes de 0. |
Veja também
- Preço e estoque do produto: visão geral e o mapa das rotas.
- Recorrência do produto
- Atualizar produto: peso e dimensões do item.
- Produtos