openapi: 3.0.1
info:
title: m3ter Account Pricing API
description: "If you are using Postman, you can:\n- Use the **Download** button above to download the m3ter Open API spec JSON file and then import this file as the **m3ter API Collection** into your Workspace. See [Importing the m3ter Open API](https://www.m3ter.com/docs/guides/m3ter-apis/getting-started-with-api-calls#importing-the-m3ter-open-api) in our main user Documentation for details.\n- Copy this link: [m3ter-Template API Collection](https://www.datocms-assets.com/78893/1672846767-m3ter-template-api-collection-postman_collection.json) and use it to import the **m3ter-Template API Collection** into your Workspace. See [Importing the m3ter Template API Collection](https://www.m3ter.com/docs/guides/m3ter-apis/getting-started-with-api-calls#importing-the-m3ter-template-api-collection) in our main user Documentation for details.\n\n---\n\n# Introduction\nThe m3ter platform supports two HTTP-based REST APIs returning JSON encoded responses:\n- The **Ingest API**, which you can use for submitting raw data measurements. *(See the [Submit Measurements](https://www.m3ter.com/docs/api#tag/Measurements/operation/SubmitMeasurements) endpoint in this API Reference.)*\n- The **Config API**, which you can use for configuration and management. *(All other endpoints in this API Reference.)* \n\n## Authentication and Authorization\nOur APIs use an industry-standard authorization protocol known as the OAuth 2.0 specification.\n\nOAuth2 supports several grant types, each designed for a specific use case. m3ter uses the following two grant types:\n - **Authorization Code**: Used for human login access via the m3ter Console.\n - **Client Credentials**: Used for machine-to-machine communication and API access.\n\nComplete the following flow for API access:\n\n1. **Create a Service User and add Permissions**: Log in to the m3ter Console, go to **Settings**, **Access** then **Service Users** tab, and create a Service User. To enable API calls, grant the user **Administrator** permissions. \n \n2. **Generate Access Keys**: In the Console, open the *Overview* page for the Service User by clicking on the name. Generate an **Access Key id** and **Api Secret**. Make sure you copy the **Api Secret** because it is only visible at the time of creation. \n\nSee [Service Authentication](https://www.m3ter.com/docs/guides/authenticating-with-the-platform/service-authentication) for detailed instructions and an example.\n\n3. **Obtain a Bearer Token using Basic Auth**: We implement the OAuth 2.0 Client Credentials Grant authentication flow for Service User Authentication. Submit a request to the m3ter OAuth Client Credentials authentication flow, using your concatenated **Access Key id** and **Api Secret** to obtain a Bearer Token for your Service User. *See examples below.* \n \n4. **Bearer Token Usage**: Use the HTTP 'Authorization' header with the bearer token to authorise all subsequent API requests. \n\n> Warning: The Bearer Token is valid for 18,000 seconds or 5 hours. When the token has expired, you must obtain a new one.\n\nBelow are two examples for obtaining a Bearer Token using Basic Auth: the first in cURL and the second as a Python script. \n\n### cURL Example\n1. Open your terminal or command prompt. \n2. Use the following `cURL` command to obtain a Bearer Token:\n\n```bash\ncurl -X POST https://api.m3ter.com/oauth/token \\\n -H 'Content-Type: application/x-www-form-urlencoded' \\\n -u your_access_key_id:your_api_secret \\\n -d 'grant_type=client_credentials'\n```\n\nReplace `your_access_key_id` and `your_api_secret` with your actual **Access Key id** and **Api Secret**.\n\n3. Run the command, and if successful, it will return a JSON response containing the Bearer Token. The response will look like this:\n\n```json\n{\n \"access_token\": \"your_bearer_token\",\n \"token_type\": \"Bearer\",\n \"expires_in\": 18000\n}\n```\n\nYou can then use the Bearer Token *(the value of `\"access_token\"`)* for subsequent API calls to m3ter.\n\n### Python Example\n1. Install the `requests` library if you haven't already:\n\n```bash\npip install requests\n```\n\n2. Use the following Python script to obtain a Bearer Token:\n\n```python\nimport requests\nimport base64\n\n# Replace these with your Access Key id and Api Secret\naccess_key_id = 'your_access_key_id'\napi_secret = 'your_api_secret'\n\n# Encode the Access Key id and Api Secret in base64 format\ncredentials = base64.b64encode(f'{access_key_id}:{api_secret}'.encode('utf-8')).decode('utf-8')\n\n# Set the m3ter token endpoint URL\ntoken_url = 'https://api.m3ter.com/oauth/token'\n\n# Set the headers for the request\nheaders = {\n 'Authorization': f'Basic {credentials}',\n 'Content-Type': 'application/x-www-form-urlencoded'\n}\n\n# Set the payload for the request\npayload = {\n 'grant_type': 'client_credentials'\n}\n\n# Send the request to obtain the Bearer Token\nresponse = requests.post(token_url, headers=headers, data=payload)\n\n# Check if the request was successful\nif response.status_code == 200:\n # Extract the Bearer Token from the response\n bearer_token = response.json()['access_token']\n print(f'Bearer Token: {bearer_token}')\nelse:\n print(f'Error: {response.status_code} - {response.text}')\n```\n\nReplace `your_access_key_id` and `your_api_secret` with your actual **Access Key id** and **Api Secret**. \n\n3. Run the script, and if successful, it will print the Bearer Token. You can then use this Bearer Token for subsequent API calls to m3ter.\n\n## Submitting Personally Identifiable Information (PII)\n**IMPORTANT!** Under the [Data Processing Agreement](https://www.m3ter.com/docs/legal/dpa), the only fields permissible for use in submitting any of your end-customer PII data in m3ter are the ``name``, ``address``, and ``emailAddress`` fields on the **Account** entity - see the details for [Create Account](https://www.m3ter.com/docs/api#operation/PostAccount). See also section 4.2 of the [Terms of Service](https://www.m3ter.com/docs/legal/terms-of-service).\n\n## Rate and Payload Limits\n### Config API Request Rate Limits\nSee [Config API Limits](https://www.m3ter.com/docs/guides/m3ter-apis/config-api-limits).\n\n### Data Explorer API Request Rate Limits\nSee [Data Explorer Request Rate Limits](https://www.m3ter.com/docs/guides/m3ter-apis/config-api-limits#date-explorer-request-rate-limits).\n\n### Ingest API Request Rate and Payload Limits\nSee [Ingest API Limits](https://www.m3ter.com/docs/guides/m3ter-apis/ingest-api-limits) for more information.\n\n## Pagination\n**List Endpoints**\nAPI endpoints that have a List resources request support cursor-based pagination - for example, the `List Accounts` request. These List calls support pagination by taking the two parameters `pageSize` and `nextToken`. \n\nThe response of a List API call is a single page list. If the `nextToken` parameter is not supplied, the first page returned contains the newest objects chronologically. Specify a `nextToken` to retrieve the page of older objects that occur immediately after the last object on the previous page.\n\nUse `pageSize` to limit the list results per page, typically this allows up to a maximum of 100 or 200 per page.\n\n**Search Endpoints**\nAPI endpoints that have a Search resources request support cursor-based pagination - for example, the `Search Accounts` request. These Search calls support pagination by taking the two parameters `pageSize` and `fromDocument`.\n\nThe response of a Search API call is a single page list. If the `fromDocument` parameter is not supplied, the first page returned contains the newest objects chronologically. Specify a `fromDocument` to retrieve the page of older objects that occur immediately after the last object on the previous page.\n\nUse `pageSize` to limit the list results per page, typically this allows up to a maximum of 100 or 200 per page. Default is 10.\n\n## API Quick Start\nSee [Getting Started with API Calls](https://www.m3ter.com/docs/guides/m3ter-apis/getting-started-with-api-calls) for detailed guidance on how to use our API to:\n* Create a Service User and add permissions.\n* Generate access keys for the Service User.\n* Use basic authentication to obtain a Bearer Token.\n\nFor further guidance, also see [Creating and Configuring Service Users](https://www.m3ter.com/docs/guides/organization-and-access-management/managing-users/creating-and-configuring-service-users).\n\n## Other Languages\nIf you want to work with the m3ter REST APIs using other languages such as:\n* Python\n* JavaScript\n* C++\n\nPlease see the [Developer Tools](https://www.m3ter.com/docs/guides/developer-tools) topic in our main documentation for information about available SDKs.\n\n\n# Authentication\n<!-- ReDoc-Inject: <security-definitions> -->"
version: '1.0'
x-logo:
url: https://console.m3ter.com/m3ter-logo-black.svg
servers:
- url: https://api.m3ter.com
security:
- OAuth2: []
tags:
- name: Pricing
description: 'Endpoints for listing, creating, updating, retrieving, or deleting Pricing.
Create the Pricing for a Plan/PlanTemplate with usage data Aggregations, and define a usage-based pricing structure for charging end customer Accounts put on the Plan.
See [Reviewing Pricing Options for Plans and Plan Templates](https://www.m3ter.com/docs/guides/pricing-plans/reviewing-pricing-options-and-pricing-plans) for more information. '
paths:
/organizations/{orgId}/pricings/{id}:
get:
tags:
- Pricing
summary: Retrieve Pricing
description: Retrieve the Pricing with the given UUID.
operationId: GetPricing
parameters:
- name: orgId
in: path
description: UUID of the organization. The Organization represents your company as a direct customer of the m3ter service.
required: true
style: simple
explode: false
schema:
type: string
deprecated: true
x-stainless-deprecation-message: the org id should be set at the client level instead
- name: id
in: path
description: The UUID of the Pricing to retrieve.
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: Returns the requested Pricing
content:
application/json:
schema:
$ref: '#/components/schemas/PricingResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
put:
tags:
- Pricing
summary: Update Pricing
description: 'Update Pricing for the given UUID.
**Notes:**
* Exactly one of `planId` or `planTemplateId` request parameters are required for this call to be valid. If you omit both, then you will receive a validation error.
* Exactly one of `aggregationId` or `compoundAggregationId` request parameters are required for this call to be valid. If you omit both, then you will receive a validation error.'
operationId: PutPricing
parameters:
- name: orgId
in: path
description: UUID of the organization. The Organization represents your company as a direct customer of the m3ter service.
required: true
style: simple
explode: false
schema:
type: string
deprecated: true
x-stainless-deprecation-message: the org id should be set at the client level instead
- name: id
in: path
description: The UUID of the Pricing to update.
required: true
style: simple
explode: false
schema:
maximum: 36
minimum: 36
type: string
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PricingRequest'
required: true
responses:
'200':
description: Returns the updated Pricing
content:
application/json:
schema:
$ref: '#/components/schemas/PricingResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
delete:
tags:
- Pricing
summary: Delete Pricing
description: Delete the Pricing with the given UUID.
operationId: DeletePricing
parameters:
- name: orgId
in: path
description: UUID of the organization. The Organization represents your company as a direct customer of the m3ter service.
required: true
style: simple
explode: false
schema:
type: string
deprecated: true
x-stainless-deprecation-message: the org id should be set at the client level instead
- name: id
in: path
description: The UUID of the Pricing to delete.
required: true
style: simple
explode: false
schema:
maximum: 36
minimum: 36
type: string
responses:
'200':
description: Return the deleted Pricing
content:
application/json:
schema:
$ref: '#/components/schemas/PricingResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
/organizations/{orgId}/pricings:
get:
tags:
- Pricing
summary: List Pricings
description: 'Retrieve a list of Pricings filtered by date, Plan ID, PlanTemplate ID, or Pricing ID. '
operationId: ListPricings
parameters:
- name: orgId
in: path
description: UUID of the organization. The Organization represents your company as a direct customer of the m3ter service.
required: true
style: simple
explode: false
schema:
type: string
deprecated: true
x-stainless-deprecation-message: the org id should be set at the client level instead
- name: pageSize
in: query
description: Number of Pricings to retrieve per page.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
maximum: 100
minimum: 1
type: integer
format: int32
- name: nextToken
in: query
description: '`nextToken` for multi-page retrievals.'
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: string
- name: date
in: query
description: Date on which to retrieve active Pricings.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: string
- name: planId
in: query
description: UUID of the Plan to retrieve Pricings for.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
maximum: 36
minimum: 36
type: string
- name: planTemplateId
in: query
description: UUID of the PlanTemplate to retrieve Pricings for.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
maximum: 36
minimum: 36
type: string
- name: aggregationId
in: query
description: UUID of the Aggregation to retrieve pricings for
required: false
allowEmptyValue: true
style: form
explode: true
schema:
maximum: 36
minimum: 36
type: string
- name: ids
in: query
description: 'List of Pricing IDs to retrieve. '
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: array
items:
type: string
responses:
'200':
description: Returns the list of requested Pricings
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedPricingResponseData'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
post:
tags:
- Pricing
summary: Create Pricing
description: 'Create a new Pricing.
**Notes:**
* Exactly one of `planId` or `planTemplateId` request parameters are required for this call to be valid. If you omit both, then you will receive a validation error.
* Exactly one of `aggregationId` or `compoundAggregationId` request parameters are required for this call to be valid. If you omit both, then you will receive a validation error.'
operationId: PostPricing
parameters:
- name: orgId
in: path
description: UUID of the organization. The Organization represents your company as a direct customer of the m3ter service.
required: true
style: simple
explode: false
schema:
type: string
deprecated: true
x-stainless-deprecation-message: the org id should be set at the client level instead
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/PricingRequest'
required: true
responses:
'200':
description: Returns the created Pricing
content:
application/json:
schema:
$ref: '#/components/schemas/PricingResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
components:
schemas:
BasePricingRequestWithPricingBands:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/BasePricingRequest'
- $ref: '#/components/schemas/AbstractRequest'
- required:
- pricingBands
properties:
pricingBands:
minItems: 1
type: array
description: ''
items:
$ref: '#/components/schemas/PricingBand'
AggregationType:
type: string
description: ''
enum:
- SIMPLE
- COMPOUND
PricingRequest:
type: object
properties:
aggregationId:
maxLength: 36
type: string
description: UUID of the Aggregation used to create the Pricing. Use this when creating a Pricing for a segmented aggregation.
compoundAggregationId:
maxLength: 36
type: string
description: UUID of the Compound Aggregation used to create the Pricing.
type:
description: '* **DEBIT**. Default setting. The amount calculated using the Pricing is added to the bill as a debit.
* **PRODUCT_CREDIT**. The amount calculated using the Pricing is added to the bill as a credit *(negative amount)*. To prevent negative billing, the bill will be capped at the total of other line items for the same Product.
* **GLOBAL_CREDIT**. The amount calculated using the Pricing is added to the bill as a credit *(negative amount)*. To prevent negative billing, the bill will be capped at the total of other line items for the entire bill, which might include other Products the Account consumes.'
$ref: '#/components/schemas/PricingType'
segment:
type: object
additionalProperties:
type: string
description: 'Specifies the segment value which you are defining a Pricing for using this call:
- For each segment value defined on a Segmented Aggregation you must create a separate Pricing and use the appropriate `aggregationId` parameter for the call.
- If you specify a segment value that has not been defined for the Aggregation, you''ll receive an error.
- If you''ve defined segment values for the Aggregation using a single wildcard or multiple wildcards, you can create Pricing for these wildcard segment values also.
For more details on creating Pricings for segment values on a Segmented Aggregation using this call, together with some examples, see the [Using API Call to Create Segmented Pricings](https://www.m3ter.com/docs/guides/plans-and-pricing/pricing-plans/pricing-plans-using-segmented-aggregations#using-api-call-to-create-a-segmented-pricing) in our User Documentation.'
tiersSpanPlan:
type: boolean
description: 'The default value is **FALSE**.
* If **TRUE**, usage accumulates over the entire period the priced Plan is active for the account, and is not reset for pricing band rates at the start of each billing period.
* If **FALSE**, usage does not accumulate, and is reset for pricing bands at the start of each billing period.'
minimumSpend:
minimum: 0
type: number
description: The minimum spend amount per billing cycle for end customer Accounts on a Plan to which the Pricing is applied.
format: double
minimumSpendDescription:
maxLength: 200
type: string
description: Minimum spend description *(displayed on the bill line item)*.
minimumSpendBillInAdvance:
type: boolean
description: 'The default value is **FALSE**.
* When **TRUE**, minimum spend is billed at the start of each billing period.
* When **FALSE**, minimum spend is billed at the end of each billing period.
*(Optional)*. Overrides the setting at Organization level for minimum spend billing in arrears/in advance.'
overagePricingBands:
type: array
description: 'Specify Prepayment/Balance overage pricing in pricing bands for the case of a **Tiered** pricing structure. The overage pricing rates will be used to charge for usage if the Account has a Commitment/Prepayment or Balance applied to it and the entire Commitment/Prepayment or Balance amount has been consumed.
**Constraints:**
* Can only be used for a **Tiered** pricing structure. If cumulative is **FALSE** and you defined `overagePricingBands`, then you''ll receive an error.
* If `tiersSpanPlan` is set to **TRUE** for usage accumulates over entire contract period, then cannot be used.
* If the Commitment/Prepayement or Balance has an `overageSurchargePercent` defined, then this will override any `overagePricingBands` you''ve defined for the pricing.'
items:
$ref: '#/components/schemas/PricingBand'
description: ''
allOf:
- $ref: '#/components/schemas/BasePricingRequestWithPricingBands'
- $ref: '#/components/schemas/BasePricingRequest'
- $ref: '#/components/schemas/AbstractRequest'
AbstractResponse:
required:
- id
type: object
properties:
id:
type: string
description: 'The UUID of the entity. '
version:
type: integer
description: 'The version number:
- **Create:** On initial Create to insert a new entity, the version is set at 1 in the response.
- **Update:** On successful Update, the version is incremented by 1 in the response.'
format: int64
x-stainless-terraform-configurability: computed
x-stainless-terraform-always-send: true
description: ''
PricingBand:
required:
- fixedPrice
- lowerLimit
- unitPrice
type: object
properties:
id:
type: string
description: The ID for the Pricing band.
lowerLimit:
minimum: 0
type: number
description: Lower limit for the Pricing band.
format: double
fixedPrice:
type: number
description: Fixed price charged for the Pricing band.
format: double
unitPrice:
type: number
description: Unit price charged for the Pricing band.
format: double
creditTypeId:
type: string
description: '**OBSOLETE - this is deprecated and no longer used.** '
description: ''
BasePricingResponseWithPricingBands:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/BasePricingResponse'
- $ref: '#/components/schemas/AbstractResponseWithAuditFields'
- $ref: '#/components/schemas/AbstractResponse'
- properties:
pricingBands:
type: array
description: ''
items:
$ref: '#/components/schemas/PricingBand'
BasePricingRequest:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractRequest'
- required:
- startDate
properties:
code:
maxLength: 80
pattern: ^([^[\p{Cntrl}\s]])|([^[\p{Cntrl}\s]][[^[\p{Cntrl}\s]] ]*[^[\p{Cntrl}\s]])$
type: string
description: Unique short code for the Pricing.
planId:
type: string
description: UUID of the Plan the Pricing is created for.
planTemplateId:
type: string
description: UUID of the Plan Template the Pricing is created for.
cumulative:
type: boolean
description: 'Controls whether or not charge rates under a set of pricing bands configured for a Pricing are applied according to each separate band or at the highest band reached.
*(Optional)*. The default value is **FALSE**.
* When TRUE, at billing charge rates are applied according to each separate band.
* When FALSE, at billing charge rates are applied according to highest band reached.
**NOTE:** Use the `cumulative` parameter to create the type of Pricing you require. For example, for Tiered Pricing set to **TRUE**; for Volume Pricing, set to **FALSE**.'
startDate:
type: string
description: The start date *(in ISO-8601 format)* for when the Pricing starts to be active for the Plan of Plan Template.*(Required)*
format: date-time
endDate:
type: string
description: 'The end date *(in ISO-8601 format)* for when the Pricing ceases to be active for the Plan or Plan Template.
*(Optional)* If not specified, the Pricing remains active indefinitely.'
format: date-time
description:
maxLength: 200
type: string
description: Displayed on Bill line items.
accountingProductId:
maxLength: 36
minLength: 36
type: string
description: Optional Product ID this Pricing should be attributed to for accounting purposes
PricingResponse:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/BasePricingResponseWithPricingBands'
- $ref: '#/components/schemas/BasePricingResponse'
- $ref: '#/components/schemas/AbstractResponseWithAuditFields'
- $ref: '#/components/schemas/AbstractResponse'
- properties:
aggregationId:
type: string
description: UUID of the Aggregation used to create the Pricing. Use this when creating a Pricing for a segmented aggregation.
compoundAggregationId:
type: string
description: UUID of the Compound Aggregation used to create the Pricing.
type:
description: '* **DEBIT**. Default setting. The amount calculated using the Pricing is added to the bill as a debit.
* **PRODUCT_CREDIT**. The amount calculated using the Pricing is added to the bill as a credit *(negative amount)*. To prevent negative billing, the bill will be capped at the total of other line items for the *same* Product.
* **GLOBAL_CREDIT**. The amount calculated using the Pricing is added to the bill as a credit *(negative amount)*. To prevent negative billing, the bill will be capped at the total of other line items for the entire bill, which might include other Products the Account consumes.'
$ref: '#/components/schemas/PricingType'
segment:
type: object
additionalProperties:
type: string
description: 'Name of the segment for which you are defining a Pricing.
For each segment in a segmented aggregation, make a separate call using `aggregationId` parameter to update a Pricing.'
tiersSpanPlan:
type: boolean
description: 'The default value is **FALSE**.
* If TRUE, usage accumulates over the entire period the priced Plan is active for the account, and is not reset for pricing band rates at the start of each billing period.
* If FALSE, usage does not accumulate, and is reset for pricing bands at the start of each billing period.'
minimumSpend:
type: number
description: The minimum spend amount per billing cycle for end customer Accounts on a Plan to which the Pricing is applied.
format: double
minimumSpendDescription:
type: string
description: Minimum spend description *(displayed on the bill line item)*.
minimumSpendBillInAdvance:
type: boolean
description: 'The default value is **FALSE**.
* When TRUE, minimum spend is billed at the start of each billing period.
* When FALSE, minimum spend is billed at the end of each billing period.
*(Optional)*. Overrides the setting at Organization level for minimum spend billing in arrears/in advance.'
aggregationType:
description: ''
$ref: '#/components/schemas/AggregationType'
segmentString:
type: string
description: ''
overagePricingBands:
type: array
description: 'The Prepayment/Balance overage pricing in pricing bands for the case of a **Tiered** pricing structure. '
items:
$ref: '#/components/schemas/PricingBand'
accountingProductId:
type: string
description: ''
BasePricingResponse:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractResponseWithAuditFields'
- $ref: '#/components/schemas/AbstractResponse'
- properties:
planId:
type: string
description: UUID of the Plan the Pricing is created for.
planTemplateId:
type: string
description: UUID of the Plan Template the Pricing was created for.
cumulative:
type: boolean
description: 'Controls whether or not charge rates under a set of pricing bands configured for a Pricing are applied according to each separate band or at the highest band reached.
The default value is **TRUE**.
* When TRUE, at billing charge rates are applied according to each separate band.
* When FALSE, at billing charge rates are applied according to highest band reached.'
startDate:
type: string
description: The start date *(in ISO-8601 format)* for when the Pricing starts to be active for the Plan of Plan Template.
format: date-time
endDate:
type: string
description: 'The end date *(in ISO-8601 format)* for when the Pricing ceases to be active for the Plan or Plan Template.
If not specified, the Pricing remains active indefinitely.'
format: date-time
code:
type: string
description: Unique short code for the Pricing.
description:
type: string
description: Displayed on Bill line items.
accountingProductId:
type: string
description: Optional Product ID this Pricing should be attributed to for accounting purposes.
AbstractRequest:
type: object
properties:
version:
type: integer
description: 'The version number of the entity:
- **Create entity:** Not valid for initial insertion of new entity - *do not use for Create*. On initial Create, version is set at 1 and listed in the response.
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/m3ter/refs/heads/main/openapi/m3ter-pricing-api-openapi.yml