---
title: "POST /v1/subscription/{handle}/metered_billing_product"
method: POST
path: "/v1/subscription/{handle}/metered_billing_product"
tags: ["subscription"]
---

# POST /v1/subscription/{handle}/metered_billing_product

`POST /v1/subscription/{handle}/metered_billing_product`

## Request

- Base URL: `https://customer-portal-api.frisbii.com`
- URL: `https://customer-portal-api.frisbii.com/v1/subscription/{handle}/metered_billing_product`
- Auth: none declared

Add metered billing product to subscription

## Path parameters

- `handle` string, required

## Request body

- AddSubscriptionMeteredBillingProduct
  - `metered_billing_product_handle` string, required: Handle of the metered billing product to add

## Response `200`

Successful operation

- SubscriptionAttachedMeteredBillingProduct
  - `handle` string: Per subscription unique handle for the attached metered billing product
  - `name` string: Product name
  - `description` string: Product description
  - `uuid` string: Product uuid
  - `status` string: Status of the attached product
  - `pricing` PricingDto: Product pricing
    - `vat` number, float: VAT percentage for the product. Defaults to the account's VAT
    - `currency` string: Currency for the pricing plan in [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) three letter alpha code
    - `unit_label` string: Label for the unit of the product. Defaults to 'unit'.
    - `unit_label_plural` string: Plural name of the linked unit. Null while no unit is linked.
    - `unit_handle` string: Handle of the unit of measure for the product. While a unit is linked, the unit's names are shown as unit_label and unit_label_plural, and the stored unit_label is ignored. On update, null removes the link and leaving the field out keeps it. Not allowed with percentage pricing models.
    - `included_units` integer: Included units for free. Defaults to 0.
    - `minimum_fee` string: Minimum fee for the product. Defaults to 0.
    - `amount_incl_vat` boolean: Whether the amount is including VAT. Defaults to true.
    - `tax_policy` string: Tax policy handle for the product.
    - `pricing_model` 'per_unit' | 'per_tier' | 'per_unit_step' | 'per_tier_step' | 'percentage' | 'percentage_step', required: Pricing model for the product.
    - `unit_ranges` UnitRangeDto[], required: Unit ranges for this product
      - `from` integer, required: From value of the range (incl.). The first range starts at 0, and every following range starts at the `to` of the previous range plus 1.
      - `to` integer: To value of the range (incl.). If not set, the range is open ended, which is only allowed for the last range.
      - `price_per_unit` string, required: Price per unit in the range, a non-negative decimal string with up to 3 decimals. For the per-unit and per-tier pricing models it is an amount in major currency units, so `10.00` is 10 DKK.
  - `pricing_strategy` string: Pricing strategy
  - `billing_period` string: Billing period
  - `billing_interval_length` integer: Billing interval length
  - `current_period_start` string, date-time: Current period start
  - `next_period_start` string, date-time: Next period start
  - `metered_billing_product` MeteredBillingProduct: Metered billing product
    - `handle` string, required: Handle of usage-based billing product. Unique per account
    - `pricing` CreatePricingDto, required: Product pricing
      - `vat` number, float: VAT percentage for the product. Defaults to the account's VAT
      - `currency` string: Currency for the pricing plan in [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) three letter alpha code
      - `unit_label` string: Label for the unit of the product. Defaults to 'unit'.
      - `unit_label_plural` string: Plural name of the linked unit. Null while no unit is linked.
      - `unit_handle` string: Handle of the unit of measure for the product. While a unit is linked, the unit's names are shown as unit_label and unit_label_plural, and the stored unit_label is ignored. On update, null removes the link and leaving the field out keeps it. Not allowed with percentage pricing models.
      - `included_units` integer: Included units for free. Defaults to 0.
      - `minimum_fee` string: Minimum fee for the product. Defaults to 0.
      - `amount_incl_vat` boolean: Whether the amount is including VAT. Defaults to true.
      - `tax_policy` string: Tax policy handle for the product.
      - `pricing_model` 'per_unit' | 'per_tier' | 'per_unit_step' | 'per_tier_step' | 'percentage' | 'percentage_step', required: Pricing model for the product.
      - `unit_ranges` UnitRangeDto[], required: Unit ranges for this product
        - `from` integer, required: From value of the range (incl.). The first range starts at 0, and every following range starts at the `to` of the previous range plus 1.
        - `to` integer: To value of the range (incl.). If not set, the range is open ended, which is only allowed for the last range.
        - `price_per_unit` string, required: Price per unit in the range, a non-negative decimal string with up to 3 decimals. For the per-unit and per-tier pricing models it is an amount in major currency units, so `10.00` is 10 DKK.
    - `name` string, required: Name of usage-based billing product.
    - `description` string: Optional description of usage-based billing product
    - `entitlements` string[]: Entitlements for this usage-based billing product.
    - `metadata` object: Custom metadata.
    - `uuid` string, required: UUID of the usage-based billing product
    - `state` string: Status of the usage-based billing product.
    - `usage_capture_method` string, required: The method used to capture usage for this usage-based billing product.
    - `auto_add_to_sub_on_usage` boolean: Automatically add this product to a subscription when usage is recorded
    - `include_zero_amount` boolean: Whether a metered usage order line with amount = 0 should be included in the invoice. Defaults to false when omitted.
    - `invoice_period_source` 'none' | 'record_created' | 'record_periods': Source used to derive invoice service period for metered invoice lines. Defaults to record_created. record_created is deprecated and will be removed by 2026-08-01.
    - `cost_object` string: Cost object number (Kostenträger-Nr.) used for accounting export

## Other responses

- `400`: Invalid request, see error codes at https://api.frisbii.com/v1/error_codes
- `401`: None or invalid credentials provided in access to secured resource
- `403`: Not authorized to perform resource operation
- `404`: Resource or referenced resource not found, see error codes at https://api.frisbii.com/v1/error_codes
- `429`: Request limiting exceeded, request rate or concurrent requests, see error code 122 and 123
- `500`: Internal service error, error is reported automatically to Frisbii

---

[API](https://skmtc.dev/frisbii/apis/frisbii-customer-portal-api.md) - [All operations](https://skmtc.dev/frisbii/apis/frisbii-customer-portal-api/llms.txt) - [OpenAPI document](https://skmtc.dev/frisbii/apis/frisbii-customer-portal-api/revisions/f0261fb63b1b?raw)
