# Create a metered feature

> For the complete machine-readable documentation index, see [llms.txt](https://apidocs.chargebee.com/llms.txt).


[Idempotency Supported](/docs/api/idempotency)

Creates a metered feature.

## Sample Request

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/metered_features \
     -u {site_api_key}:\
     -d name="API Calls" \
     -d feature_unit="api_call" \
     -d description="Number of API calls consumed by the subscription" \
     -d query="SELECT SUM(request_count) from events" \
     -d "column_definitions[column_name][0]"="request_count" \
     -d "column_definitions[data_type][0]"="NUMBER"
```

#### .NET

```dotnet
using ChargeBee.Api;
using ChargeBee.Models;

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = MeteredFeature.Create()
		.Name("API Calls")
		.FeatureUnit("api_call")
		.Description("Number of API calls consumed by the subscription")
		.Query("SELECT SUM(request_count) from events")
		.ColumnDefinitionColumnName(0, "request_count")
		.ColumnDefinitionDataType(0, ColumnDefinition.DataTypeEnum.Number)
		.Request();

Meter meter = result.Meter;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    meteredfeatureAction "github.com/chargebee/chargebee-go/v3/actions/meteredfeature"
    "github.com/chargebee/chargebee-go/v3/models/meteredfeature"
    meteredFeatureEnum "github.com/chargebee/chargebee-go/v3/models/meteredfeature/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := meteredfeatureAction.Create(&meteredfeature.CreateRequestParams{
        ColumnDefinitions : []*meteredfeature.CreateColumnDefinitionParams{
            {
                ColumnName : "request_count",
                DataType : meteredFeatureEnum.ColumnDefinitionDataTypeNumber,
            },
        },
        Name : "API Calls",
        FeatureUnit : "api_call",
        Description : "Number of API calls consumed by the subscription",
        Query : "SELECT SUM(request_count) from events",
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        Meter := res.Meter
    }
}
```

#### Go

```go
package main

import (
  "fmt"
  "github.com/chargebee/chargebee-go/v4"
)

func main() {
  config := &chargebee.ClientConfig{
    SiteName: "{site}",
    ApiKey: "{site_api_key}",
  }    
  client := chargebee.NewClient(config)
  req := &chargebee.MeteredFeatureCreateRequest{
    ColumnDefinitions : []*chargebee.MeteredFeatureCreateColumnDefinition{
        {
            ColumnName : "request_count",
            DataType : chargebee.ColumnDefinitionDataTypeNumber,
        },
    },
    Name : "API Calls",
    FeatureUnit : "api_call",
    Description : "Number of API calls consumed by the subscription",
    Query : "SELECT SUM(request_count) from events",
}
  res, err := client.MeteredFeature.Create(req)
      if err != nil {
        fmt.Println(err)
    } else {
        Meter := res.Meter
    }
}
```

#### Java

```java
import com.chargebee.*;
import com.chargebee.ListResult;
import com.chargebee.models.*;
import com.chargebee.models.enums.*;
import java.io.IOException;

public class Sample {

