Price Lists
ADVANCED TOPIC
This section is not necessary for out-of-the-box basic usage of the Octane platform. We recommend going through the other guides first before reading this section.
Octane lets you charge your customers for metered usage by creating Metered Components. A metered component is specified on a Price Plan and is a pricing scheme attached to a meter (as seen in the picture below). "Price Lists" extend this paradigm by allowing you to charge on the specific primary labels attached to the given meter. Price Lists are defined by uploading a CSV, allowing for custom pricing on many combinations of labels and their values. Price Lists can be specified in JSON format and uploaded directly to the API.

Let's say we run a car rental company, and assume we wanted to price based on hours driven in each car. Our cars have labels for two distinct qualities: the type of car and the type of roof. Here is an example pricing structure we might use:
Prices | Car Type | Roof Type |
$9 | Bugatti | Convertible |
$5 | BMW | Regular |
In our portal the above table corresponds to the below CSV that you would upload when creating a price plan:
The meter in question here, “Car Meter” has two primary labels “CAR_TYPE” and “ROOF_TYPE”. For the metered usage attached to Bugatti Convertibles (i.e., “CAR_TYPE”: “Bugatti” and “ROOF_TYPE”: “Convertible”) we charge $9, whereas for BMWs with Roofs (i.e., “CAR_TYPE”: “BMW” and “ROOF_TYPE”: “Regular”) we charge $5. These flat $9 and $5 quantities are examples of “flat” pricing. (Note the csv values are in cents, not dollars)
The CSV upload process also supports more complex pricing schemes than FLAT. We support TIERED, STAIRSTEP, & VOLUME. In order to express these cap-based price schemes you must, instead of the single price above, insert a json list of prices with caps. Let’s say that usage is attached to a meter with the primary label “car_type”
In this example, for usage of the car type BMW and roof type regular, there is a tiered price scheme: for 0-100 measurements, the price is .80 per measurement; for 101-200 measurements, the price is .60 per measurement". Beyond that it is .30 per measurement.
The way we would translate the above car-type-pricing to a price list, pricing on “car_type” is below. For other unspecified car_type’s we charge 0$ (as discussed below in the miscellaneous section)
In all the cap-based pricing schemes (i.e., volume, stairstep, & tiered) it’s important to note that the order of the (price, cap) tuples defines the ordering of the buckets.
To specify a price change after a minimum charge is hit, add a post_minimum_charge_percentage_change column with the percentage change that should be applied for each row (e.g., 25 for a +25% price increase). Percentage changes can only be applied when using a FLAT price scheme.
- When creating price lists ensure that the labels you are specifying in the upload process are a strict subset of the primary labels on the metered component. The upload will error out otherwise.
- A price must be set in each row & must be nonnegative.
- We currently support uploading a maximum of 1000 rows in a given price list.
- Uncategorized usage will be billed as $0 on invoices.
- The price lists upload process only accepts ASCII quotes, so UNICODE quotation marks (like Apple’s default quotes in sticky notes, for example), will result in an error upon upload.
- Dollar figures in the price list csv are represented in cents, not dollars.