Please use this advise carefully, as I wasn't able to check if this workflow actually works.
The customer adds or removes products to the cart
The cart is recalculated
The method PromotionService.updatePromotions(…) is called.
The result are returned. it includes the fired and the potential promotions, the entries used in the fired or potential promotions and a flag indicated of there were changes since the last evaluation.
If the cart is updated, it must be recalculated and reapplied
At the end of the checkout process the order is created using the cart.
The promotions are applied to the order by calling the PromotionService.transferPromotionsToOrder.
Now the persisted promotions or their results are returned by calling PromotionService.getOrderPromotions(…) and getPromotionResults(…)
The promotions and their results can be removed from the cart by calling PromotionService.cleanupCart(…)