# Create an addon

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


[Idempotency Supported](/docs/api/v2/pcv-1/idempotency)

Create a new addon.

## Sample Request

### Default

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/addons \
     -u {site_api_key}:\
     -d id="sms_pack" \
     -d name="Sms Pack" \
     -d invoice_name="sample data pack" \
     -d charge_type="RECURRING" \
     -d price=200 \
     -d period=1 \
     -d pricing_model="FLAT_FEE" \
     -d period_unit="MONTH"
```

#### .NET

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

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = Addon.Create()
		.Id("sms_pack")
		.Name("Sms Pack")
		.InvoiceName("sample data pack")
		.ChargeType(Addon.ChargeTypeEnum.Recurring)
		.Price(200)
		.Period(1)
		.PricingModel(PricingModelEnum.FlatFee)
		.PeriodUnit(Addon.PeriodUnitEnum.Month)
		.Request();

Addon addon = result.Addon;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    addonAction "github.com/chargebee/chargebee-go/v3/actions/addon"
    "github.com/chargebee/chargebee-go/v3/models/addon"
    addonEnum "github.com/chargebee/chargebee-go/v3/models/addon/enum"
    enum "github.com/chargebee/chargebee-go/v3/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := addonAction.Create(&addon.CreateRequestParams{
        Id : "sms_pack",
        Name : "Sms Pack",
        InvoiceName : "sample data pack",
        ChargeType : addonEnum.ChargeTypeRecurring,
        Price : chargebee.Int64(200),
        Period : chargebee.Int32(1),
        PricingModel : enum.PricingModelFlatFee,
        PeriodUnit : addonEnum.PeriodUnitMonth,
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        Addon := res.Addon
    }
}
```

#### 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.AddonCreateRequest{
    Id : "sms_pack",
    Name : "Sms Pack",
    InvoiceName : "sample data pack",
    ChargeType : chargebee.AddonChargeTypeRecurring,
    Price : chargebee.Int64(200),
    Period : chargebee.Int32(1),
    PricingModel : chargebee.PricingModelFlatFee,
    PeriodUnit : chargebee.AddonPeriodUnitMonth,
}
  res, err := client.Addon.Create(req)
      if err != nil {
        fmt.Println(err)
    } else {
        Addon := res.Addon
    }
}
```

#### 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 = Addon.create()
            .id("sms_pack")
            .name("Sms Pack")
            .invoiceName("sample data pack")
            .chargeType(Addon.ChargeType.RECURRING)
            .price(200L)
            .period(1)
            .pricingModel(PricingModel.FLAT_FEE)
            .periodUnit(Addon.PeriodUnit.MONTH)
            .request();

        Addon addon = result.addon();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.addon.Addon;
import com.chargebee.v4.models.addon.params.AddonCreateParams;
import com.chargebee.v4.models.addon.responses.AddonCreateResponse;

public class AddonCreate {

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

        AddonCreateParams params = AddonCreateParams.builder()
            .id("sms_pack")
            .name("Sms Pack")
            .invoiceName("sample data pack")
            .chargeType(AddonCreateParams.ChargeType.RECURRING)
            .price(200L)
            .period(1)
            .pricingModel(AddonCreateParams.PricingModel.FLAT_FEE)
            .periodUnit(AddonCreateParams.PeriodUnit.MONTH)
            .build();

        AddonCreateResponse response = client.addons().create(params);

        Addon addon = response.getAddon();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

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

try {
    const result = await chargebee.addon.create({
        id: "sms_pack",
        name: "Sms Pack",
        invoice_name: "sample data pack",
        charge_type: "recurring",
        price: 200,
        period: 1,
        pricing_model: "flat_fee",
        period_unit: "month"
    });

    console.log(result);
    const addon = result.addon;
} 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->addon()->create([
    "id" => "sms_pack",
    "name" => "Sms Pack",
    "invoice_name" => "sample data pack",
    "charge_type" => "recurring",
    "price" => 200,
    "period" => 1,
    "pricing_model" => "flat_fee",
    "period_unit" => "month"
]);
$addon = $result->addon;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.Addon.create(
    cb_client.Addon.CreateParams(
        id="sms_pack",
        name="Sms Pack",
        invoice_name="sample data pack",
        charge_type=chargebee.Addon.ChargeType.RECURRING,
        price=200,
        period=1,
        pricing_model=chargebee.PricingModel.FLAT_FEE,
        period_unit=chargebee.Addon.PeriodUnit.MONTH
    )
)
addon = response.addon
```

