For AI agents: markdown of this page — /docs-content-en/entities/leads/products-get-single.md documentation index — /llms.txt
Get a product from a lead
GET /v1/leads/:id/products/:rowId
Returns a single lead product row by row ID.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
Parameterid (path) |
Typenumber | Requiredyes | DescriptionLead ID. List: GET /v1/leads |
ParameterrowId (path) |
Typenumber | Requiredyes | DescriptionProduct row ID. List: GET /v1/leads/:id/products |
rowId is the product row ID, not the productId from the product catalog.
Examples
curl — personal key
curl -X GET "https://vibecode.bitrix24.com/v1/leads/1001333/products/2373" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth application
curl -X GET "https://vibecode.bitrix24.com/v1/leads/1001333/products/2373" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/leads/1001333/products/2373', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
console.log('Price:', data.price)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/leads/1001333/products/2373', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Response fields
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | DescriptionAlways true on success |
Fielddata |
Typeobject | DescriptionLead product row |
Fielddata.id |
Typenumber | DescriptionProduct row ID |
Fielddata.productId |
Typenumber | DescriptionCatalog product ID |
Fielddata.productName |
Typestring | DescriptionProduct name |
Fielddata.price |
Typenumber | DescriptionUnit price |
Fielddata.quantity |
Typenumber | DescriptionQuantity |
Fielddata.discount |
Typenumber | DescriptionDiscount amount |
Fielddata.discountRate |
Typenumber | DescriptionDiscount percentage |
Fielddata.discountTypeId |
Typenumber | DescriptionDiscount type (1 — amount, 2 — percentage) |
Fielddata.taxRate |
Typenumber | null | DescriptionTax rate (%) |
Fielddata.taxIncluded |
Typeboolean | DescriptionTax included in price |
Fielddata.customized |
Typestring | DescriptionRow modification flag: Y or N |
Fielddata.priceExclusive |
Typenumber | DescriptionPrice excluding tax, with discount |
Fielddata.priceNetto |
Typenumber | DescriptionNet price |
Fielddata.priceBrutto |
Typenumber | DescriptionGross price |
Fielddata.priceAccount |
Typenumber | DescriptionPrice in the reporting currency |
Fielddata.measureCode |
Typenumber | DescriptionUnit of measure code |
Fielddata.measureName |
Typestring | DescriptionUnit of measure name |
Fielddata.sort |
Typenumber | DescriptionSort order |
Fielddata.ownerId |
Typenumber | DescriptionID of the owner entity the row belongs to |
Fielddata.ownerType |
Typestring | DescriptionRow owner type, L for a lead |
Fielddata.storeId |
Typenumber | null | DescriptionWarehouse ID. List: GET /v1/warehouses. null when inventory management is off |
Fielddata.xmlId |
Typestring | DescriptionExternal code of the row |
Fielddata.type |
Typenumber | DescriptionProduct type — the same value as the product's type in GET /v1/catalog-products/:id: 1 — simple product, 3 — parent product with variations, 7 — service |
Response example
{
"success": true,
"data": {
"id": 2373,
"ownerId": 1001333,
"ownerType": "L",
"productId": 6967,
"productName": "Parent product",
"price": 25000,
"priceAccount": 25000,
"priceExclusive": 25000,
"priceNetto": 25000,
"priceBrutto": 25000,
"quantity": 2,
"discountTypeId": 2,
"discountRate": 0,
"discount": 0,
"taxRate": null,
"taxIncluded": false,
"customized": "Y",
"measureCode": 796,
"measureName": "pcs",
"sort": 0,
"xmlId": "",
"type": 3,
"storeId": null
}
}
Error response example
404 — no product row with this rowId:
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Item not found"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_ROW_ID |
DescriptionrowId in the path is not a positive integer. The message is Product row ID must be a positive integer |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionNo product row with this rowId. The message is Item not found |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionA row with this rowId exists but belongs to another CRM record, not to lead id, or carries no owner and cannot pass the check. The message is Product row not found |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionAPI key lacks the crm scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionAPI key has no configured tokens |
| HTTP429 | CodeRATE_LIMITED |
DescriptionRate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the x-ratelimit-limit header. Retry after the delay in the Retry-After header |
For the full list of common API errors, see Errors.