    public static void main(String args[]) throws IOException, Exception {
        Environment.configure("{site}", "{site_api_key}");
        Result result = MeteredFeature.create()
            .name("API Calls")
            .featureUnit("api_call")
            .description("Number of API calls consumed by the subscription")
            .query("SELECT SUM(request_count) from events")
            .columnDefinitionColumnName(0, "request_count")
            .columnDefinitionDataType(0, ColumnDefinition.DataType.NUMBER)
            .request();

        Meter meter = result.meter();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.meter.Meter;
import com.chargebee.v4.models.meteredFeature.params.MeteredFeatureCreateParams;
import com.chargebee.v4.models.meteredFeature.responses.MeteredFeatureCreateResponse;
import java.util.List;

public class MeteredFeatureCreate {

    public static void main(String[] args) {
        ChargebeeClient client = ChargebeeClient.builder()
            .apiKey("{site_api_key}")
            .siteName("{site}")
            .build();

        MeteredFeatureCreateParams.ColumnDefinitionsParams columnDefinition0 =
            MeteredFeatureCreateParams.ColumnDefinitionsParams.builder()
                .columnName("request_count")
                .dataType(MeteredFeatureCreateParams.ColumnDefinitionsParams.DataType.NUMBER)
                .build();

        List<MeteredFeatureCreateParams.ColumnDefinitionsParams> columnDefinitionsList =
            List.of(columnDefinition0);

        MeteredFeatureCreateParams params = MeteredFeatureCreateParams.builder()
            .name("API Calls")
            .featureUnit("api_call")
            .description("Number of API calls consumed by the subscription")
            .query("SELECT SUM(request_count) from events")
            .columnDefinitions(columnDefinitionsList)
            .build();

        MeteredFeatureCreateResponse response = client.meteredFeatures().create(params);

        Meter meter = response.getMeter();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

const chargebee = new Chargebee({
    site: "{site}",
    apiKey: "{site_api_key}",
});

try {
    const result = await chargebee.meteredFeature.create({
        column_definitions: [
            {
                column_name: "request_count",
                data_type: "number"
            }
        ],
        name: "API Calls",
        feature_unit: "api_call",
        description: "Number of API calls consumed by the subscription",
        query: "SELECT SUM(request_count) from events"
    });

    console.log(result);
    const meter = result.meter;
} catch (err) {
    console.log(err);
}
```

#### PHP

```php
<?php

require __DIR__ . '/vendor/autoload.php';

use Chargebee\ChargebeeClient;

$chargebee = new ChargebeeClient(options: [
    "site" => "{site}",
    "apiKey" => "{site_api_key}",
]);
$result = $chargebee->meteredFeature()->create([
    "column_definitions" => [
        [
            "column_name" => "request_count",
            "data_type" => "number"
        ]
    ],
    "name" => "API Calls",
    "feature_unit" => "api_call",
    "description" => "Number of API calls consumed by the subscription",
    "query" => "SELECT SUM(request_count) from events"
]);
$meter = $result->meter;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.MeteredFeature.create(
    cb_client.MeteredFeature.CreateParams(
        column_definitions=[
            cb_client.MeteredFeature.CreateColumnDefinitionParams(
              column_name="request_count",
              data_type=chargebee.MeteredFeature.ColumnDefinitionDataType.NUMBER
            )
        ],
        name="API Calls",
        feature_unit="api_call",
        description="Number of API calls consumed by the subscription",
        query="SELECT SUM(request_count) from events"
    )
)
meter = response.meter
```

#### Ruby

```ruby
require 'chargebee'

ChargeBee.configure(:site => "{site}",
  :api_key => "{site_api_key}")

result = ChargeBee::MeteredFeature.create({
  :name => "API Calls",
  :feature_unit => "api_call",
  :description => "Number of API calls consumed by the subscription",
  :query => "SELECT SUM(request_count) from events",
  :column_definitions => [
    {
      :column_name => "request_count",
      :data_type => "NUMBER"
    }
  ]
})

meter = result.meter
```

## Sample Response

```json
{
  "meter": {
    "id": "API-Calls",
    "name": "API Calls",
    "description": "Number of API calls consumed by the subscription",
    "type": "simple",
    "status": "active",
    "query": "SELECT SUM(request_count) from events",
    "column_definitions": [
      {
        "column_name": "request_count",
        "data_type": "number"
      },
      {..}
    ],
    "features": [
      {
        "id": "API-Calls",
        "name": "API Calls",
        "description": "Number of API calls consumed by the subscription",
        "status": "active",
        "type": "range",
        "unit": "api_call",
        "metered": true,
        "levels": [
          {
            "value": 1,
            "is_unlimited": false
          },
          {..}
        ],
        "resource_version": 1612890000000,
        "updated_at": 1612890000,
        "created_at": 1612890000,
        "object": "feature"
      },
      {..}
    ],
    "object": "meter"
  }
}
```

## URL Format

**POST** https://[site].chargebee.com/api/v2/metered_features

## Input Parameters

- `name` (required, string, max chars=50)
  A case-sensitive name for the metered feature. For example: `API Calls`, `Input Tokens`.

- `description` (optional, string, max chars=250)
  A brief description of the metered feature.

- `feature_unit` (required, string, max chars=50)
  Unit of measure for the metered feature, in singular form. It is pluralized automatically as needed. For example, `request` or `token`.

- `query` (required, string, max chars=500)
  The SQL query used to measure usage from [`usage_event`](/docs/api/usage_events) properties. For example: `SELECT SUM(api_calls) FROM events`.
  
  **Constraint**:
  
  -   The properties referenced in the query must be one of `column_definitions.column_name`.

- `column_definitions` (optional, array)
  Definitions of the columns or properties referenced by the `query`.
  - `column_name` (required, string, max chars=100)
    Name of the column or property used in the `query`.
    
    **Constraint**:
    
    -   Must be one of the [`properties`](/docs/api/usage_events#properties) of a [`usage_event`](/docs/api/usage_events) object in Chargebee.
  - `data_type` (required, enumerated string)
    Data type of the column or property.
    Possible enum values:
      - `number`
        The column or property holds a numeric value.
      - `string`
        The column or property holds a string value.

## Returns

- `meter` (Meter object)
  Resource object representing the meter for the metered feature.
