Referência da API · Contratos · Gestão loja
Adicionar Produtos ao Contrato
- Método
- PUT
- Rota
-
/pricing/contract/:contractId/items - URL base
https://ws.autorei.net- Parâmetros de rota
:contractId- Token
- Exige token Bearer
Abre esta requisição na documentação pública da API, a fonte oficial da referência.
Descrição
Adiciona produtos ao contrato com o preço de cada um, ou atualiza 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.
Envie de 1 a 100 produtos por requisição.
Parâmetros de Rota
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
contractId |
integer | Sim | Id do contrato, devolvido em id na criação. |
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 loja, ou que se repetiram no envio. |
Erros
| Código | Quando |
|---|---|
| 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 loja do token: {"error":"priceContract.notFound"}. |
| 422 | items ausente, vazio ou com mais de 100 entradas. O detalhe vem em error. |
| 401 | Token ausente, malformado ou expirado. |
Exemplo de requisição
curl --request PUT 'https://ws.autorei.net/pricing/contract/:contractId/items' \
--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": 4610001,
"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": 4610001,
"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 usoIntegração ERP: o caminho típico pela API
- Casos de usoPortal B2B próprio: o caminho típico pela API
- Casos de usoCompras B2B e suprimentos: o caminho típico pela API
- Casos de usoVenda assistida e balcão: o caminho típico pela API
- Comece por aquiErros
Endpoints relacionados
Gerado a partir da coleção pública da API, publicada em 04/09/2026: api-docs.cws.digital.