API de Peças
Introdução
Conforme descrito na seção Compartilhamento de Dados, o DCP é totalmente voltado para dados, e os dados enviados ao seu DMS pela BRP são tão vitais quanto os dados do concessionário enviados à BRP. Uma peça essencial de dados é o catálogo de Peças, Acessórios e Vestuário (PAA) da BRP, comumente conhecido como catálogo de peças.
A Parts API permite que os concessionários acessem o catálogo de peças mais recente da BRP dentro do seu DMS. Como o catálogo de peças é usado em muitas atividades da concessionária, ter o catálogo mais atualizado no seu DMS traz inúmeros benefícios, por exemplo:
- A capacidade de consultar números de peça consistentes em discussões com a BRP.
- Pedidos de peças mais precisos.
- Maior conhecimento das mudanças mais recentes nas peças, como supersessão e disponibilidade.
Em resumo, a Parts API é um componente central da sua integração com a BRP.
A Parts API fornece 3 tipos de solicitações:
- Obter o catálogo completo de peças.
- Obter as alterações feitas no catálogo de peças após uma data especificada.
- Obter informações sobre uma peça específica.
Conforme descrito na seção Compreendendo as Peças, as peças com estes códigos estão incluídas na API.
Conforme descrito na seção Requisitos Funcionais você deve chamar a API de Peças pelo menos uma vez para recuperar o catálogo completo de peças.
O catálogo completo de peças deve estar disponível para o revendedor.
Por Onde Começar? Leia Isto Primeiro!
Antes de começar a trabalhar nesta API, você precisa ler as seguintes seções, caso ainda não as tenha consultado:
Quando Chamar a API
Para as operações do concessionário, usar um catálogo de peças atualizado é essencial.
É por isso que você deve chamar a Parts API diariamente para obter as últimas alterações!
❗ Conforme descrito na seção Requisitos Funcionais, você deve chamar a Parts API diariamente para recuperar as alterações dos últimos 2 dias. ❗
No entanto, este é o requisito mínimo. Podemos chamar a Parts API diariamente para recuperar as alterações feitas na semana passada, conforme mostrado na seção Obter Alterações da Última Semana. Dessa forma, você garante que o concessionário tenha um catálogo de peças atualizado mesmo que a atualização não funcione em um dia.
Os dados da Parts API são atualizados diariamente, e a atualização é concluída às 4:00, horário do leste (ET). Portanto, o melhor momento para chamar a Parts API para atualizar seu DMS é após as 4:00 ET.
👉 Para evitar perder alterações, recomendamos que seu DMS chame periodicamente a Parts API para recuperar alterações por um período mais longo.
Por exemplo, seu DMS pode chamar a Parts API uma vez por mês para obter as alterações.
Como Chamar a API
A seção Referência da API explica que a Parts API oferece dois serviços: um para recuperar o catálogo completo de peças ou as alterações mais recentes, e outro para obter uma peça específica.
O serviço para obter uma peça específica é chamado conforme necessário quando o concessionário busca por um número de peça específico. Ou seja, o serviço é chamado manualmente.
Conforme descrito na seção Requisitos Funcionais, o serviço para recuperar o catálogo completo de peças ou as últimas alterações deve ser automatizado.
O concessionário não precisa intervir para atualizar o catálogo de peças diariamente.
Informações Técnicas
Características
Tipo de API | Tipo de DSP | Versão DCP | Complexidade |
|---|---|---|---|
Obter dados do BRP | DMS | V3 - Internacional | Baixa |
Enviar dados ao BRP | CRM | V4 - América do Norte | Um pouco mais |
Transação com BRP | | | Um pouco mais ainda |
Autenticação
A API está usando Autenticação de Aplicação.
Você precisa de um token de acesso válido antes de chamar esta API, ou deve chamar a API de Autenticação de Aplicativos para obter um.
O token de acesso é válido por 30 minutos! (1799 segundos)
URL Base
Teste | https://qa-cloud-api.brp.com/dcp/<v3 ou v4> |
|---|---|
Produção | https://cloud-api.brp.com/dcp/<v3 ou v4> |
Recurso: Peça
Quando chamado para solicitar o catálogo completo de peças ou as últimas alterações, a Parts API retorna um array de Peça recursos. Cada recurso Peça , mostrado abaixo, contém todas as informações sobre uma peça.
Quando chamado para obter uma peça específica, a Parts API retorna um único recurso Peça .
Representação JSON
{
"product_code": "080037100",
"product_descr": "CASTING COVER",
"product_type": "30",
"gross_weight": 919,
"gross_weight_uom": "G",
"first_year_utilization": 1996,
"last_year_utilization": 2007,
"product_lines": [
"SNO"
],
"sales_status_code": "7",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"is_bom": false,
"units_of_measure": [
{
"volume": 6300,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "CCM",
"length": 35,
"width": 20,
"gross_weight": 919,
"net_weight": 919,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 9
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2014-10-01",
"price_price_uom": 134.99,
"price_sales_uom": 134.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2014-10-01",
"price_price_uom": 80.98,
"price_sales_uom": 80.98,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": [
{
"superseded_product": "204071507",
"superseding_product": "080037100",
"direction": "forward"
}
]
}
Propriedades
Todos os campos numéricos com decimais usam o ponto(.) como separador decimal. A vírgula (,) é NÃO suportada como separador decimal.
Property | Type | Definition | Notes |
|---|---|---|---|
product_code* | string | Code that uniquely identifies a product. | Max Length: 18 |
product_descr†* | string | Description of the product. | Max Length: 40 |
product_type* | string | Code that uniquely identifies product type. Refer to the Product Type table below. | RegMax Length: 5 |
gross_weight* | number | The gross weight of the product. | Precision: 0.001 |
gross_weight_uom*
| string | Weight unit of measure, as listed in the Unit of Measures table below. | Max Length: 5 |
first_year_utilization* | number | The first model year in which the product was introduced to the market. | Max Length: 4 |
last_year_utilization* | number | The last model year in which the product was available to the market. | Max Length: 4 |
product_lines* | list of strings | Code that uniquely identifies the product line. Refer to the Product Lines table below. | Max Length: 15 |
sales_status_code* | string | Code that identifies the sellable status of the part. Refer to the Sales Status Code table below. | Max Length: 2 |
minimum_order_quantity* | number | Minimum order quantity in a sales unit of measure. 👉 As of this writing, there are no parts with a minimum order quantity higher than 1. | Precision: 0.000 |
sales_uom* | string | Sales unit of measure. Units of measure used by BRP are listed in the Units of Measure table below. | Max Length: 5 |
market_classification* | string | Code that uniquely identifies the market classification. Refer to the Product Market Classification table below. | Max Length: 3 |
is_bom | boolean | V4 Only If true, the part is a sales BOM (BOM = bill of materials). When a sales BOM is ordered, many parts are delivered. | |
units_of_measure | object | V4 Only | |
units_of_measure.uom | string | The part's unit of measure is listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure. numerator | string | The numerator of the conversion factor from the Base UOM to this UOM. Example: 1 pac = 12 bt (Base UOM: bt) Numerator = 12 | |
units_of_measure. denominator | string | The numerator of the conversion factor from the Base UOM to this UOM. Example: 1 pac = 12 bt (Base UOM: bt) Denominator = 1 | |
units_of_measure. weight_unit | string | Weight unit of measure, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure. gross_weight | number | The gross weight of the product. | Precision: 0.001 |
units_of_measure. net_weight | number | The net weight of the product. | Precision: 0.001 |
units_of_measure. volume_unit | string | Volume unit of measure, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure.volume | number | The volume of the product. | Precision: 0.001 |
units_of_measure. dimension_unit | string | Unit in which a product's length, width, and height are measured, as listed in the Unit of Measures table below. | Max Length: 3 |
units_of_measure.length | number | Length of the product. | Precision: 0.001 |
units_of_measure.width | number | Width of the product. | Precision: 0.001 |
units_of_measure.height | number | Height of the product. | Precision: 0.001 |
pricings* | list of objects | List of pricing for the product. |
|
pricings.price_type | string | Code that identifies a type of price. One of
|
|
pricings.valid_from | date | The date at which the price becomes active in ISO 8601 format. | yyyy-mm-dd |
pricings.price_price_uom | number | Price, excluding taxes, for 1 unit of measure. The price of each part, regardless of the minimum sale quantity in the package. | Format 9999999.99 |
pricings.price_sales_uom | number | Price, excluding taxes, for one sales unit of measure. | Format 9999999.99 |
pricings.currency | string | The currency in which the price is provided. The available values are listed in the Currency table below. |
|
in_package | object | Sales package content. |
|
in_package .quantity | number | Number of items(s) contained in the package based on the unit of measure in the package. | Precision: 0.001 |
in_package .uom | string | Unit of measure for the item contained in the package, one of the units of measure listed in the Unit of Measures table below. | Max Length: 5 |
supersessions* | list of objects | List of supersession chains in which the requested product is included. |
|
supersessions .superseded_product | string | Unique identifier of the superseded product. | Max Length: 18 |
supersessions .superseding_product | string | Unique identifier of the product that supersedes. | Max Length: 18 |
supersessions .direction | string | The direction in which the supersession can be applied. One of
|
|
- Propriedades marcadas com uma adaga (†) são retornadas no idioma solicitado.
- Propriedades marcadas com um asterisco (*) são sempre retornadas na resposta.
- 🛑 Diferenças entre V3 e V4.
Moeda
Organização de Vendas | Moeda | Versão 3 | Versão 4 |
|---|---|---|---|
1010 | CAD | | X |
3020 | USD | | X |
6030 | EUR | X | |
6030 | NOK | X | |
6050 | SEK | X | |
6050 | EUR | X | |
6050 | GBP | X | |
8070 | MXN | X | |
8075 | BRL | X | |
7080 | AUD | X | |
7080 | NZD | X | |
Linhas de Produtos
Chave | Valor | Marca |
|---|---|---|
2WV | Veículos de duas rodas | Can-Am On-Road |
3WV | Veículos de três rodas | Can-Am On-Road |
ATV | Veículos todo-terreno | Can-Am Off-Road |
OE | Motores de popa | Sea-Doo |
PTN | Barcos de pontão | Sea-Doo |
PWC | Embarcações pessoais | Sea-Doo |
SNO | Motos de neve | Ski-Doo |
SSV | Veículos side-by-side | Can-Am Off-Road |
Classificação de Mercado de Produtos
Chave | Valor |
|---|---|
CAP | Cativo |
COM | Competitivo |
NA | Quando não houver correspondência acima (Indefinido) |
Tipos de Produto
Chave | Valor |
|---|---|
10 | Veículo |
20 | Motor |
30 | Peças |
40 | Acessórios |
50 | Vestuário |
60 | Licenciamento e Diversão |
80 | Manuais |
90 | Reboque |
100 | Reconstruído |
110 | Óleo e Produtos Químicos |
N/A | Quando não houver correspondência acima (Indefinido) |
Código de Status de Vendas
Chave | Valor | Descrição |
|---|---|---|
4 | Vendável | Material está ativo sem restrições de pedido |
5 | Usar sem depleção | Material pode ser inserido no pedido, mas é diretamente substituído por seu material sucessor |
7 | Vintage | Material vendido por terceiros quando não for mais fornecido pela BRP |
E | Descontinuação | Material está disponível, mas não será mais reabastecido |
H | Obsoleto | Material está descontinuado e não pode ser encomendado |
NA | Quando nenhum item acima corresponder (Indefinido) | |
Unidade de Medidas
Código | Descrição | Dimensão |
|---|---|---|
BT | Garrafa | Quantidade |
CAN | Galão | Quantidade |
CM | Centímetro | Comprimento |
CS | Caixa | Quantidade |
FT | Pés | Comprimento |
G | Grama | Peso |
M | Metro | Comprimento |
ML | Mililitro | Volume |
MM | Milímetro | Comprimento |
OZ | Onças | Peso |
PAC | Pacote | Quantidade |
PC | Peça | Quantidade |
PR | Par | Quantidade |
TB | Tubo | Quantidade |
Recurso: Lista de Peças
Quando chamada para solicitar o catálogo completo de peças ou as últimas alterações, a API de Peças retorna uma matriz de Peça recursos.
As respostas retornadas contêm dois objetos que ajudam você a navegar pelas páginas do catálogo de peças.
Representação JSON
{
"items": [
{
List of Parts resources
}
],
"links": {
"previous": "https://api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=1900-01-01&sales_org=canada¤cy=CAD&limit=200&page=1",
"next": "https://api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=1900-01-01&sales_org=canada¤cy=CAD&limit=200&page=3"
},
"meta": {
"total_records": 9999,
"total_pages": 87,
"current_page": 2,
"limit": 200
}
}
Propriedades
Propriedade | Tipo | Definição |
|---|---|---|
items | Lista de objetos | Lista de Peça recursos que são retornados. |
links | objeto | Links de paginação. |
links.previous | string | URL a ser usada para recuperar a página anterior. NULL se não houver página anterior. |
links.next | string | URL a ser usada para recuperar a próxima página. NULL se não houver próxima página. |
meta | objeto | Estatísticas da requisição. |
meta.total_records | número | O número de registros retornados pela requisição. |
meta.total_pages | número | O número de páginas é usado para calcular o limite. |
meta.current_page | número | O número da página atual ou o número da página solicitada. |
meta.limit | número | Limite dos parâmetros da requisição. |
Links
O Links pode ser usado para navegar pelas páginas retornadas pela Parts API.
Quando um link não é NULL, ele pode ser usado para acessar a página anterior ou seguinte. Isso simplifica a navegação entre páginas porque você não precisa salvar seus parâmetros de consulta; a URL do link contém os parâmetros de consulta que você forneceu e os parâmetros padrão para aqueles que você não forneceu.
Metadados
O Meta objeto fornece estatísticas sobre o número de recursos retornados pela sua solicitação e o número de páginas que você pode esperar receber.
Essas informações podem ser úteis para diagnósticos e para verificar se todos os Peça recursos foram recebidos.
Limitações e Restrições
Formato de Número
Todos os campos numéricos com decimais usam o ponto(.) como separador decimal. A vírgula (,) NÃO é suportada como separador decimal.
Data da Última Alteração
Quando o parâmetro de consulta last_changed_date é usado para recuperar as alterações a partir de uma data específica, é essencial entender quando o catálogo de peças é atualizado.
A primeira etapa de uma atualização de peça é feita no SAP. Depois, os jobs do banco de dados são executados para atualizar o catálogo.
Os jobs do banco de dados que atualizam o catálogo de peças a partir dos sistemas de backend são executados no final do dia, começando às 22h no fuso horário do Leste (ET UTC-05:00). Os jobs geralmente terminam antes da meia-noite do mesmo dia.
Se você chamar a Parts API com um last_changed_date com o valor da data de hoje, nenhuma peça será retornada porque as últimas alterações no catálogo de peças foram feitas ontem.
Para entender melhor a sequência, vamos analisar um cenário.
Às 10:00 ET de 14 de outubro:
- 10 peças são modificadas no SAP.
Às 22:00 ET de 14 de outubro:
- Os jobs do banco de dados são executados e atualizam o catálogo.
- As 10 peças modificadas são atualizadas no catálogo.
Às 2:00 ET de 15 de outubro:
- Seu DMS chama a Parts API, e a data da última alteração é 15 de outubro.
- Nenhuma peça será retornada, pois as peças foram modificadas em 14 de outubro.
❗ ❗ Se o seu DMS chamar a Parts API e nunca receber peças atualizadas, certifique-se de usar uma last_change_date 2 ou 3 dias antes da data atual ❗ ❗
Histórico de Preços e Peças Obsoletas
Quando uma peça se torna não comercializável (por exemplo, obsoleta, antiga), seu preço é definido como 0 no sistema backend.
👉 Para essas peças, a Parts API mantém o último preço disponível.
Entendendo Peças
Esta seção apresenta informações essenciais sobre como lidar com o catálogo de peças.
Código de Status de Venda
Peças não comercializáveis não são removidas para manter a coerência do catálogo de peças e as referências entre os dados dos concessionários e o catálogo de peças.
O sales_status_codepropriedade, encontrada no objeto Part descrito na seção Representação JSON da Peça determina se a peça é comercializável ou não. Os possíveis valores de sales_status_codesão mostrados na tabela abaixo.
Você deve exibir o código de status de venda ou um equivalente em seu DMS para indicar ao concessionário se uma peça pode ser encomendada.
Código de Status de Vendas
Chave | Valor | Descrição |
|---|---|---|
4 | Vendável | Material está ativo sem restrições de pedido |
5 | Usar sem depleção | Material pode ser inserido no pedido, mas é diretamente substituído por seu material sucessor |
7 | Vintage | Material vendido por terceiros quando não for mais fornecido pela BRP |
E | Descontinuação | Material está disponível, mas não será mais reabastecido |
H | Obsoleto | Material está descontinuado e não pode ser encomendado |
NA | Quando não houver correspondência acima (Indefinido) | |
Vendável
O valor mais simples do código de status de vendas é '4': a peça pode ser vendida, o que significa que o concessionário pode pedir a peça sem restrições.
Usar Sem Depleção
O valor do código de status de vendas '5' indica que o concessionário pode pedir a peça, mas receberá uma peça de substituição.
Descontinuação Gradual
O valor do código de status de vendas 'E' indica que o concessionário pode pedir a peça enquanto houver estoque disponível na BRP. Quando o estoque acabar, a peça de substituição será entregue ao concessionário ao receber o pedido.
Vintage
O valor do código de status de vendas '7' indica que o concessionário não pode pedir a peça através da BRP, mas pode solicitá-la por meio de terceiros.
Obsoleto
O valor do código de status de vendas 'H' indica que o concessionário não pode pedir a peça. Uma peça de substituição pode existir em alguns casos e é identificada nas supercessõesda propriedade da Peça.
Kit e BOM de Vendas
Vamos começar com duas definições:
- Um kit é um grupo de peças representado por um único número de peça, que é solicitado e enviado como uma única unidade.
- Um BOM de vendas é um grupo de peças representado por um único número de peça, mas que é solicitado e enviado como várias peças.
Um Exemplo de Kit
Um exemplo de kit é a peça 715009632, um kit de para-choque traseiro para um ATV.
Quando você chama a Parts API para solicitar esta peça, você recebe a seguinte resposta.
{
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"product_type": "30",
"gross_weight": 9,
"gross_weight_uom": "KG",
"first_year_utilization": 2024,
"last_year_utilization": 2025,
"product_lines": [
"ATV"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 32589,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 71,
"width": 51,
"gross_weight": 9,
"net_weight": 9,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 9
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2025-06-07",
"price_price_uom": 223.49,
"price_sales_uom": 223.49,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2025-06-07",
"price_price_uom": 150.48,
"price_sales_uom": 150.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}Você vê que o campo is_bom está true, o que indica que existem outras peças relacionadas a esta peça.
Quando o concessionário pede esta peça, apenas uma peça é enviada, conforme mostrado no BOSSWeb.

E na resposta da API Parts Order, uma peça é pedida (ordered_line) e uma é enviada (shipping_lines).
{
"pac_order_id": "79f15a68-1671-4468-a9f8-18489553ea34",
"sales_order_no": "",
"creation_date": "2025-06-19T10:18:11Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 150.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 8.52,
"currency": "USD"
},
{
"condition_type": "handling_fee",
"total_amount": 20,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 170.48,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "warning",
"code": "",
"descr": "Your PAA order is less than 250.00$, handling fee of 20.00$ will be applied to the invoice."
},
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "184a2148-3cb3-4f51-85c2-8101cf40aa64",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"order_qty": 1,
"dealer_po_item_no": "A-0010",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "ATV",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000101",
"parent_item_no": "000100",
"product_code": "715009632",
"product_descr": "BUMPER REAR B-487 KIT",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 223.49,
"wholesale_unit_price": 150.48,
"net_unit_price": 170.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "ATV",
"product_type": "30",
"plant": {
"name": "BRP - FORT WORTH PAA",
"city": "FORT WORTH",
"state": "TX",
"country": "US"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 150.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 8.52,
"currency": "USD"
},
{
"condition_type": "handling_fee",
"total_amount": 20,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 170.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:18:11Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-20",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}👉 Com um kit, a lista de peças incluídas no kit não está disponível.
Em geral, as peças incluídas no kit não podem ser encomendadas separadamente.
Há exceções. Por exemplo, este kit de para-choque traseiro inclui a peça 704902778 Adesivo de Aviso, Bagageiro, que pode ser encomendada separadamente.
No entanto, o concessionário não sabe que a peça 704902778 está incluída no kit.
Um Exemplo de BOM de Vendas
Um exemplo de uma BOM de vendas é a peça 505074936, amortecedores dianteiros para uma moto de neve.
Quando você chama a Parts API para solicitar esta peça, recebe a seguinte resposta.
{
"product_code": "505074936",
"product_descr": "FRONT SHOCK",
"product_type": "30",
"gross_weight": 2.424,
"gross_weight_uom": "KG",
"first_year_utilization": 2020,
"last_year_utilization": 2020,
"product_lines": [
"SNO"
],
"sales_status_code": "5",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 13104,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 56,
"width": 18,
"gross_weight": 2.424,
"net_weight": 2.424,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 13
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2021-04-15",
"price_price_uom": 749.99,
"price_sales_uom": 749.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2021-04-15",
"price_price_uom": 523.48,
"price_sales_uom": 523.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}Você vê que o campo is_bom está como true, o que indica que existem outras peças relacionadas a esta peça.
Quando o revendedor solicita esta peça, duas peças são enviadas, como mostrado no BOSSWeb.

E na resposta da API de Pedido de Peças: uma peça é pedida (linha_pedida com "item_no": "000100", e duas são enviadas:
- 505074897 AMORTECEDOR DIANTEIRO com "item_no": "000200"
- 505074898 AMORTECEDOR DIANTEIRO com "item_no": "000300"
❗ Não há muitas BOM de vendas pois isso pode causar problemas para o concessionário.
Como muitas peças são enviadas ao concessionário para uma única BOM de vendas, as peças podem chegar à concessionária em momentos diferentes.
É por isso que apenas algumas peças são criadas como uma BOM de vendas.
{
"pac_order_id": "339944ab-c6b4-4884-a571-d0ee91186189",
"sales_order_no": "",
"creation_date": "2025-06-19T10:32:26Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 1262.96,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 63.14,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 1262.96,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "0b7116d4-a1f8-4aab-bab2-2bace94377e9",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "505074936",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": true,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": []
},
{
"ordered_line": {
"item_id": "",
"item_no": "000200",
"parent_item_no": "000100",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000201",
"parent_item_no": "000200",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:32:26Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
},
{
"ordered_line": {
"item_id": "",
"item_no": "000300",
"parent_item_no": "000100",
"product_code": "505074898",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000301",
"parent_item_no": "000300",
"product_code": "505074898",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:32:26Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}No caso de uma lista de materiais de vendas (Sales BOM), as peças incluídas ficam visíveis para os revendedores e podem ser encomendadas separadamente.
Ao chamar a Parts API para recuperar a peça 505074897, você obtém as seguintes informações.
{
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"product_type": "30",
"gross_weight": 2.098,
"gross_weight_uom": "KG",
"first_year_utilization": 2021,
"last_year_utilization": 2025,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "COM",
"is_bom": true,
"units_of_measure": [
{
"volume": 13104,
"uom": "PC",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 56,
"width": 18,
"gross_weight": 2.098,
"net_weight": 2.098,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 13
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2025-06-07",
"price_price_uom": 877.49,
"price_sales_uom": 877.49,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2025-06-07",
"price_price_uom": 631.48,
"price_sales_uom": 631.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}O revendedor pode pedir a peça 505074897, conforme mostrado na resposta da Parts Order API.
{
"pac_order_id": "7af63abb-0d86-4eaf-a9e9-ab9a30910e81",
"sales_order_no": "",
"creation_date": "2025-06-19T10:39:15Z",
"dealer_po_no": "PO0001234",
"dealer_no": "0000694307",
"order_type": "regular",
"shipping_carrier": {
"shipping_condition": "S0",
"shipping_condition_descr": "Standard Ground"
},
"payment_terms": "M120",
"payment_terms_descr": "Due on day 20 of the next mont",
"partners": [],
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"header_texts": [],
"header_statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation has been done successfully"
}
],
"items": [
{
"ordered_line": {
"item_id": "c1e1cdf4-d200-4bd4-bcb5-fbf5a4fc68b0",
"item_no": "000100",
"parent_item_no": "000000",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"order_qty": 1,
"dealer_po_item_no": "A-0010",
"dealer_product_code": "",
"sales_uom": "PC",
"min_order_qty": 1,
"is_sales_bom": false,
"product_line": "SNO",
"product_type": "30",
"texts": []
},
"shipping_lines": [
{
"item_no": "000101",
"parent_item_no": "000100",
"product_code": "505074897",
"product_descr": "FRONT SHOCK",
"ship_qty": 1,
"sales_uom": "PC",
"price_uom": "PC",
"package_uom": "PC",
"in_package": {
"qty": 1,
"uom": "PC"
},
"package_count": 1,
"msrp_unit_price": 877.49,
"wholesale_unit_price": 631.48,
"net_unit_price": 631.48,
"currency": "USD",
"is_substitute_product": false,
"substituted_product_code": null,
"product_line": "SNO",
"product_type": "30",
"plant": {
"name": "BRP - SAINT-JEAN-SUR-RICHELIEU",
"city": "ST-JEAN-SUR-RICHELIEU",
"state": "QC",
"country": "CA"
},
"pricings": [
{
"condition_type": "gross_amt",
"total_amount": 631.48,
"currency": "USD"
},
{
"condition_type": "tax_amt",
"total_amount": 31.57,
"currency": "USD"
},
{
"condition_type": "subtotal_amt",
"total_amount": 631.48,
"currency": "USD"
}
],
"deliveries": [
{
"status_code": "allocated",
"status_date": "2025-06-19T10:39:15Z",
"status_descr": "",
"qty": 1,
"availability_date": "2025-06-23",
"no": "",
"item_no": "",
"delivery_qty": 0,
"creation_date": "",
"carrier_name": "",
"split_delivery_no": "",
"split_delivery_item_no": "",
"billings": []
}
],
"statuses": [
{
"type": "success",
"code": "",
"descr": "Simulation of the part has been done successfully"
}
]
}
]
}
]
}Substituição de Peça
Uma peça pode ser substituída (trocada) por outra peça por muitos motivos. Por exemplo, a BRP pode mudar o fornecedor da peça. A nova peça é equivalente em "forma, ajuste e função", mas possui um novo número de peça.
Para cada objeto de peça, o supersessionarray de propriedades contém a cadeia de substituição. A cadeia de substituição vai da peça mais nova para a mais antiga. Se o array estiver vazio, a peça não substitui outra peça.
Uma peça pode estar em mais de uma cadeia de substituição!
Isso significa que a mesma peça pode substituir duas peças.
Cadeia de Substituição
Existem dois tipos de cadeias de substituição: um-para-um e um-para-muitos.
Um-para-um
Uma peça substitui outra peça. Aqui, a peça 204130176 (superseding_product) substitui a peça 204560132 (superseded_product).
Ao chamar a Parts API para recuperar a peça 204130176 ou 204560132, as mesmas informações de substituição são retornadas, conforme mostrado abaixo.
"supersessions": [
{
"superseded_product": "204560132",
"superseding_product": "204130176", <-- current part
"direction": "forward"
}
]Com o tempo, uma cadeia de substituição pode ser criada: a peça A é substituída pela B, que é substituída pela C, que é substituída pela D, etc.
Por exemplo, a Parts API retorna as seguintes informações de substituição para a peça 219000819.
"supersessions": [
{
"superseded_product": "219000748",
"superseding_product": "219000819", <-- current part
"direction": "forward"
},
{
"superseded_product": "219000722",
"superseding_product": "219000748",
"direction": "forward"
},
{
"superseded_product": "219000708",
"superseding_product": "219000722",
"direction": "forward"
},
{
"superseded_product": "219000562",
"superseding_product": "219000708",
"direction": "forward"
}
]A cadeia de substituição começa com a peça 219000562 (superseded_product na linha 18) sendo substituída pela peça 219000708 (superseding_product na linha 19).
A cadeia termina com a peça 219000748 (superseded_product na linha 3) sendo substituída pela peça 219000819 (superseding_product na linha 4).
👉 O primeiro ponto crítico a lembrar é que todas as entradas no array supersessions onde superseding_product é o product_code representam as substituições atuais.
👉 O segundo ponto crítico é que, se a peça foi substituída, a primeira entrada no array supersession onde superseded_product é o product_code representa a substituição atual.
Isso é mostrado no BOSSWeb na tela de Histórico de Peças para a peça 219000748, onde a peça 219000819 é o número de peça atual.

Um-para-Muitos
Uma peça pode substituir mais de uma peça. Um exemplo é a peça 420239135, que possui as seguintes informações de supersessão, indicando que as peças 420239132 e 711239132 (superseded_product) são ambas substituídas por 420239135 (superseding_product).
👉 O primeiro ponto crítico a lembrar é que todas as entradas no array supersessions onde superseding_product é product_code representam as supersessões atuais.
👉 O segundo ponto crítico é que, se a peça for substituída, a primeira entrada no array supersession onde superseded_product é product_code representa a supersessão atual.
{
"product_code": "420239135",
"product_descr": "COMPRESSION SPRING",
....
"units_of_measure": [
...
],
"pricings": [
...
],
"supersessions": [
{
"superseded_product": "420239132",
"superseding_product": "420239135", <-- current part
"direction": "forward"
},
{
"superseded_product": "711239132",
"superseding_product": "420239135", <-- current part
"direction": "forward"
}
]
}Isto é mostrado no BOSSWeb na tela de Histórico de Peças para a peça 420239135.

As informações de substituição podem ser mais complexas quando uma peça substitui muitas peças que possuem sua própria cadeia de substituição.
Por exemplo, a peça 269501920 substitui duas peças, conforme mostrado nas informações de substituição.
"supersessions": [
{
"superseded_product": "269501855",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501783",
"superseding_product": "269501855",
"direction": "forward"
},
{
"superseded_product": "269501844",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501693",
"superseding_product": "269501783",
"direction": "forward"
},
{
"superseded_product": "269501786",
"superseding_product": "269501844",
"direction": "forward"
}
]As duas peças substituídas têm suas cadeias de supersessão.
"product_code": "269501855",
....
"supersessions": [
{
"superseded_product": "269501855",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501783",
"superseding_product": "269501855",
"direction": "forward"
},
{
"superseded_product": "269501693",
"superseding_product": "269501783",
"direction": "forward"
}
]
"product_code": "269501844",
...
"supersessions": [
{
"superseded_product": "269501844",
"superseding_product": "269501920", <-- current part
"direction": "forward"
},
{
"superseded_product": "269501786",
"superseding_product": "269501844",
"direction": "forward"
}
]Isso é mostrado no BOSSWeb na tela de Histórico de Peças para as três peças.

Regra de Substituição
Para determinar se uma peça foi substituída, observe o array de substituições da peça:
- Se o array estiver vazio, a peça não foi substituída.
- Se o product_code da peça aparecer no campo superseded_product de uma entrada, a peça foi substituída.
- Se o product_code da peça aparecer no campo superseding_product de uma entrada, a peça substitui outra peça.
- Tanto 2 quanto 3 podem ser verdadeiras. Nesse caso, a regra 2 tem precedência e a peça é substituída. Nesse caso, a substituição é representada pela primeira entrada do array de substituições.
Direção da Substituição
Em uma cadeia de substituição, quando uma peça é substituída por outra, ela ainda pode ser usada e ser intercambiável com a nova peça.
A propriedade de direção para a peça substituída indica se a peça antiga e a nova são intercambiáveis.
Exemplo: a peça A é substituída (trocada) pela peça B.
- A direção é para a frente: quando o distribuidor solicita a peça A, a peça B é enviada. A peça A não pode mais ser usada.
- A direção é ambas: quando o distribuidor solicita a peça A, o distribuidor recebe a peça A ou a peça B. As peças A e B são intercambiáveis.
Aqui está um exemplo da peça 204160371, que substitui uma peça mais antiga (204160343) e, por sua vez, é substituída pela peça mais nova 267001006.
{
"product_code": "204160371",
"supersessions": [
{
"superseded_product": "204160343", // old part
"superseding_product": "204160371",
"direction": "forward"
},
{
"superseded_product": "204160371",
"superseding_product": "267001006", // newer part
"direction": "both"
}
]
}Também vemos que a propriedade direction para a substituição da peça 267001006 é ambas. Isso significa que o distribuidor pode receber a peça 204160371 ou a peça 267001006 ao solicitá-la, pois são intercambiáveis.
Os cenários são:
- O distribuidor solicita 267001006 e recebe 26700100.
- O distribuidor solicita 204160371 e recebe 204160371.
- O distribuidor solicita 204160371 e recebe 267001006.
- O distribuidor solicita 267001006 e recebe 204160371.
- O distribuidor solicita 204160371 e recebe ambas 204160371 e 267001006.
- O distribuidor solicita 267001006 e recebe ambas 267001006 e 204160371.
Unidade de Medida de Venda
A propriedade sales_uom da peça é importante para entender o preço da peça. Os valores possíveis estão listados na tabela de Unidades de Medida na seção Recurso: Peça .
A unidade de medida mais comum é PC (peça), usada por 98% das peças. As próximas mais comuns são PR (par), usada apenas para roupas, e CS (caixa).
Quantidade na Embalagem = Número de Itens
As unidades PAC e CS são usadas para produtos vendidos em caixas ou embalagens, como frascos de óleo. Para a maioria das unidades de medida, a propriedade pricings.in_package.quantity de uma peça contém 1, indicando que cada peça é vendida separadamente.
Para as unidades de medida PAC e CS , a propriedade pricings.in_package.quantity de uma peça geralmente contém o número de itens na embalagem ou caixa. Veja abaixo
Vamos analisar um exemplo com a peça 20037, mostrada abaixo. A PAC é a unidade de medida usada e a propriedade pricings.in_package.quantity contém 10.
{
"product_code": "20037",
"product_descr": "RONDELLE *WASHER",
"product_type": "30",
"gross_weight": 1,
"gross_weight_uom": "G",
"first_year_utilization": 1995,
"last_year_utilization": 2020,
"product_lines": [
"ATV",
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PAC",
"market_classification": "COM",
"units_of_measure": [
{
"volume": 7.5,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "CCM",
"length": 3,
"width": 2.5,
"gross_weight": 1,
"net_weight": 1,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 1
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2022-08-01",
"price_price_uom": 2.49,
"price_sales_uom": 24.9,
"currency": "CAD",
"in_package": {
"uom": "PAC",
"quantity": 10
}
},
{
"price_type": "dealer",
"valid_from": "2022-08-01",
"price_price_uom": 1.48,
"price_sales_uom": 14.8,
"currency": "CAD",
"in_package": {
"uom": "PAC",
"quantity": 10
}
}
],
"supersessions": [
{
"superseded_product": "M20037",
"superseding_product": "20037",
"direction": "forward"
}
]
}A propriedade price_sales_uom é o preço para o código do produto. A propriedade price_price_uom é o preço para 1 item.
Ambos os preços são iguais para peças vendidas em unidades, como todas as peças com a PC unidade de medida.
Para as unidades de medida PAC e CS, quando a propriedade pricings.in_package.quantity é diferente de 1, o valor da propriedade price_sales_uom é o valor da propriedade price_price_uom multiplicado pelo valor da propriedade pricings.in_package.quantity.
pricings.in_package.quantity x price_price_uom = price_sales_uom
No nosso exemplo,
10 x 1.48 = 14.80
Observe que você pode usar os preços de revendedor ou de varejo para calcular. É bom que obtenhamos o mesmo resultado.
Quantidade no Pacote NÃO = Número de Itens
Para muitas peças, usando a unidade de medida PAC ou CS a propriedade pricings.in_package indica quantos itens há na caixa. No entanto, para algumas peças, a quantidade é 1.
👉 Lembre-se de que o DCP não gerencia os dados do catálogo de peças!
Podemos relatar problemas à equipe de gestão de peças, mas não podemos mudar como as peças são tratadas! 🤷♂️
Vamos analisar um exemplo de uma peça com quantidade CS igual a 1: código do produto 779158, que é um óleo sintético para engrenagens.
A resposta abaixo é retornada ao chamar a API Parts para obter informações sobre o código de produto 779158.
{
"product_code": "779158",
"product_descr": "GEAR OIL SYNTHETIC 75W90 32 OZ/0,946L",
"product_type": "110",
"gross_weight": 10.8,
"gross_weight_uom": "KG",
"first_year_utilization": 2018,
"last_year_utilization": 2023,
"product_lines": [
"3WV",
"ATV",
"PTN",
"PWC",
"SNO",
"SSV"
],
"sales_status_code": "5",
"minimum_order_quantity": 1,
"sales_uom": "CS",
"market_classification": "COM",
"units_of_measure": [
{
"volume": 29808,
"uom": "CS",
"weight_unit": "KG",
"volume_unit": "CCM",
"length": 34.5,
"width": 27,
"gross_weight": 10.8,
"net_weight": 10.8,
"dimension_unit": "CM",
"numerator": 1,
"denominator": 1,
"height": 32
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2021-10-15",
"price_price_uom": 25.99,
"price_sales_uom": 25.99,
"currency": "USD",
"in_package": {
"uom": "CS",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2022-06-03",
"price_price_uom": 16.48,
"price_sales_uom": 16.48,
"currency": "USD",
"in_package": {
"uom": "CS",
"quantity": 1
}
}
],
"supersessions": []
}O pricings.in_package indica que a unidade de medida CS é usada. No entanto, a propriedade pricings.in_package.quantity é 1. Então, como podemos saber quantas garrafas há no engradado?
Bem, não podemos saber, já que a propriedade pricings.in_package.quantity é 1, e os valores de price_price_uom e price_sales_uom são os mesmos.
Ao processar os dados da API de Parts certifique-se de validar o valor de pricings.in_package.quantity em relação aos valores de price_price_uom e price_sales_uom.
Se
pricings.in_package.quantity x price_price_uom price_sales_uom
Defina a quantidade no seu DMS como
pricings.in_package.quantity = price_sales_uom / price_price_uom
Quantidade Mínima de Pedido
A quantidade mínima de pedido da peça é uma indicação para o revendedor ao solicitar a peça.
Observe que a propriedade de quantidade mínima de pedido não está disponível para todas as peças. Na maioria dos casos, a propriedade é nula ou uma string vazia.
Se o quantidade mínima de pedidotiver um valor diferente de 1, ao solicitar a peça, a quantidade deve ser pelo menos igual ao valor da quantidade mínima de pedidopropriedade.
Preço Ausente
Embora a API DCP Parts forneça acesso ao catálogo de peças, outros grupos de negócios da BRP gerenciam os dados do catálogo.
Por vários motivos, pode acontecer que preços (ou outras informações) estejam ausentes para uma peça. Se a peça for comercializável (ou seja, o código de status de vendas for 4) e os preços estiverem ausentes, um aviso deve ser exibido ao concessionário. O concessionário deve então abrir um tíquete com o help desk da BRP para relatar o problema.
A Data da Última Atualização versus a Data Válida A Partir De
Quando você chama a Parts API para obter as mudanças desde uma data específica, você chama o endpoint Obter Catálogo de Peças com o parâmetro last_change_date. Um exemplo é fornecido na seção Obter Alterações da Última Semana.
Vamos supor que você chame a Parts API em 7 de julho de 2024, com esta chamada:
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=2024-12-16&language=en-US&page=1' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'A Parts API retorna todas as peças atualizadas desde 16 de dezembro de 2024 (inclusive).
👉 O valor de last_change_date NÃO é retornado na resposta.
Na resposta da Parts API, você vê a propriedade valid_from em cada uma das entradas de pricings .
{
"items": [
{
"product_code": "517309742",
"product_descr": "COVER_CVT ASSY",
"product_type": "30",
"gross_weight": 111,
"gross_weight_uom": "G",
"first_year_utilization": 2026,
"last_year_utilization": 2026,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"units_of_measure": [
{
"volume": 0,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "",
"length": 0,
"width": 0,
"gross_weight": 111,
"net_weight": 111,
"dimension_unit": "",
"numerator": 1,
"denominator": 1,
"height": 0
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2024-01-10",
"price_price_uom": 134.99,
"price_sales_uom": 134.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2024-01-10",
"price_price_uom": 79.48,
"price_sales_uom": 79.48,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
},
{
"product_code": "517309725",
"product_descr": "PANEL_ACOUSTIC",
"product_type": "30",
"gross_weight": 111,
"gross_weight_uom": "G",
"first_year_utilization": 2026,
"last_year_utilization": 2026,
"product_lines": [
"SNO"
],
"sales_status_code": "4",
"minimum_order_quantity": 1,
"sales_uom": "PC",
"market_classification": "",
"units_of_measure": [
{
"volume": 0,
"uom": "PC",
"weight_unit": "G",
"volume_unit": "",
"length": 0,
"width": 0,
"gross_weight": 111,
"net_weight": 111,
"dimension_unit": "",
"numerator": 1,
"denominator": 1,
"height": 0
}
],
"pricings": [
{
"price_type": "retail",
"valid_from": "2024-01-10",
"price_price_uom": 41.99,
"price_sales_uom": 41.99,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
},
{
"price_type": "dealer",
"valid_from": "2024-01-10",
"price_price_uom": 24.98,
"price_sales_uom": 24.98,
"currency": "USD",
"in_package": {
"uom": "PC",
"quantity": 1
}
}
],
"supersessions": []
}
],
"links": {
"previous": null,
"next": "https://cloud-api.brp.com/dcp/v4/parts?language=en-US&last_changed_date=2024-12-16&sales_org=3020¤cy=USD&limit=2&page=2"
},
"meta": {
"total_records": 6314,
"total_pages": 3157,
"current_page": 1,
"limit": 2
}
}❗ A valid_from propriedade NÃO É a last_changed_date.
❗ Ao chamar a Parts API com uma last_changed_date, toda peça retornada foi alterada e deve ser atualizada.
⛔ Você não pode usar a valid_from para decidir se uma peça precisa ser atualizada!
A propriedade valid_from indica quando o preço se tornou válido; ela não indica quando uma peça foi modificada.
👉 Observe que a valid_from sempre é igual à data atual ou a uma data passada. Se um preço for válido em uma data futura, você não verá esse preço na resposta.
A alteração de uma peça não inclui apenas os preços. A descrição ou supersessão das peças pode ser modificada, e essas alterações são consideradas ao processar o last_changed_date.
Aqui está um cenário para ajudar você a entender.
👉 Lembre-se de que seu DMS deve chamar a Parts API diariamente. Isso não é mostrado aqui para manter o exemplo simples.
- Em 1º de setembro, os preços da peça são modificados e a data valid_from é definida para 1º de outubro.
- Seu DMS chama a Parts API em 2 de setembro com um last_changed_date de 30 de agosto:
- Os novos preços da peça não são válidos.
- Como nada mais foi alterado, a peça não é incluída na resposta.
- Em 3 de setembro, a descrição da peça foi alterada.
- Seu DMS chama a Parts API em 4 de setembro com um last_changed_date de 1º de setembro:
- A peça foi modificada, portanto ela é incluída na resposta.
- No entanto, os novos preços ainda não são válidos, então os preços atuais são usados.
- Seu DMS chama a Parts API em 4 de outubro com uma last_changed_date de 1º de outubro:
- Os novos preços são válidos, então a peça é incluída na resposta com os novos preços.
- Seu DMS chama a Parts API em 5 de outubro com uma last_changed_date de 2 de outubro:
- A peça não é incluída na resposta, pois nada mudou desde 2 de outubro.
Referência da API
curl --location 'https://qa-cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=1900-01-01&language=en-US&page=1&limit=5' \
--header 'Authorization: Bearer REPLACE_ME' curl --location 'https://cloud-api.brp.com/dcp/v4/part/779140?sales_org=1010¤cy=CAD&language=fr-CA' \
--header 'Authorization: Bearer REPLACE_ME' Tabelas de Referência
Organização de Vendas
Chave | Valor | Versão 3 | Versão 4 |
|---|---|---|---|
Canadá | 1010 | | X |
EUA | 3020 | | X |
Escandinávia | 6030 | X | |
Europa (emea) | 6050 | X | |
México | 8070 | X | |
Brasil | 8075 | X | |
Ásia-Pacífico (apac) | 7080 | X | |
Moeda
Organização de Vendas | Moeda | Versão 3 | Versão 4 |
|---|---|---|---|
1010 - Canadá | CAD | | X |
3020 - EUA | USD | | X |
6030 - Escandinávia | EUR | X | |
6030 - Escandinávia | NOK | X | |
6050 - Europa (emea) | SEK | X | |
6050 - Europa (emea) | EUR | X | |
6050 - Europa (emea) | GBP | X | |
8070 - México | MXN | X | |
8075 - Brasil | BRL | X | |
7080 - Ásia-Pacífico (apac) | AUD | X | |
7080 - Ásia-Pacífico (apac) | NZD | X | |
Idiomas
Idioma no código de idioma ISO (ISO-639-1 + ISO 3166-1)
Formato: xx-XX
xx: código de idioma em minúsculas
XX: código de país em maiúsculas
Valores de código de idioma suportados
Código | Idioma |
|---|---|
de | Alemão |
en | Inglês |
es | Espanhol |
fi | Finlandês |
fr | Francês |
it | Italiano |
nl | Holandês |
no | Norueguês |
pt | Português (Brasil) |
sv | Sueco |
Como fazer
Esta seção fornece informações sobre como obter resultados específicos com a API.
Obter a Primeira Página
Obter a primeira página do catálogo completo de peças. Neste cenário, a solicitação é feita para um concessionário canadense:
- Organização de vendas: 1010
- Moeda: CAD
- Idioma: fr-CA
A carga de resposta contém a lista de Peça recursos, o objeto links e o objeto meta. A propriedade links.previous é NULA pois esta é a primeira página. A propriedade links.next contém a URL para a próxima página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=1&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obter próxima página
Obtenha a próxima página do catálogo completo usando o links.next URL encontrada no payload da resposta.
O payload da resposta contém a lista de Peça recursos, o objeto links e o objeto meta. A propriedade links.previous contém a URL da primeira página. A propriedade links.next contém a URL da próxima página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=2&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obter Última Página
Obtenha a próxima página do catálogo completo usando o links.next URL encontrada no payload da resposta.
O payload da resposta contém a lista de Peça recursos, olinks objeto, e o meta objeto. A links.previous propriedade contém o URL da página anterior. A links.next propriedade é NULL pois esta é a última página.
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=1010¤cy=CAD&last_changed_date=1900-01-01&language=fr-CA&page=606&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Obter alterações da última semana
Obtenha a primeira página das alterações feitas no catálogo de peças nos últimos sete dias, considerando que a chamada foi feita em 16 de dezembro de 2024.
Neste cenário, a solicitação é feita para um revendedor dos EUA:
- Organização de vendas: 3020
- Moeda: USD
- Idioma: en-US
curl --location 'https://cloud-api.brp.com/dcp/v4/parts?sales_org=3020¤cy=USD&last_changed_date=2024-12-09&language=en-US&page=1&limit=2' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN'Obter Uma Peça
Obtenha uma peça específica para um revendedor dos EUA:
- Organização de vendas: 3020
- Moeda: USD
- Idioma: en-US
curl --location 'https://cloud-api.brp.com/dcp/v4/part/271001633?sales_org=3020¤cy=USD&language=en-US' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' Tratamento de Erros
Esta seção apresenta vários cenários de chamadas inadequadas ou incorretas, que resultam em mensagens de erro e resultados impróprios.
400 Requisição Inválida
O código de status 400 é geralmente observado durante o desenvolvimento e a integração e não deve ser recebido durante operações normais. A resposta retornada contém as informações necessárias para corrigir o problema.
Muitos problemas podem causar um código de status 400; os mais comuns estão listados na tabela abaixo.
Resposta | Resolução |
|---|---|
Retornado se a organização de vendas for inválida. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-1",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "falha na validação da requisição",
"payload": {
"details": [
{
"message": "Valor da instância (\"1000\") não encontrado no enum (valores possíveis: [\"6030\",\"6050\",\"8070\",\"8075\",\"7080\",\"1010\",\"3020\"]): []"
}
]
}
}
} | Certifique-se de que a organização de vendas seja uma da tabela Organização de Vendas. |
Retornado se a moeda for inválida. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-2",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "falha na validação da requisição",
"payload": {
"details": [
{
"message": "Valor da instância (\"UDS\") não encontrado no enum (valores possíveis: [\"MXN\",\"NZD\",\"AUD\",\"EUR\",\"NOK\",\"SEK\",\"GBP\",\"BRL\",\"CAD\",\"USD\"]): []"
}
]
}
}
} | Certifique-se de que a moeda seja uma da tabela Moeda. |
Retornado se o formato de idioma não for válido. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423546-1",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "falha na validação da requisição",
"payload": {
"details": [
{
"message": "Regex ECMA 262 \"^[a-z]{2}-[A-Z]{2}$\" não corresponde à string de entrada \"XX-YY\": []"
}
]
}
}
} | O formato de idioma válido é o seguinte Formato: xx-XX xx: código do idioma em minúsculas XX: código do país em maiúsculas Um formato de idioma válido deve ser inserido para produzir uma resposta adequada. |
Retornado se um parâmetro for inválido {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22696-423285-4",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "falha na validação da requisição",
"payload": {
"details": [
{
"message": "O parâmetro 'sales_org' é obrigatório, mas está ausente.: []"
}
]
}
}
} | Certifique-se de que todos os parâmetros obrigatórios sejam fornecidos e tenham um valor válido. |
Retornado quando um parâmetro obrigatório está faltando. {
"status": "400",
"id": "rrt-0e20a46609994a8ad-c-ea-22695-423701-2",
"title": "bad_request",
"meta": {
"service": "01",
"detail": "falha na validação da requisição",
"payload": {
"details": [
{\r
"message": "O parâmetro de busca 'currency' é obrigatório no caminho '/parts', mas não foi encontrado na requisição.: []"
}
]
}
}
} | Certifique-se de que todos os parâmetros obrigatórios sejam fornecidos e tenham um valor válido. |
401 Não Autorizado
O código de erro 401 Não Autorizado é retornado quando você tenta chamar a API com um access_token expirado.
Você deve obter um novo access_token com uma chamada para a API de Autenticação de Aplicativos.
O código de erro 401 Não Autorizado também é retornado se você não solicitou acesso à API criando um ticket no DCP Jira.
Quando você estiver pronto para começar a trabalhar em uma API, deve criar um ticket de certificação no Jira, conforme descrito na seção Atividades de Certificação com Jira.
Se você já começou a trabalhar em uma API e perdeu o acesso, crie um ticket de suporte conforme descrito na seção Abrir um Ticket de Suporte.
404 Não Encontrado
O código de status 404 Not Found é retornado quando o número da peça (código do produto) não é encontrado.
{
"status": "404",
"id": "rrt-06edc2039f6ce7033-b-ea-9106-103440333-3.1",
"title": "not_found",
"meta": {
"service": "07",
"detail": "Product code 222981605 not found."
}
}O revendedor pode ter cometido um erro ao inserir o número da peça. Você deve informar o erro ao usuário para que ele possa tentar novamente.
Requisitos DSP
Requisitos Funcionais
ID | Tipo | Requisito |
|---|---|---|
1 | Obrigatório | A Parts API deve ser automaticamente chamada diariamente para obter as alterações do catálogo dos últimos 2 dias. ❗ Nenhuma ação manual do concessionário deve ser necessária para atualizar o catálogo em seu DMS ❗ |
2 | Obrigatório | O catálogo de peças completo deve ser disponibilizado ao concessionário. A Parts API deve ser chamada pelo menos uma vez para recuperar o catálogo completo de peças. |
3 | Obrigatório | O concessionário deve conseguir pesquisar um número de peça específico no seu DMS e exibir o resultado na tela. |
4 | Obrigatório | Uma mensagem é exibida ao concessionário se uma peça vendável estiver sem preço. |
5 | Opcional | O concessionário pode pesquisar e navegar no catálogo de peças, filtrá-lo por tipo de peça e linha de produto, e pesquisar texto na descrição. |
6 | Opcional | A Parts API deve ser chamada mensalmente para obter as alterações dos últimos 30 dias. |
7 | Obrigatório | As medidas das peças devem ser visíveis ao concessionário. |
Atividades de Certificação
Esta seção apresenta todas as atividades de certificação e validações que devem ser concluídas para certificar a API.
Garantia de Qualidade
Os testes listados na tabela abaixo devem ser realizados com sucesso no ambiente de teste antes que você possa iniciar a fase piloto do revendedor.
ID | Teste | Resultado Esperado |
|---|---|---|
1 | O catálogo completo de peças é carregado e o DMS exibe as seguintes peças:
| O catálogo completo de peças é carregado no DMS. ❗ As medidas são visíveis para o concessionário. |
2 | O catálogo de peças é atualizado diariamente | As alterações no catálogo de peças são visíveis no DMS. |
3 | Pesquisar um número de peça específico (715009775) | Um número de peça específico pode ser pesquisado no DMS e o resultado é exibido. |
4 | Pesquisar um número de peça inválido (12345678) | O DMS permite pesquisar um número de peça específico; um erro aparecerá se o número de peça for inválido. |
5 | Pesquisar um número de peça obsoleto (204072321) | O DMS pode pesquisar um número de peça específico, e uma mensagem aparecerá se a peça estiver obsoleta. |
6 | Pesquisar um número de peça vintage (080037100) | Um número de peça específico pode ser pesquisado no DMS, e uma mensagem é exibida se a peça for vintage e não puder ser pedida através da BRP. |
Piloto do Concessionário
A tabela abaixo descreve os parâmetros e validações do piloto do concessionário.
Parâmetro | Valor |
|---|---|
Ambiente | Produção |
Número de concessionários | 1 a 3 |
Duração | 2 semanas |
Validação 1 | O catálogo de peças é atualizado diariamente |
Validação 2 | O catálogo de peças é acessível ao concessionário |
Validação 3 | Um número de peça específico pode ser pesquisado no DMS, e o resultado é exibido |
Postman
Esta seção descreve o que está disponível no Postman para explorar a API.
Ambientes
Um ambiente do Postman está disponível para testar a Parts API. Este ambiente do Postman contém as variáveis usadas pelas consultas e está configurado para conectar-se ao ambiente de teste.
Coleções
A coleção DMS - Parts contém exemplos de chamadas de API para obter o catálogo de peças ou uma peça específica.