#### Ruby

```ruby
require 'chargebee'

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

result = ChargeBee::Addon.create({
  :id => "sms_pack",
  :name => "Sms Pack",
  :invoice_name => "sample data pack",
  :charge_type => "RECURRING",
  :price => 200,
  :period => 1,
  :pricing_model => "FLAT_FEE",
  :period_unit => "MONTH"
})

addon = result.addon
```

### creates an addon with tiered pricing model

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/addons \
     -u {site_api_key}:\
     -d id="tiered_addon" \
     -d name="Tiered Addon" \
     -d charge_type="RECURRING" \
     -d pricing_model="TIERED" \
     -d period_unit="MONTH" \
     -d period=1 \
     -d "tiers[starting_unit][0]"=1 \
     -d "tiers[ending_unit][0]"=10 \
     -d "tiers[price][0]"=100 \
     -d "tiers[starting_unit][1]"=11 \
     -d "tiers[ending_unit][1]"=20 \
     -d "tiers[price][1]"=300 \
     -d "tiers[starting_unit][2]"=21 \
     -d "tiers[price][2]"=500
```

#### .NET

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

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = Addon.Create()
		.Id("tiered_addon")
		.Name("Tiered Addon")
		.ChargeType(Addon.ChargeTypeEnum.Recurring)
		.PricingModel(PricingModelEnum.Tiered)
		.PeriodUnit(Addon.PeriodUnitEnum.Month)
		.Period(1)
		.TierStartingUnit(0, 1)
		.TierEndingUnit(0, 10)
		.TierPrice(0, 100)
		.TierStartingUnit(1, 11)
		.TierEndingUnit(1, 20)
		.TierPrice(1, 300)
		.TierStartingUnit(2, 21)
		.TierPrice(2, 500)
		.Request();

Addon addon = result.Addon;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    addonAction "github.com/chargebee/chargebee-go/v3/actions/addon"
    "github.com/chargebee/chargebee-go/v3/models/addon"
    addonEnum "github.com/chargebee/chargebee-go/v3/models/addon/enum"
    enum "github.com/chargebee/chargebee-go/v3/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := addonAction.Create(&addon.CreateRequestParams{
        Tiers : []*addon.CreateTierParams{
            {
                StartingUnit : chargebee.Int32(1),
                EndingUnit : chargebee.Int32(10),
                Price : chargebee.Int64(100),
            },
            {
                StartingUnit : chargebee.Int32(11),
                EndingUnit : chargebee.Int32(20),
                Price : chargebee.Int64(300),
            },
            {
                StartingUnit : chargebee.Int32(21),
                Price : chargebee.Int64(500),
            },
        },
        Id : "tiered_addon",
        Name : "Tiered Addon",
        ChargeType : addonEnum.ChargeTypeRecurring,
        PricingModel : enum.PricingModelTiered,
        PeriodUnit : addonEnum.PeriodUnitMonth,
        Period : chargebee.Int32(1),
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        Addon := res.Addon
    }
}
```

