Variações unificadas
Matriz de combinações (cor x tamanho) dentro de um único produto, com estoque, SKU, imagem e acréscimo de preço por combinação.
As variações unificadas guardam todas as combinações dentro de um só produto, sem criar produtos filhos. Você define o grupo com os eixos e seus valores (Cor: Azul, Preto e Tamanho: P, M, G) e, para cada combinação, uma linha com estoque, SKU, imagem e um acréscimo de preço sobre o preço do produto.
Use quando cada combinação precisa de estoque próprio, mas o cadastro de um produto por combinação seria exagero. Se cada combinação precisa de página, preço, fotos e SKU como um produto completo, use Variações.
Editar uma linha (PUT /api/v1/admin/unified-variations/{id}) e excluí-la (DELETE) estão na referência completa do administrador; a lista abaixo cobre a montagem da matriz.
Consultar grupo e linhas
/api/v1/admin/products/{id}/unified-variation-groupAdminConsulta o grupo e todas as suas linhas
Devolve o grupo (eixos) e todas as linhas de uma vez. Produto sem grupo devolve group: null e lista vazia.
Path parameters
iduuidobrigatório/api/v1/admin/products/{id}/unified-variationsAdminLista somente as linhas
Devolve só as linhas, ordenadas por sort_order e id, com o total. Produto sem grupo devolve lista vazia.
Path parameters
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/unified-variation-group" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"group": {
"id": 5,
"product_id": "07635228-fcac-442e-9a0c-caa7c1c89a97",
"name": "Cor e tamanho",
"features": [
{ "name": "Cor", "values": ["Azul", "Preto"] },
{ "name": "Tamanho", "values": ["P", "M", "G"] }
],
"created_at": "2026-10-11T20:54:06.230905Z"
},
"variations": [
{
"id": 14,
"group_id": 5,
"product_id": "07635228-fcac-442e-9a0c-caa7c1c89a97",
"combination": { "Cor": "Azul", "Tamanho": "P" },
"price_modifier": 0,
"stock": 5,
"sku": "",
"image_url": "",
"is_default": false,
"sort_order": 0,
"created_at": "2026-10-11T20:54:06.300907Z",
"updated_at": "2026-10-11T20:54:06.300907Z"
}
]
}{ "group": null, "variations": [] }Response fields
group.idintegergroup.namestringgroup.featuresarrayname e a lista values.variations[].idintegervariations[].combinationobject{"Cor":"Azul","Tamanho":"P"}).variations[].price_modifierintegervariations[].stockintegervariations[].skustringvariations[].image_urlstringvariations[].is_defaultbooleanvariations[].sort_orderintegerErros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 500 | id que não é UUID | {"error":"failed to get variation group","detail":"..."} (ou "failed to list variations" na lista) |
| 401 / 403 | Sem login / sem privilégio de ver o catálogo | veja Opções |
Criar ou substituir o grupo
/api/v1/admin/products/{id}/unified-variation-groupAdminCria ou substitui o grupo
Define os eixos do produto. Se já havia um grupo, ele é apagado junto com todas as linhas e um novo é criado. Depois, gere as combinações (veja Gerar combinações, abaixo) ou crie as linhas uma a uma.
Path parameters
iduuidobrigatórioCorpo da requisição
namestringfeaturesarrayobrigatórioEixos. Pelo menos um.
namestringobrigatórioCor). É a chave usada em combination.valuesarrayobrigatório["Azul","Preto"]).Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/unified-variation-group" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Cor e tamanho","features":[{"name":"Cor","values":["Azul","Preto"]},{"name":"Tamanho","values":["P","M","G"]}]}'Resposta
{
"id": 5,
"product_id": "07635228-fcac-442e-9a0c-caa7c1c89a97",
"name": "Cor e tamanho",
"features": [
{ "name": "Cor", "values": ["Azul", "Preto"] },
{ "name": "Tamanho", "values": ["P", "M", "G"] }
],
"created_at": "2026-10-11T20:54:06.230905Z"
}Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 400 | Corpo não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | features vazio | {"error":"at least one feature axis is required"} |
| 404 | Produto não existe | {"error":"product not found"} |
| 401 / 403 | Sem login / sem privilégio de gerenciar o catálogo | veja Opções |
Gerar combinações
/api/v1/admin/products/{id}/unified-variations/generateAdminGera todas as combinações dos eixos
Cria uma linha para cada combinação possível dos eixos do grupo (o produto cartesiano). Combinações que já existem são puladas, então pode ser chamada de novo depois de acrescentar um valor ao eixo. Cada linha nasce com acréscimo 0, sem SKU e sem imagem, e com o estoque inicial que você informar. O limite é 1000 combinações por chamada (por exemplo, 10 x 10 x 10 x 2 passa do limite).
O corpo é opcional: sem corpo, o estoque inicial é 0.
Path parameters
iduuidobrigatórioCorpo da requisição
default_stockintegerpadrão: 0Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/unified-variations/generate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"default_stock":5}'Resposta
{
"generated": 6,
"variations": [
{
"id": 14,
"group_id": 5,
"product_id": "07635228-fcac-442e-9a0c-caa7c1c89a97",
"combination": { "Cor": "Azul", "Tamanho": "P" },
"price_modifier": 0,
"stock": 5,
"sku": "",
"image_url": "",
"is_default": false,
"sort_order": 0,
"created_at": "2026-10-11T20:54:06.300907Z",
"updated_at": "2026-10-11T20:54:06.300907Z"
}
]
}Response fields
generatedinteger0 se todas as combinações já existiam. Quando não cria nada, variations vem null.variationsarray | nullErros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 500 | Produto sem grupo | {"error":"failed to generate variations","detail":"no variation group exists for this product; create one first"} |
| 500 | Mais de 1000 combinações | {"error":"failed to generate variations","detail":"too many variations (would generate 1200, max is 1000)"} |
| 500 | Grupo sem eixos | {"error":"failed to generate variations","detail":"variation group has no feature axes defined"} |
Criar uma linha
/api/v1/admin/products/{id}/unified-variationsAdminCria uma linha
Cria uma única combinação, com SKU, imagem, estoque e acréscimo. Útil para criar um valor fora do que foi gerado ou para criar já com os dados completos. Marcar is_default desmarca a anterior.
Path parameters
iduuidobrigatórioCorpo da requisição
combinationobjectobrigatório{"Cor":"Verde","Tamanho":"GG"}. Não pode ser vazio.price_modifierintegerpadrão: 0stockintegerpadrão: 0skustringimage_urlstringis_defaultbooleanpadrão: falsesort_orderintegerpadrão: 0Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/products/$PRODUCT_ID/unified-variations" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"combination":{"Cor":"Verde","Tamanho":"GG"},"price_modifier":1000,"stock":3,"sku":"CAM-VRD-GG","is_default":true}'Resposta
{
"id": 20,
"group_id": 5,
"product_id": "07635228-fcac-442e-9a0c-caa7c1c89a97",
"combination": { "Cor": "Verde", "Tamanho": "GG" },
"price_modifier": 1000,
"stock": 3,
"sku": "CAM-VRD-GG",
"image_url": "",
"is_default": true,
"sort_order": 0,
"created_at": "2026-10-11T20:54:06.381578Z",
"updated_at": "2026-10-11T20:54:06.381578Z"
}Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 400 | Corpo não é JSON | {"error":"invalid request body","detail":"..."} |
| 400 | combination vazio | {"error":"combination is required"} |
| 500 | Produto sem grupo | {"error":"failed to create variation","detail":"no variation group exists for this product; create one first"} |
| 401 / 403 | Sem login / sem privilégio | veja Opções |