Creates a new usage plan set.
const url = 'https://example.com/api/v1/provision/admin/usage-plans/plan-sets';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"productId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","suiteId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","name":"example","description":"example","status":"Draft","plans":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","name":"example","description":"example","sortOrder":1,"pricingMode":"Absolute","monthlyPrice":1,"currency":"example","relativeWeight":1,"lineItems":[{"productId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","included":true,"featureValues":[{"featureCode":"example","metricName":"example","enforcementType":"SingleValue","value":"example","usageTiers":[{"startUsage":1,"startPercentage":1,"endUsage":1,"endPercentage":1,"baseCredits":1,"creditsPerUnitOfConsumption":1,"name":"example","quotaUsageLevel":"None","quotaUsagePolicy":"None","fundingBalanceMetric":"example"}]}]}]}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/v1/provision/admin/usage-plans/plan-sets \ --header 'Content-Type: application/json' \ --data '{ "productId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "suiteId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "description": "example", "status": "Draft", "plans": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "name": "example", "description": "example", "sortOrder": 1, "pricingMode": "Absolute", "monthlyPrice": 1, "currency": "example", "relativeWeight": 1, "lineItems": [ { "productId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "included": true, "featureValues": [ { "featureCode": "example", "metricName": "example", "enforcementType": "SingleValue", "value": "example", "usageTiers": [ { "startUsage": 1, "startPercentage": 1, "endUsage": 1, "endPercentage": 1, "baseCredits": 1, "creditsPerUnitOfConsumption": 1, "name": "example", "quotaUsageLevel": "None", "quotaUsagePolicy": "None", "fundingBalanceMetric": "example" } ] } ] } ] } ] }'Request Bodyrequired
Section titled “Request Bodyrequired”Plan set creation payload.
Admin request to create a plan set for a product, optionally with its initial plans.
object
The suite to scope the plan set to. Leave null to have the server resolve (or implicitly create) the single-member suite for Guid CreateUsagePlanSetDto.ProductId — the common case for a vendor who has never created a suite explicitly. Set only when the product already belongs to more than one suite and the target must be named.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
Admin request to create a plan set for a product, optionally with its initial plans.
object
The suite to scope the plan set to. Leave null to have the server resolve (or implicitly create) the single-member suite for Guid CreateUsagePlanSetDto.ProductId — the common case for a vendor who has never created a suite explicitly. Set only when the product already belongs to more than one suite and the target must be named.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
Admin request to create a plan set for a product, optionally with its initial plans.
object
The suite to scope the plan set to. Leave null to have the server resolve (or implicitly create) the single-member suite for Guid CreateUsagePlanSetDto.ProductId — the common case for a vendor who has never created a suite explicitly. Set only when the product already belongs to more than one suite and the target must be named.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
Responses
Section titled “Responses”OK
A named collection of usage plans (e.g. “My SaaS Plans”).
object
The suite this plan set belongs to. A single-product plan set belongs to that product’s implicit suite-of-one. Which member each tier configures is on the plan’s line items — the set itself names no product.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
A named collection of usage plans (e.g. “My SaaS Plans”).
object
The suite this plan set belongs to. A single-product plan set belongs to that product’s implicit suite-of-one. Which member each tier configures is on the plan’s line items — the set itself names no product.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
Example
{ "status": "Draft", "plans": [ { "pricingMode": "Absolute", "lineItems": [ { "featureValues": [ { "enforcementType": "SingleValue", "usageTiers": [ { "quotaUsageLevel": "None", "quotaUsagePolicy": "None" } ] } ] } ] } ]}A named collection of usage plans (e.g. “My SaaS Plans”).
object
The suite this plan set belongs to. A single-product plan set belongs to that product’s implicit suite-of-one. Which member each tier configures is on the plan’s line items — the set itself names no product.
Lifecycle state of a usage plan set.
A usage plan such as “basic”, “standard”, or “professional”.
object
Whether the plan states its worth in money or in relative units. Every plan in one set
shares a mode — a set is one price list — and a plan carries only its own mode’s fields:
an Absolute plan is refused a RelativeWeight, a Relative plan is refused a
MonthlyPrice or Currency. So nothing ever has to pick a winner
between two answers to “what is this plan worth”.
What the plan charges per month, when PricingMode is
Absolute. Three states: null = not priced yet (missing data —
never treated as free), 0 = free/trial, positive = paid. Revenue reporting excludes
null-priced plans and reports them separately.
ISO 4217 code (e.g. “EUR”). Required when MonthlyPrice is positive, ignored otherwise.
What the plan is worth relative to its siblings, when PricingMode is
Relative — an unbounded weight, not a percentage, so
“Enterprise is 10x Basic” stays expressible and adding a plan never re-keys the others.
Reporting turns weights into a share of the total, so the shares add up on their own.
Three states mirroring MonthlyPrice: null = not weighted yet (never treated
as zero), 0 = carries no weight, positive = counts.
One entry per suite member the tier speaks about.
How one tier lands on one suite member: whether the tier includes that product at all, and — when included — the feature values it stamps for it.
object
The suite member this line item configures. Required on every line item except when creating a plan set for a suite of one, where the server stamps the sole member.
Defines a feature value override for a specific plan tier. Value is stored as string to support bool, enum, string, and json field values.
object
The metric name this feature’s meter is keyed by — the identity every usage read and
usage report must quote. It is NOT the feature code: codes are uppercase
(MIRAGE.IMAGE.RENDERS), metric names are lowercase (mirage.image.renders),
and the meter is resolved by an exact, case-sensitive match. Passing the code where the
metric name belongs silently finds nothing.
How a plan enforces a feature’s value.
Represents a tier of usage with associated credits and severity status.
object
Gets or sets the start usage for the tier.
Tier start as a percentage of the feature value (percentage-based enforcement).
Gets or sets the end usage for the tier. Nullable.
Tier end as a percentage of the feature value (percentage-based enforcement).
Gets or sets the flat fee credits for the tier.
Gets or sets the credits per unit of consumption for the tier.
Gets or sets the name of the usage tier.
Gets or sets the overage severity status for the tier.
Defines the enforcement behavior applied by the resource controller or interceptor when a specific usage tier threshold is reached. Ordered from least to most restrictive.
Metric name of the credit balance, on the same entitlement, that pays for consumption in this tier. Only meaningful on a tier whose policy is AllowWithOverage: name a balance and every unit past the tier’s start is priced and charged to it on commit, refusing the commit when it cannot be paid for; leave it empty and the overage is allowed and merely reported.
Example
{ "status": "Draft", "plans": [ { "pricingMode": "Absolute", "lineItems": [ { "featureValues": [ { "enforcementType": "SingleValue", "usageTiers": [ { "quotaUsageLevel": "None", "quotaUsagePolicy": "None" } ] } ] } ] } ]}Bad Request
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}