For AI agents: markdown of this page — /docs-content-en/entities/deals/products-get-single.md documentation index — /llms.txt

Get a product from a deal

GET /v1/deals/:id/products/:rowId

Returns a single deal product row by row ID.

Parameters

Parameter Type Required Description
id (path) number yes Deal ID
rowId (path) number yes Product row ID (from the add or list response)

rowId is the product row ID, not the productId from the product catalog.

Examples

curl — personal key

Terminal
curl -X GET "https://vibecode.bitrix24.com/v1/deals/741/products/1471" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth application

Terminal
curl -X GET "https://vibecode.bitrix24.com/v1/deals/741/products/1471" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/deals/741/products/1471', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Price:', data.price)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/deals/741/products/1471', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()

Response fields

Field Type Description
data.id number Product row ID
data.productId number Catalog product ID
data.productName string Product name
data.price number Unit price
data.quantity number Quantity
data.discount number Discount amount
data.discountRate number Discount percentage
data.discountTypeId number Discount type (1 — amount, 2 — percentage)
data.taxRate number | null Tax rate (%)
data.taxIncluded boolean Tax included in price
data.priceExclusive number Price excluding tax, with discount
data.priceNetto number Net price
data.priceBrutto number Gross price
data.priceAccount number Price in the reporting currency
data.measureCode number Unit of measure code
data.measureName string Unit of measure name
data.sort number Sort order
data.ownerId number ID of the owner entity the row belongs to
data.ownerType string Row owner type, D for a deal
data.storeId number | null Warehouse ID. List: GET /v1/warehouses. null when inventory management is off

Response example

JSON
{
  "success": true,
  "data": {
    "id": 1471,
    "productId": 1,
    "productName": "Server equipment",
    "price": 5000,
    "priceAccount": 5000,
    "priceExclusive": 5000,
    "priceNetto": 5000,
    "priceBrutto": 5000,
    "quantity": 3,
    "discountTypeId": 2,
    "discountRate": 0,
    "discount": 0,
    "taxRate": null,
    "taxIncluded": false,
    "customized": "Y",
    "measureCode": 796,
    "measureName": "pcs",
    "sort": 0,
    "ownerId": 741,
    "ownerType": "D",
    "storeId": 3,
    "xmlId": "sale_basket_995",
    "type": 1
  }
}

Error response example

404 — deal or product row not found:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Item not found"
  }
}

Errors

HTTP Code Description
404 ENTITY_NOT_FOUND Deal or product row not found
403 SCOPE_DENIED API key lacks the crm scope
401 TOKEN_MISSING API key has no configured tokens
429 RATE_LIMITED Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the x-ratelimit-limit header (the cap is divided across replicas). Retry after the delay in the Retry-After header

Full list of common API errors — Errors.

See also