#### 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.AddonCreateRequest{
    Tiers : []*chargebee.AddonCreateTier{
        {
            StartingUnit : chargebee.Int32(1),
            EndingUnit : chargebee.Int32(10),
            Price : chargebee.Int64(100),
        },
        {
            StartingUnit : chargebee.Int32(11),
            EndingUnit : chargebee.Int32(20),
            Price : chargebee.Int64(300),
        },
        {
            StartingUnit : chargebee.Int32(21),
            Price : chargebee.Int64(500),
        },
    },
    Id : "tiered_addon",
    Name : "Tiered Addon",
    ChargeType : chargebee.AddonChargeTypeRecurring,
    PricingModel : chargebee.PricingModelTiered,
    PeriodUnit : chargebee.AddonPeriodUnitMonth,
    Period : chargebee.Int32(1),
}
  res, err := client.Addon.Create(req)
      if err != nil {
        fmt.Println(err)
    } else {
        Addon := res.Addon
    }
}
```

#### 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 = Addon.create()
            .id("tiered_addon")
            .name("Tiered Addon")
            .chargeType(Addon.ChargeType.RECURRING)
            .pricingModel(PricingModel.TIERED)
            .periodUnit(Addon.PeriodUnit.MONTH)
            .period(1)
            .tierStartingUnit(0, 1)
            .tierEndingUnit(0, 10)
            .tierPrice(0, 100L)
            .tierStartingUnit(1, 11)
            .tierEndingUnit(1, 20)
            .tierPrice(1, 300L)
            .tierStartingUnit(2, 21)
            .tierPrice(2, 500L)
            .request();

        Addon addon = result.addon();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.addon.Addon;
import com.chargebee.v4.models.addon.params.AddonCreateParams;
import com.chargebee.v4.models.addon.responses.AddonCreateResponse;
import java.util.List;

public class AddonCreate {

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

        AddonCreateParams.TiersParams tier0 =
            AddonCreateParams.TiersParams.builder()
                .startingUnit(1)
                .endingUnit(10)
                .price(100L)
                .build();

        AddonCreateParams.TiersParams tier1 =
            AddonCreateParams.TiersParams.builder()
                .startingUnit(11)
                .endingUnit(20)
                .price(300L)
                .build();

        AddonCreateParams.TiersParams tier2 =
            AddonCreateParams.TiersParams.builder()
                .startingUnit(21)
                .price(500L)
                .build();

        List<AddonCreateParams.TiersParams> tiersList =
            List.of(tier0, tier1, tier2);

        AddonCreateParams params = AddonCreateParams.builder()
            .id("tiered_addon")
            .name("Tiered Addon")
            .chargeType(AddonCreateParams.ChargeType.RECURRING)
            .pricingModel(AddonCreateParams.PricingModel.TIERED)
            .periodUnit(AddonCreateParams.PeriodUnit.MONTH)
            .period(1)
            .tiers(tiersList)
            .build();

        AddonCreateResponse response = client.addons().create(params);

        Addon addon = response.getAddon();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

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

try {
    const result = await chargebee.addon.create({
        tiers: [
            {
                starting_unit: 1,
                ending_unit: 10,
                price: 100
            },
            {
                starting_unit: 11,
                ending_unit: 20,
                price: 300
            },
            {
                starting_unit: 21,
                price: 500
            }
        ],
        id: "tiered_addon",
        name: "Tiered Addon",
        charge_type: "recurring",
        pricing_model: "tiered",
        period_unit: "month",
        period: 1
    });

    console.log(result);
    const addon = result.addon;
} 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->addon()->create([
    "tiers" => [
        [
            "starting_unit" => 1,
            "ending_unit" => 10,
            "price" => 100
        ],
        [
            "starting_unit" => 11,
            "ending_unit" => 20,
            "price" => 300
        ],
        [
            "starting_unit" => 21,
            "price" => 500
        ]
    ],
    "id" => "tiered_addon",
    "name" => "Tiered Addon",
    "charge_type" => "recurring",
    "pricing_model" => "tiered",
    "period_unit" => "month",
    "period" => 1
]);
$addon = $result->addon;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.Addon.create(
    cb_client.Addon.CreateParams(
        tiers=[
            cb_client.Addon.CreateTierParams(
              starting_unit=1,
              ending_unit=10,
              price=100
            ),
            cb_client.Addon.CreateTierParams(
              starting_unit=11,
              ending_unit=20,
              price=300
            ),
            cb_client.Addon.CreateTierParams(
              starting_unit=21,
              price=500
            )
        ],
        id="tiered_addon",
        name="Tiered Addon",
        charge_type=chargebee.Addon.ChargeType.RECURRING,
        pricing_model=chargebee.PricingModel.TIERED,
        period_unit=chargebee.Addon.PeriodUnit.MONTH,
        period=1
    )
)
addon = response.addon
```

