В документации РЕСТ есть метод crm.deal.productrows.set, который это делает, но в документации разработчика нет таких упоминаний
Товарные позиции - массив вида array(array("поле"=>"значение"[, ...])[, ...]), где "поле" может принимать значения из возвращаемых методом crm.productrow.fields.
Товарные позиции сделки, существующие до момента вызова метода, будут заменены новыми. После сохранения будет произведён пересчёт суммы сделки.