Pular para o conteúdo
Documentação API Reference FAQ Changelog Status
Otimizações API Magento 2 Adobe Commerce

Guia de referência para criar um produto configurável e suas variações pela API REST, no fluxo recomendado

PDF
S Sidenei Steinbach 12/06/2026 6 min de leitura

Cadastro de Produto Configurável via REST API — Magento 2

Guia de referência para criar um produto configurável e suas variações pela API REST, no fluxo recomendado: criar os simples primeiro, depois o configurável já com os links embutidos (sem precisar das chamadas /child).

Exemplo testado e funcionando, usando 2 variações (tamanhos P e M).


⚠️ Dois pontos essenciais antes de começar

Por favor leiam estes dois pontos com atenção — são o que faz o fluxo funcionar de forma confiável:

1. Salvar o id de cada simples para usar no configurável

Quando você cria cada produto simples (passos 1 e 2), a API responde com um campo id (o ID interno do produto no Magento). Esse id precisa ser guardado, porque na hora de criar o configurável (passo 3), é ele que vincula a variação ao produto pai — no campo configurable_product_links.

Ou seja, o fluxo é:

  • Passo 1 cria o simples P → a API devolve, por exemplo, "id": 42234guarde esse número.
  • Passo 2 cria o simples M → a API devolve, por exemplo, "id": 42235guarde esse número também.
  • Passo 3 cria o configurável → no campo configurable_product_links, você coloca esses dois IDs: [42234, 42235].

É assim que o Magento entende que os dois simples são variações daquele configurável — sem precisar das chamadas /child separadas, que era o que vinha dando problema.

Importante: os IDs 42234 e 42235 no exemplo abaixo são só ilustrativos. Use sempre os IDs reais que a sua resposta retornar.

2. Mesmo neste fluxo, é preciso um pequeno delay entre uma request e outra

Este ponto é muito importante e é a causa raiz do problema que estávamos investigando.

As requisições não podem ser disparadas todas ao mesmo tempo. Mesmo com este fluxo melhorado, é necessário enviar uma de cada vez, aguardando a resposta de cada uma antes de enviar a próxima (ou colocar um pequeno intervalo de ~300 a 500 ms entre elas).

O motivo: quando várias requisições gravam no banco ao mesmo tempo, o Magento gera um deadlock (conflito de escrita no banco), e algumas variações falham com mensagens como "Could not save Source Item Configuration". Isso foi confirmado nos logs do servidor — os erros aconteceram exatamente no instante em que as requisições saíram todas juntas.

Com o envio sequencial (uma após a outra), esse conflito simplesmente não acontece. O custo é de poucos segundos a mais por produto, o que é totalmente tranquilo para um processo de cadastro em segundo plano.

Resumo da regra: simples primeiro, um de cada vez → guardar os IDs → configurável por último com os IDs no configurable_product_links.


Passo 1 — Criar a 1ª variação (simples, tamanho P)

curl --location 'https://www.mundodasgemeas.com.br/rest/all/V1/products' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '{
  "product": {
    "sku": "MAGESHOP-TESTE-P",
    "name": "Mageshop Teste Produto Configuravel (Marrom P)",
    "attribute_set_id": 4,
    "status": 1,
    "visibility": 1,
    "type_id": "simple",
    "price": 519.00,
    "weight": 0.5,
    "extension_attributes": {
      "website_ids": [1],
      "stock_item": {
        "qty": 0,
        "is_in_stock": false,
        "manage_stock": true,
        "use_config_manage_stock": true
      }
    },
    "custom_attributes": [
      { "attribute_code": "color", "value": "48" },
      { "attribute_code": "size", "value": "10" },
      { "attribute_code": "mgs_brand", "value": "646" },
      { "attribute_code": "tax_class_id", "value": "0" },
      { "attribute_code": "codigo", "value": "MAGESHOP-TESTE-P" },
      { "attribute_code": "ncm", "value": "62024000" }
    ]
  }
}'