#### Ruby

```ruby
require 'chargebee'

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

result = ChargeBee::Addon.create({
  :id => "tiered_addon",
  :name => "Tiered Addon",
  :charge_type => "RECURRING",
  :pricing_model => "TIERED",
  :period_unit => "MONTH",
  :period => 1,
  :tiers => [
    {
      :starting_unit => 1,
      :ending_unit => 10,
      :price => 100
    },
    {
      :starting_unit => 11,
      :ending_unit => 20,
      :price => 300
    },
    {
      :starting_unit => 21,
      :price => 500
    }
  ]
})

addon = result.addon
```

## Sample Response

```json
{
  "addon": {
    "charge_type": "recurring",
    "currency_code": "USD",
    "enabled_in_portal": true,
    "id": "sms_pack",
    "invoice_name": "sample data pack",
    "is_shippable": false,
    "name": "Sms Pack",
    "object": "addon",
    "period": 1,
    "period_unit": "month",
    "price": 200,
    "pricing_model": "flat_fee",
    "resource_version": 1517505775000,
    "show_description_in_invoices": false,
    "show_description_in_quotes": false,
    "status": "active",
    "taxable": true,
    "type": "on_off",
    "updated_at": 1517505775
  }
}
```

## URL Format

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

## Input Parameters

- `id` (required, string, max chars=100)
  A unique ID for your system to identify the addon.

- `name` (required, string, max chars=100)
  The display name used in web interface for identifying the addon.

- `invoice_name` (optional, string, max chars=100)
  Display name used in invoice. If it is not configured then name is used in invoice.

- `description` (optional, string, max chars=2000)
  Description about the addon to show in the hosted pages & customer portal. This description will not be shown if multiple addons are added. **Note:**
  
  If your input contains characters that are subjected to sanitization (like incomplete HTML tags), the sanitization process might increase the length of your input. If the sanitized input exceeds the limit, your request will be rejected.

- `charge_type` (required, enumerated string, default=recurring)
  Type of charge.
  Possible enum values:
    - `recurring`
      Charges are automatically applied in sync with the billing frequency of subscription.
    - `non_recurring`
      Charged immediately and only once every time it is applied.

