# Features

Features are the feature flags or entitlements your product supports. In the Superdesk example, there are over a dozen features in total and each plan supports a different set of features as shown below.

Consider this example from our [Superdesk](/guide/getting-started/superdesk-sample-saas-co..md) sample company. Each with their own set of features.

| Starter          | Business                 | Enterprise               |
| ---------------- | ------------------------ | ------------------------ |
| *$100/user/year* | *$200/user/year*         | *$300/user/year*         |
| 5 agents         | 25 agents                | Unlimited agents         |
| Ticketing        | Ticketing                | Ticketing                |
| API              | API                      | API                      |
| Reporting        | Reporting                | Reporting                |
| Customer portal  | Customer portal          | Customer portal          |
|                  | Skill-based routing      | Skill-based routing      |
|                  | Social media integration | Social media integration |
|                  | Automation               | Automation               |
|                  |                          | Voice calling            |
|                  |                          | Multilingual support     |
|                  |                          | SLAs                     |

Whenever a new tenant is created, it must be initialized with a set features that tells the platform what the customer is allowed to do with the product. For example, if a customer signed up online for the Starter plan, the customer's new tenant must be initialized with ticketing, API, reporting and customer portal.

Every time a subscription is updated, Bunny will send a new message to the platform, telling it what features the tenant now has.

## Features kinds

There are four different kinds of features:

* **Boolean** – This simply means that plan *has* the feature
* **Feature group** – Use this to group larger number of features in different sections
* **Quantity** – Use this kind for features that have values that denote quantities.&#x20;
* **Value** – This means that when the feature is used on a plan it must also be provided with a value. For example, the feature support could have the values `standard` and `premium`.

{% hint style="info" %}
If you are using Bunny to provision tenants in your platform, it is important that you use the quantity kind for quantities so that the value shows up in the right attribute in the JSON payload.
{% endhint %}

### Units

Some features can also have a quantity. For example, if a product is priced by number of users, you would define a feature called **User** and mark it as a unit. This allows you to use the feature as a unit of measurement on product plan charges.

Each unit has a precision that determines how many decimals its price has. Typically, you would have two decimals, but for extremely low-priced units, such as messages, you might have four or six decimals.

When a quote or invoice is rendered, the number of decimals is always based on the unit with the highest precision.

If you are using Bunny's SaaS Integration, units will also be used in the communication with the SaaS environment to set user limits, report usage etc.

### Tracking usage with units

Features can be used to track usage in your platform. For example, your platform can send Bunny updates on how many users a customer has or how many text messages has been sent in a month and these updates can become the basis for usage-based billing.

You can also use feature to track other types of usage that may not be related to billing, but customer engagement. For example, a Learning Management Solution would want to track how many courses a customer has defined and how many courses are being attended each month. This could be handled by the features **Courses Created** and **Courses Attended** and be reported on in Bunny's analytics.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bunny.com/guide/tour/product-catalog/features.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
