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
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
- Casos de usoMarketplace B2B: o caminho típico pela API
- Casos de usoVarejo complexo e B2B2C: o caminho típico pela API
Endpoints relacionados
- PUT Adicionar Clientes ao Contrato da Filial
/pricing/contract/:contractId/customers/store/:partnerId - DELETE Remover Clientes do Contrato da Filial
/pricing/contract/:contractId/customers/store/:partnerId
Gerado a partir da coleção pública da API, publicada em 04/09/2026: api-docs.cws.digital.