➡️ Guarde o id da resposta (no exemplo, vamos supor que voltou 42234).


Passo 2 — Criar a 2ª variação (simples, tamanho M)

Envie só depois de receber a resposta do Passo 1. Repare que o size é diferente (11 em vez de 10) — cada variação precisa ter um valor diferente no atributo eixo (tamanho).

curl --location 'https://www.mundodasgemeas.com.br/rest/all/V1/products' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '{
  "product": {
    "sku": "MAGESHOP-TESTE-M",
    "name": "Mageshop Teste Produto Configuravel (Marrom M)",
    "attribute_set_id": 4,
    "status": 1,
    "visibility": 1,
    "type_id": "simple",
    "price": 519.00,
    "weight": 0.5,
    "extension_attributes": {
      "website_ids": [1],
      "stock_item": {
        "qty": 0,
        "is_in_stock": false,
        "manage_stock": true,
        "use_config_manage_stock": true
      }
    },
    "custom_attributes": [
      { "attribute_code": "color", "value": "48" },
      { "attribute_code": "size", "value": "11" },
      { "attribute_code": "mgs_brand", "value": "646" },
      { "attribute_code": "tax_class_id", "value": "0" },
      { "attribute_code": "codigo", "value": "MAGESHOP-TESTE-M" },
      { "attribute_code": "ncm", "value": "62024000" }
    ]
  }
}'

➡️ Guarde o id da resposta (no exemplo, vamos supor que voltou 42235).


Passo 3 — Criar o configurável já com os links

Este é o passo que junta tudo. Dentro de extension_attributes:

  • configurable_product_options → define o atributo eixo (aqui é o tamanho, attribute_id 152) e quais valores entram (os value_index 10 e 11, que correspondem aos tamanhos dos simples criados acima).
  • configurable_product_links → recebe os IDs dos simples que você guardou nos passos 1 e 2. Substitua 42234 e 42235 pelos IDs reais que a sua resposta retornou.
curl --location 'https://www.mundodasgemeas.com.br/rest/all/V1/products' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '{
  "product": {
    "sku": "MAGESHOP-TESTE",
    "name": "Mageshop Teste Produto Configuravel",
    "attribute_set_id": 4,
    "status": 1,
    "visibility": 4,
    "type_id": "configurable",
    "weight": 0.5,
    "price": null,
    "extension_attributes": {
      "website_ids": [1],
      "stock_item": {
        "is_in_stock": true
      },
      "configurable_product_options": [
        {
          "attribute_id": "152",
          "label": "TAMANHO",
          "values": [
            { "value_index": 10 },
            { "value_index": 11 }
          ]
        }
      ],
      "configurable_product_links": [42234, 42235]
    },
    "custom_attributes": [
      { "attribute_code": "mgs_brand", "value": "646" },
      { "attribute_code": "codigo", "value": "MAGESHOP-TESTE" },
      { "attribute_code": "url_key", "value": "mageshop-teste-produto-configuravel" },
      { "attribute_code": "ncm", "value": "62024000" }
    ]
  }
}'

✅ Se tudo der certo, a resposta vem com o configurável já trazendo os dois filhos no configurable_product_links preenchido — sem precisar de nenhuma chamada /child.


Dicas finais

  • Atributo eixo: confirme que o atributo usado como eixo (aqui, size / id 152) está como scope: global e tipo select no ambiente. Se não estiver, o Passo 3 não aceita.
  • value_index: os valores em configurable_product_options (10 e 11) precisam bater exatamente com o size informado em cada simples. Se não baterem, o Magento não associa a variação à opção.
  • Campos do configurable_product_options: esse bloco serve só para definir o atributo eixo. Além de attribute_id, label e values, ele aceita opcionalmente position (ordem de exibição da opção) e is_use_default. Dados do produto em si (preço, descrição, estoque) não vão aqui — ficam nos custom_attributes ou nos campos do produto.
Copiar para usar com IA

Este artigo foi útil?

Obrigado pelo seu feedback!