- `price` (optional, in cents, min=0)
  Addon price is calculated based on the addon type and charge type. [Learn more](https://www.chargebee.com/docs/addons.html#charge-type-and-pricing). The unit depends on the [type of currency](/docs/api/getting-started) .

- `currency_code` (required if Multicurrency is enabled, string, max chars=3)
  The currency code (ISO 4217 format) of the addon.

- `period` (optional, integer, min=1)
  Applicable only for recurring-addons. Along with 'period\_unit' decides the term-price of this addon.

- `period_unit` (optional, enumerated string)
  Applicable only for recurring-addons. Along with 'period' decides the term-price of this addon.
  Possible enum values:
    - `day`
      Charge based on Day(S)
    - `week`
      Charge based on week(s)
    - `month`
      Charge based on month(s)
    - `year`
      Charge based on year(s)
    - `not_applicable`
      not applicable for this addon

- `pricing_model` (optional, enumerated string)
  Defines how the charges for the addons are calculated.
  Possible enum values:
    - `flat_fee`
      A fixed price that is not quantity-based.
    - `per_unit`
      A fixed price per unit quantity.
    - `tiered`
      There are quantity tiers for which per unit prices are set. Quantities are purchased from successive tiers.
    - `volume`
      The per unit price is based on the tier that the total quantity falls in.
    - `stairstep`
      A quantity-based pricing scheme. The item is charged a fixed price based on the tier that the total quantity falls in.

- `unit` (optional, string, max chars=30)
  Specifies the type of quantity. For example, if the addon price is $10 and 'agent' is the unit of measure, the addon will be $10/agent. Applicable only for quantity type addons.

- `enabled_in_portal` (optional, boolean, default=true)
  If enabled, customers can select this addon using the 'Change Subscription' option in the customer portal.

- `taxable` (optional, boolean, default=true)
  Specifies whether taxes apply to this addon. This value is set and returned even if [Taxes](https://www.chargebee.com/docs/tax.html) have been disabled in Chargebee. However, the value is effective only while Taxes are enabled.

- `tax_profile_id` (optional, string, max chars=50)
  Tax profile of the addon.

- `avalara_sale_type` (optional, enumerated string)
  Indicates the type of sale carried out. This is applicable only if you use [Chargebee's AvaTax for Communications](https://www.chargebee.com/docs/avatax-for-communication.html) integration.
  Possible enum values:
    - `wholesale`
      Transaction is a sale to another company that will resell your product or service to another consumer
    - `retail`
      Transaction is a sale to an end user
    - `consumed`
      Transaction is for an item that is consumed directly
    - `vendor_use`
      Transaction is for an item that is subject to vendor use tax

- `avalara_transaction_type` (optional, integer)
  Indicates the type of product to be taxed. Values for this field can be taken from Avalara. This is applicable only if you use [Chargebee's AvaTax for Communications](https://www.chargebee.com/docs/avatax-for-communication.html) integration.

- `avalara_service_type` (optional, integer)
  Indicates the type of service for the product to be taxed. Values for this field can be taken from Avalara. This is applicable only if you use [Chargebee's AvaTax for Communications](https://www.chargebee.com/docs/avatax-for-communication.html) integration.

- `tax_code` (optional, string, max chars=50)
  The Avalara tax codes to which items are mapped to should be provided here. Applicable only if you use Chargebee's [AvaTax for Sales integration](https://www.chargebee.com/docs/avalara.html) .

- `hsn_code` (optional, string, max chars=50)
  The [HSN code](https://cbic-gst.gov.in/gst-goods-services-rates.html) to which the item is mapped for calculating the customer's tax in India. Applicable only when both of the following conditions are true:
  
  -   [**India**](https://www.chargebee.com/docs/indian-gst.html#configuring-indian-gst) has been enabled as a **Tax Region**. (An error is returned when this condition is not true.)
  -   The [**AvaTax for Sales** integration](https://www.chargebee.com/docs/avalara.html) has been enabled in Chargebee.

- `taxjar_product_code` (optional, string, max chars=50)
  The TaxJar product codes to which items are mapped to should be provided here. Applicable only if you use Chargebee's [TaxJar integration](https://www.chargebee.com/docs/taxjar.html) .

- `invoice_notes` (optional, string, max chars=2000)
  A customer-facing note added to all invoices associated with this API resource. This note becomes one among [all the notes](/docs/api/invoices/invoice-object#notes) displayed on the invoice PDF.

- `meta_data` (optional, jsonobject)
  A collection of key-value pairs that provides extra information about the addon.
  
  **Note:** There's a character limit of 65,535.
  
  [Learn more](/docs/api/v2/pcv-1/advanced-features) .

- `sku` (optional, string, max chars=100)
  The field is used as Product name/code in your third party accounting application. Chargebee will use it as an alternate name in your accounting application.

- `accounting_code` (optional, string, max chars=100)
  This field is to capture the Account code setup in your Accounting system for integration purposes only.

- `accounting_category1` (optional, string, max chars=100)
  Used exclusively with the following [accounting integrations](https://www.chargebee.com/docs/1.0/finance-integration-index.html )
  
  -   [**Xero:**](https://www.chargebee.com/docs/1.0/xero.html ) If you've categorized your products in Xero, provide the category name and option. Use the format: `:` . For example:`Location: Singapore.`
  -   [**QuickBooks:**](https://www.chargebee.com/docs/1.0/quickbooks.html ) If you've categorized your product sales in QuickBooks according to Classes, provide the class name here. Use the following format: `::...`
  -   [**NetSuite:**](https://www.chargebee.com/docs/1.0/netsuite.html ) If you've categorized your products in NetSuite under Classes, provide the class name here. Use the following format: `: : ....` For example: `Services : Plan.`
  -   [**Intacct:**](https://www.chargebee.com/docs/1.0/intacct.html ) If you've classified your products in Intacct under Locations, provide the name of the Location here.

- `accounting_category2` (optional, string, max chars=100)
  Used exclusively with the following [accounting integrations](https://www.chargebee.com/docs/1.0/finance-integration-index.html )
  
  -   [**Xero:**](https://www.chargebee.com/docs/1.0/xero.html ) If you've categorized your products in Xero, then provide the second category name and option here. Use the format: `: ....` For example, `Region: South`
  -   [**QuickBooks:**](https://www.chargebee.com/docs/1.0/quickbooks.html ) If you've categorized your product sales in QuickBooks according to Location, provide the Location name here. Use the following format: `::....` For example: `Location: North America: Canada`
  -   [**NetSuite:**](https://www.chargebee.com/docs/1.0/netsuite.html ) If you've categorized your products in NetSuite under Locations, provide the location name here. Use the following format `: : ....` For example: `NA:US:CA`
  -   [**Intacct:**](https://www.chargebee.com/docs/1.0/intacct.html ) If you've classified your products in Intacct under Dimensions, provide the value of the Dimension here.

- `accounting_category3` (optional, string, max chars=100)
  Used exclusively with the following [accounting integrations](https://www.chargebee.com/docs/1.0/finance-integration-index.html )
  
  -   [**NetSuite:**](https://www.chargebee.com/docs/1.0/netsuite.html ) If you've categorized your products in NetSuite under Departments, pass the department name here. Use the following format: `: : ....` For example: `Production: Assembly.`
  -   [**Intacct:**](https://www.chargebee.com/docs/1.0/intacct.html ) If you've classified your products in Intacct under multiple Dimensions, provide the value of the second Dimension here. .

- `accounting_category4` (optional, string, max chars=100)
  Used exclusively with the following [accounting integrations](https://www.chargebee.com/docs/1.0/finance-integration-index.html )
  
  -   [**NetSuite:**](https://www.chargebee.com/docs/1.0/netsuite.html ) Provide the "Revenue Recognition Rule Id" for the product from NetSuite.
  -   [**Intacct:**](https://www.chargebee.com/docs/1.0/intacct.html ) If you have configured "Revenue Recognition Templates" for products in Intacct, provide the template ID for the product. .

- `is_shippable` (optional, boolean, default=false)
  If enabled, charges for this plan/addon will be added to orders.

- `shipping_frequency_period` (optional, integer, min=1)
  Defines the shipping frequency. Example: to bill customer every 2 weeks, provide "2" here.

- `shipping_frequency_period_unit` (optional, enumerated string)
  Defines the shipping frequency in association with shipping period.
  Possible enum values:
    - `year`
      Ship based on year(s)
    - `month`
      Ship based on month(s)
    - `week`
      Ship based on week(s)
    - `day`
      Ship based on day(s)

- `included_in_mrr` (optional, boolean)
  The addon is included in MRR calculations for your site. This attribute is only applicable for addons of `charge_type = non_recurring` and when the feature is enabled in Chargebee. Note: If the site-level setting is to exclude non-recurring addons from MRR calculations, this value is always returned `false` .

- `show_description_in_invoices` (optional, boolean, default=false)
  Whether the [addon description](/docs/api/v2/pcv-1/addons/addon-object) should be shown on [invoice PDFs](/docs/api/invoices/retrieve-invoice-as-pdf). If this Boolean is changed, only invoices generated (or [regenerated](https://www.chargebee.com/docs/invoice-operations.html#actions-for-payment-due-not-paid-invoices_regenerate-invoice) ) after the change are affected; past invoices are not.

- `show_description_in_quotes` (optional, boolean, default=false)
  Whether the [addon description](/docs/api/v2/pcv-1/addons/addon-object) should be shown on [quote PDFs](/docs/api/quotes/retrieve-quote-as-pdf). If this Boolean is changed, only quotes created after the change are affected; past quotes are not.

- `price_in_decimal` (optional, string, max chars=39)
  The price of the addon when the `pricing_model` is `flat_fee`. When the pricing model is `per_unit` , it is the price per unit quantity of the item. Not applicable for the other pricing models. The value is in decimal and in major units of the currency. Also, this is only applicable when [multi-decimal pricing](/docs/api/v2/pcv-1/currencies) is enabled.
  
  This price is for the `period` of the addon. When attached to a plan, the addon is billed for the billing period of the plan. Learn more.

- `proration_type` (optional, enumerated string, default=site_default)
  **Note** Applicable only for addons with `[pricing_model](/docs/api/v2/pcv-1/addons/addon-object#pricing_model)` = `per_unit`.
  
  Specifies how to manage charges or credits for the addon during a [subscription update](/docs/api/v2/pcv-1/subscriptions/update-a-subscription) or [estimating](/docs/api/v2/pcv-1/estimates/update-subscription-estimate) a subscription update.
  Possible enum values:
    - `site_default`
      Use the [site-wide proration setting](https://www.chargebee.com/docs/1.0/proration.html#proration-for-subscription-change) .
    - `partial_term`
      Prorate the charges or credits for the rest of the current term.
    - `full_term`
      Charge the full price of the addon item price or give the full credit. Don't apply any proration.

- `status` (optional, enumerated string, default=active)
  Status of the addon.
  Possible enum values:
    - `active`
      Only active addons can be applied to subscriptions
    - `archived`
      No new associations with subscriptions are allowed. Existing associations for recurring addons remain as-is and can be removed if required.

- `tiers` (optional, array)
  Parameters for tiers
  - `starting_unit` (optional, integer)
    The lower limit of a range of units for the tier
  - `ending_unit` (optional, integer)
    The upper limit of a range of units for the tier
  - `price` (optional, in cents)
    The per-unit price for the tier when the `pricing_model` is `tiered` or `volume` ; the total cost for the item price when the `pricing_model` is `stairstep`. The value is in the [minor unit of the currency](/docs/api/v2/pcv-1/currencies) .
  - `starting_unit_in_decimal` (optional, string, max chars=33)
    The decimal representation of the lowest value of quantity in this tier. This is zero for the lowest tier. For all other tiers, it is the same as `ending_unit_in_decimal` of the next lower tier. Returned only when the `line_items.pricing_model` is `tiered` , `volume` or `stairstep` and [multi-decimal pricing](/docs/api/currencies) is enabled.
  - `ending_unit_in_decimal` (optional, string, max chars=33)
    The decimal representation of the highest value of quantity in this tier. This attribute is not applicable for the highest tier. For all other tiers, it must be equal to the `starting_unit_in_decimal` of the next higher tier. Applicable only when the `pricing_model` is `tiered` , `volume` or `stairstep` and [multi-decimal pricing](/docs/api/v2/pcv-1/currencies) is enabled.
  - `price_in_decimal` (optional, string, max chars=39)
    The decimal representation of the per-unit price for the tier when the `pricing_model` is `tiered` or `volume`. When the `pricing_model` is `stairstep` , it is the decimal representation of the total price for the plan. The value is in major units of the currency. Applicable when the plan is quantity-based and [multi-decimal pricing](/docs/api/v2/pcv-1/currencies) is enabled.

- `tax_providers_fields` (optional, array)
  Parameters for tax\_providers\_fields
  - `provider_name` (required, string, max chars=50)
    Name of the tax provider currently supported.
  - `field_id` (required, string, max chars=50)
    Field id of the attribute which tax vendor has provided while getting onboarded with us.
  - `field_value` (required, string, max chars=50)
    The value of the corresponding tax field.

## Returns

- `addon` (Addon object)
  Resource object representing addon
