Pular para o conteúdo
platform
PT EN

Referência da API · Contratos · Gestão Matriz

Adicionar Produtos ao Contrato da Filial

Método
PUT
Rota
/pricing/contract/:contractId/items/store/:partnerId
URL base
https://ws.autorei.net
Parâmetros de rota
:contractId :partnerId
Token
Exige token Bearer
Testar no Postman

Abre esta requisição na documentação pública da API, a fonte oficial da referência.

Descrição

Permite que uma conta matriz adicione produtos ao contrato de uma de suas filiais com o preço de cada um, ou atualize o preço dos que já estão nele. Cada produto é processado de forma independente: o resultado de cada um vem no campo status da resposta.

O corpo e a resposta são idênticos aos do envio para a própria loja, a diferença é a filial dona do contrato, que vem na rota e é validada contra os vínculos da sua matriz.

Parâmetros de Rota

Parâmetro Tipo Obrigatório Descrição
contractId integer Sim Id do contrato, devolvido em id na criação.
partnerId integer Sim Id da filial dona do contrato. Precisa estar vinculada à matriz do token.

Corpo da Requisição (JSON)

Campo Tipo Obrigatório Descrição
items array Sim De 1 a 100 produtos.
Identificação do produto, não é um campo, é um grupo - Sim Uma das duas formas da seção Como identificar o produto: items[].partnerPartCode · items[].skuAttributeValue com skuAttributeName.
items[].price number Não Preço do produto no contrato. Não pode ser negativo.
items[].targetMargin number Não Margem alvo do produto no contrato, de 0 a 100.
items[].totalCost number Não Custo total do produto. Não pode ser negativo.
items[].priceTypeId integer Não Tipo de preço a que este produto fica restrito dentro do contrato.
skuAttributeName string Condicional Nome do atributo usado para resolver items[].skuAttributeValue. Obrigatório quando você identifica os produtos por atributo. Vale para o envio inteiro, não por item.

items[].value é o nome legado de items[].price e continua aceito, com o mesmo efeito. Enviando os dois no mesmo item, vale price.

Como identificar o produto

Cada produto precisa trazer uma das duas formas, nesta ordem de precedência:

Forma Campos Quando usar
Por código do parceiro partnerPartCode Você identifica o produto pelo seu próprio código.
Por atributo skuAttributeValue com skuAttributeName no envelope Você contratou o serviço de catálogo de produtos com atributo próprio.

Ao contrário do envio de estoque, formas diferentes podem conviver no mesmo envio: cada produto é resolvido pela forma que trouxer.

Regras de negócio

O produto precisa ser da loja

O produto é resolvido dentro do catálogo da loja dona do contrato. O que não resolve volta em notFound.items e os demais são gravados.

Produto repetido no mesmo envio não é processado

Dois produtos do mesmo envio que resolvem para o mesmo SKU, pelo código repetido ou pelo atributo, vão os dois para notFound.items e nenhum é gravado. Envie cada produto uma única vez por requisição.

Produto recusado por valor volta na lista, não derruba o envio

Preço negativo, custo negativo, margem fora de 0 a 100 e produto sem nenhuma forma de identificação são recusados item a item: o produto volta em items com status: ERROR e o motivo em error, e os demais são gravados. A resposta é 200.

Resposta · 200

Campo Descrição
id Id do contrato.
items[].skuId Id do SKU resolvido pela plataforma. Vem ausente no produto recusado que não trouxe identificação.
items[].price Preço gravado.
items[].targetMargin · items[].totalCost Margem alvo e custo gravados. Vêm null quando você não os envia.
items[].status inserted produto novo no contrato · updated produto que já estava e mudou de valor · unchanged produto que já estava com os mesmos valores · ERROR produto recusado.
items[].error Motivo da recusa. Presente só quando status é ERROR.
items[].partnerPartCode · items[].skuAttributeValue Eco da identificação que você enviou, no produto recusado.
notFound.items Produtos que você enviou e não foram resolvidos no catálogo da filial, ou que se repetiram no envio.

Erros

Código Quando
400 partnerId da rota não é numérico: {"error":"Invalid target partner ID"}.
400 contractId da rota não é um número maior que zero: {"error":"invalid contract id: \"...\""}.
400 O corpo não é um JSON válido. O detalhe vem em error.
400 O contrato não existe ou não é da filial informada: {"error":"priceContract.notFound"}.
422 items ausente, vazio ou com mais de 100 entradas. O detalhe vem em error.
401 Token ausente, malformado ou expirado: {"error":"Authentication required for this route"}.
403 A filial não está vinculada à sua matriz: {"error":"Access denied: Invalid partnership"}. Diferente de 400, aqui o payload está certo, o que falta é o vínculo.

Exemplo de requisição

curl --request PUT 'https://ws.autorei.net/pricing/contract/:contractId/items/store/:partnerId' \
  --header 'Authorization: Bearer {{access_token}}' \
  --header 'Content-Type: application/json' \
  --data '{
  "items": [
    {
      "partnerPartCode": "SKU-A-001",
      "price": 149.9,
      "targetMargin": 18.5,
      "totalCost": 120.0
    },
    {
      "partnerPartCode": "SKU-B-002",
      "price": 89.9
    }
  ]
}'

Respostas de exemplo

200Sucesso: identificação por código do parceiro

{
  "id": 4610002,
  "items": [
    {
      "skuId": 500101,
      "price": 149.9,
      "targetMargin": 18.5,
      "totalCost": 120,
      "status": "inserted"
    },
    {
      "skuId": 500102,
      "price": 89.9,
      "targetMargin": null,
      "totalCost": null,
      "status": "inserted"
    }
  ],
  "notFound": {
    "items": []
  }
}

200Sucesso: identificação por atributo, com item recusado

{
  "id": 4610002,
  "items": [
    {
      "skuId": 500101,
      "price": 139.9,
      "targetMargin": null,
      "totalCost": null,
      "status": "updated"
    },
    {
      "price": 50,
      "targetMargin": null,
      "totalCost": null,
      "status": "ERROR",
      "error": "must provide skuId, partnerPartCode, or skuAttributeValue"
    }
  ],
  "notFound": {
    "items": [
      {
        "skuAttributeValue": "SKU-Z-999",
        "price": 10,
        "targetMargin": null,
        "totalCost": null
      }
    ]
  }
}

Usado em

Endpoints relacionados

Gerado a partir da coleção pública da API, publicada em 04/09/2026: api-docs.cws.digital.