The concept of bundles is split into two parts within CloudBilling.
A bundle type is a generic representation of a bundle. It specifies which products can fit into the bundle and what the associated prices and costs are for those products (both inBundle and outOfBundle rates). Furthermore, it is possible to specify whether the bundle should allow fraction values for a specific product, and the relative importance of the bundle, i.e., the sequence of when it should be considered.
For instance, you could have a Voice/SMS Bundle. This bundle would admit two products: national voice (national phone calls) and national SMS (national text messages). The former allows fractional amounts, where the latter does not (half an SMS makes no sense). If you were to also offer SMS-only bundles, you could make that of greater relative importance so that it will always be considered first. In practice, this will mean that a customer that has one of each will get his SMS's allocated to the second bundle, and voice to the first.
An actual customer bundle is a specific instance of a Bundle Type, for a particular Customer. When a customer purchases a bundle (indicated by certain bundle properties on a purchase), a Customer Bundle is recorded with some specific properties.
Consider the SMS example discussed above: a specific instance of such a bundle would have the following additional properties:
This actual bundle purchase is what is used in pricing rules. In staying with the example, if a customer has a purchase for an SMS, the Bundle rule on the SMS product will check if:
Then, depending on whether or not the usage fits in the bundle, either the specified inBundle rate is applied or the outOfBundle rate is applied.