---
title: "Criar produto na negociação"
method: POST
path: "/deals/{deal_id}/products"
tags: ["crm-v2-deal-products"]
---

# Criar produto na negociação

`POST /deals/{deal_id}/products`

## Request

- Base URL: `https://api.rd.services/crm/v2`
- URL: `https://api.rd.services/crm/v2/deals/{deal_id}/products`
- Auth: OAuth 2
  - Authorization code: `/oauth/authorize`
  - Token URL: `/oauth/token`

Adiciona um produto do catálogo a uma negociação existente, especificando quantidade, preço e desconto. Permite construir ou modificar a composição de uma venda programaticamente.

O array opcional `deal_product_custom_fields` copia para a linha os campos personalizados do produto. Na resposta, cada item traz o valor da linha e a definição congelada no momento em que o produto foi adicionado — não o catálogo atual. No envio, apenas `custom_field_id` e `value` são considerados.

## Path parameters

- `deal_id` string, required

## Request body

- object
  - `data` object: Dados do recurso relacionado.
    - `id` string: Identificador único.
    - `price` number, float: Preço.
    - `quantity` number, float: Quantidade.
    - `discount_type` 'amount' | 'percentage': Tipo de desconto.
    - `discount` number, float: Desconto.
    - `total_price` number, float: Total da linha. Quando há campos personalizados `monetary`/`percentage` com `calculation_action` `add` ou `subtract` no snapshot, o valor já inclui esses ajustes.
    - `billing_frequency` 'one-time' | 'monthly' | 'annually': Recorrência.
    - `product_id` string: ID do produto.
    - `deal_product_custom_fields` DealProductCustomField[]: Campos personalizados do produto na negociação. Na resposta, cada item traz o valor da linha e a definição congelada no momento em que o produto foi adicionado à negociação — não o catálogo atual do produto. No envio, apenas `custom_field_id` e `value` são considerados, e o valor só é aplicado em campo que estava editável na negociação quando o produto foi adicionado. Campo não editável, ou que não existe no produto, é ignorado. Omitir o array mantém os valores já gravados na linha.
      - `custom_field_id` string: Identificador do campo personalizado de produto.
      - `value` unknown
      - `label` string: Nome do campo no momento em que o produto foi adicionado.
      - `type` string: Tipo do campo no momento em que o produto foi adicionado.
      - `opts` string[]: Opções do campo no momento em que o produto foi adicionado.
      - `editable_on_deal` boolean: Se o valor podia ser alterado na linha da negociação.
      - `allow_new` boolean: Se o campo permitia nova opção no momento em que o produto foi adicionado. A opção nova entra no snapshot da linha e, se o campo ainda existir, também no catálogo do produto.
      - `slug` string: Slug do campo no momento em que o produto foi adicionado.
      - `calculation_action` 'none' | 'add' | 'subtract': Ação de cálculo no total da linha no momento em que o produto foi adicionado (`none`, `add` ou `subtract`).
    - `created_at` string, date-time: Data de criação.
    - `updated_at` string, date-time: Data de atualização.

## Response `201`

Created

- object
  - `data` object: Dados do recurso relacionado.
    - `id` string: Identificador único.
    - `price` number, float: Preço.
    - `quantity` number, float: Quantidade.
    - `discount_type` 'amount' | 'percentage': Tipo de desconto.
    - `discount` number, float: Desconto.
    - `total_price` number, float: Total da linha. Quando há campos personalizados `monetary`/`percentage` com `calculation_action` `add` ou `subtract` no snapshot, o valor já inclui esses ajustes.
    - `billing_frequency` 'one-time' | 'monthly' | 'annually': Recorrência.
    - `product_id` string: ID do produto.
    - `deal_product_custom_fields` DealProductCustomField[]: Campos personalizados do produto na negociação. Na resposta, cada item traz o valor da linha e a definição congelada no momento em que o produto foi adicionado à negociação — não o catálogo atual do produto. No envio, apenas `custom_field_id` e `value` são considerados, e o valor só é aplicado em campo que estava editável na negociação quando o produto foi adicionado. Campo não editável, ou que não existe no produto, é ignorado. Omitir o array mantém os valores já gravados na linha.
      - `custom_field_id` string: Identificador do campo personalizado de produto.
      - `value` unknown
      - `label` string: Nome do campo no momento em que o produto foi adicionado.
      - `type` string: Tipo do campo no momento em que o produto foi adicionado.
      - `opts` string[]: Opções do campo no momento em que o produto foi adicionado.
      - `editable_on_deal` boolean: Se o valor podia ser alterado na linha da negociação.
      - `allow_new` boolean: Se o campo permitia nova opção no momento em que o produto foi adicionado. A opção nova entra no snapshot da linha e, se o campo ainda existir, também no catálogo do produto.
      - `slug` string: Slug do campo no momento em que o produto foi adicionado.
      - `calculation_action` 'none' | 'add' | 'subtract': Ação de cálculo no total da linha no momento em que o produto foi adicionado (`none`, `add` ou `subtract`).
    - `created_at` string, date-time: Data de criação.
    - `updated_at` string, date-time: Data de atualização.

## Other responses

- `400`: A requisição está malformada e não consegue ser processada.
- `401`: O token da API está ausente ou inválido.
- `403`: O token não tem permissão para acessar o recurso solicitado.
- `422`: A entidade não pode ser processada.
- `429`: O limite de requisições foi excedido.
- `500`: Erro interno ou inesperado no servidor.

---

[API](https://skmtc.dev/rdstation/apis/rd-station-crm-api-v2.md) - [All operations](https://skmtc.dev/rdstation/apis/rd-station-crm-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/rdstation/apis/rd-station-crm-api-v2/revisions/10d0a25b8c54?raw)
