Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/m3ter-meter-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: m3ter Meter API
description: 'If you are using Postman, you can:
- 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.'
version: '1.0'
x-logo:
url: https://console.m3ter.com/m3ter-logo-black.svg
servers:
- url: https://api.m3ter.com
security:
- OAuth2: []
tags:
- name: Meter
description: Endpoints for listing, creating, updating, retrieving, or deleting Meters.
paths:
/organizations/{orgId}/meters/{id}:
get:
tags:
- Meter
summary: Retrieve Meter
description: Retrieve the Meter with the given UUID.
operationId: GetMeter
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 Meter to retrieve.
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: Return the requested Meter
content:
application/json:
schema:
$ref: '#/components/schemas/MeterResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
put:
tags:
- Meter
summary: Update Meter
description: 'Update the Meter with the given UUID.
**Note:** If you have created Custom Fields for a Meter, when you use this endpoint to update the Meter use the `customFields` parameter to preserve those Custom Fields. If you omit them from the update request, they will be lost.'
operationId: PutMeter
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 Meter to update.
required: true
style: simple
explode: false
schema:
type: string
requestBody:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/MeterRequest'
required: true
responses:
'200':
description: Return the updated Meter
content:
application/json:
schema:
$ref: '#/components/schemas/MeterResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
delete:
tags:
- Meter
summary: Delete Meter
description: Delete the Meter with the given UUID.
operationId: DeleteMeter
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 Meter to delete.
required: true
style: simple
explode: false
schema:
type: string
responses:
'200':
description: Return the deleted Meter
content:
application/json:
schema:
$ref: '#/components/schemas/MeterResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
/organizations/{orgId}/meters:
get:
tags:
- Meter
summary: List Meters
description: Retrieve a list of Meters that can be filtered by Product, Meter ID, or Meter short code.
operationId: ListMeters
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 Meters 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: productId
in: query
description: The UUIDs of the Products to retrieve Meters for.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: array
items:
type: string
- name: ids
in: query
description: List of Meter IDs to retrieve.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: array
items:
type: string
- name: codes
in: query
description: List of Meter codes to retrieve. These are the unique short codes that identify each Meter.
required: false
allowEmptyValue: true
style: form
explode: true
schema:
type: array
items:
type: string
responses:
'200':
description: List of Meters
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedMeterResponseData'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
post:
tags:
- Meter
summary: Create Meter
description: 'Create a new Meter.
When you create a Meter, you can define two types of field for usage data collection and ingest into the platform:
- `dataFields` to collect raw usage data measures - numeric quantitative data values or non-numeric point data values.
- `derivedFields` to derive usage data measures that are the result of applying a calculation to `dataFields`, `customFields`, or system `Timestamp` fields.
You can also:
- Create `customFields` for a Meter, which allows you to attach custom data to the Meter as name/value pairs.
- Create Global Meters, which are not tied to a specific Product and allow you collect to usage data that will form the basis of usage-based pricing across more than one of your Products.
**IMPORTANT! - use of PII:** The use of any of your end-customers'' Personally Identifiable Information (PII) in m3ter is restricted to a few fields on the **Account** entity. Please ensure that any fields you configure for Meters, such as Data Fields or Derived Fields, do not contain any end-customer PII data. See the Introduction section above for more details.
See also:
- Reviewing Meter Options.'
operationId: PostMeter
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/MeterRequest'
required: true
responses:
'200':
description: Return the created Meter
content:
application/json:
schema:
$ref: '#/components/schemas/MeterResponse'
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
components:
schemas:
DerivedField:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/DataField'
- required:
- calculation
properties:
calculation:
maxLength: 5000
minLength: 1
type: string
description: "The calculation used to transform the value of submitted `dataFields` in usage data. Calculation can reference `dataFields`, `customFields`, or system `Timestamp` fields. \n*(Example: datafieldms datafieldgb)* "
DataFieldCategory:
type: string
description: "The field type, which defines the type of data collected in the field. \n\n* **Who.** String. Use to collect usage data about an individual or organization - data events that answer a \"Who\" question, such as, \"Who or which organization logged-in to the service?\", \"Who was contacted?\", and so on.\n\n* **What.** String. Use to collect usage data about some object or thing, whether it be a physical object in the real world or something in a virtual context.\n\n* **Where.** String. Use to collect usage data about a location - where something happened, whether in physical geographical space or a virtual space.\n\n* **Measure.** Numeric. Use in a general way to collect quantitative usage data.\n\n* **Metadata.** String. *(Max. 256 characters).* Use for high-cardinality fields that you don't intend to segment when you aggregate the data.\n\n* **Income.** Numeric. Use to collect usage data associated with income.\n\n* **Cost.** Numeric. Use to collect usage data associated with costs.\n\n* **Other.** String. Use to collect textual usage not applicable to Who, What, or Where events."
enum:
- WHO
- WHERE
- WHAT
- OTHER
- METADATA
- MEASURE
- INCOME
- COST
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.
- **Update Entity:** On Update, version is required and must match the existing version because a check is performed to ensure sequential versioning is preserved. Version is incremented by 1 and listed in the response.'
format: int64
x-stainless-terraform-configurability: computed
x-stainless-terraform-always-send: true
description: ''
MeterRequest:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractRequestWithCustomFields'
- $ref: '#/components/schemas/AbstractRequest'
- required:
- code
- dataFields
- derivedFields
- name
properties:
productId:
maxLength: 36
minLength: 36
type: string
description: UUID of the product the Meter belongs to. *(Optional)* - if left blank, the Meter is global.
groupId:
maxLength: 36
minLength: 36
type: string
description: UUID of the group the Meter belongs to. *(Optional)*.
name:
maxLength: 200
minLength: 1
type: string
description: Descriptive name for the Meter.
code:
maxLength: 80
minLength: 1
pattern: ^([^[\p{Cntrl}\s]])|([^[\p{Cntrl}\s]][[^[\p{Cntrl}\s]] ]*[^[\p{Cntrl}\s]])$
type: string
description: 'Code of the Meter - unique short code used to identify the Meter.
**NOTE:** Code has a maximum length of 80 characters and must not contain non-printable or whitespace characters (except space), and cannot start/end with whitespace.'
dataFields:
maxItems: 15
minItems: 1
type: array
description: Used to submit categorized raw usage data values for ingest into the platform - either numeric quantitative values or non-numeric data values. At least one required per Meter; maximum 15 per Meter.
items:
$ref: '#/components/schemas/DataField'
derivedFields:
maxItems: 15
type: array
description: 'Used to submit usage data values for ingest into the platform that are the result of a calculation performed on `dataFields`, `customFields`, or system `Timestamp` fields. Raw usage data is not submitted using `derivedFields`. Maximum 15 per Meter. *(Optional)*.
**Note:** Required parameter. If you want to create a Meter without Derived Fields, use an empty array `[]`. If you use a `null`, you''ll receive an error.'
items:
$ref: '#/components/schemas/DerivedField'
MeterResponse:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractResponseWithCustomFields'
- $ref: '#/components/schemas/AbstractResponse'
- properties:
productId:
type: string
description: UUID of the Product the Meter belongs to. *(Optional)* - if blank, the Meter is global.
groupId:
type: string
description: UUID of the MeterGroup the Meter belongs to. *(Optional)*.
name:
type: string
description: Descriptive name for the Meter.
code:
type: string
description: Code of the Meter - unique short code used to identify the Meter.
dataFields:
type: array
description: Used to submit categorized raw usage data values for ingest into the platform - either numeric quantitative values or non-numeric data values. At least one required per Meter; maximum 15 per Meter.
items:
$ref: '#/components/schemas/DataField'
derivedFields:
type: array
description: Used to submit usage data values for ingest into the platform that are the result of a calculation performed on `dataFields`, `customFields`, or system `Timestamp` fields. Raw usage data is not submitted using `derivedFields`. Maximum 15 per Meter. *(Optional)*.
items:
$ref: '#/components/schemas/DerivedField'
dtCreated:
type: string
description: The DateTime when the meter was created *(in ISO-8601 format)*.
format: date-time
x-stainless-skip:
- terraform
dtLastModified:
type: string
description: The DateTime when the meter was last modified *(in ISO-8601 format)*.
format: date-time
x-stainless-skip:
- terraform
createdBy:
type: string
description: The id of the user who created this meter.
x-stainless-skip:
- terraform
lastModifiedBy:
type: string
description: The id of the user who last modified this meter.
x-stainless-skip:
- terraform
AbstractRequestWithCustomFields:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractRequest'
- properties:
customFields:
type: object
description: 'User defined fields enabling you to attach custom data. The value for a custom field can be either a string or a number.
If `customFields` can also be defined for this entity at the Organizational level, `customField` values defined at individual level override values of `customFields` with the same name defined at Organization level.
See [Working with Custom Fields](https://www.m3ter.com/docs/guides/creating-and-managing-products/working-with-custom-fields) in the m3ter documentation for more information.'
maxItems: 100
additionalProperties:
anyOf:
- title: StringCustomFieldReq
type: string
- title: IntegerCustomFieldReq
type: integer
- title: NumberCustomFieldReq
type: number
PaginatedMeterResponseData:
type: object
properties:
data:
type: array
description: ''
items:
$ref: '#/components/schemas/MeterResponse'
nextToken:
type: string
description: ''
description: ''
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: ''
AbstractResponseWithCustomFields:
type: object
description: ''
allOf:
- $ref: '#/components/schemas/AbstractResponse'
- properties:
customFields:
type: object
description: 'User defined fields enabling you to attach custom data. The value for a custom field can be either a string or a number.
If `customFields` can also be defined for this entity at the Organizational level,`customField` values defined at individual level override values of `customFields` with the same name defined at Organization level.
See [Working with Custom Fields](https://www.m3ter.com/docs/guides/creating-and-managing-products/working-with-custom-fields) in the m3ter documentation for more information.'
additionalProperties:
anyOf:
- title: StringCustomFieldRes
type: string
- title: IntegerCustomFieldRes
type: integer
- title: NumberCustomFieldRes
type: number
DataField:
required:
- category
- code
- name
type: object
properties:
category:
description: The type of field (WHO, WHAT, WHERE, MEASURE, METADATA, INCOME, COST, OTHER).
$ref: '#/components/schemas/DataFieldCategory'
code:
maxLength: 80
minLength: 1
pattern: ^[\p{L}_$][\p{L}_$0-9]*$
type: string
description: 'Short code to identify the field
**NOTE:** Code has a maximum length of 80 characters and can only contain letters, numbers, underscore, and the dollar character, and must not start with a number.'
name:
maxLength: 200
minLength: 1
type: string
description: Descriptive name of the field.
unit:
maxLength: 50
minLength: 1
type: string
description: The units to measure the data with. Should conform to *Unified Code for Units of Measure* (UCUM). Required only for numeric field categories.
description: ''
responses:
Error:
description: Error message
content:
application/json:
schema:
type: object
properties:
message:
type: string
securitySchemes:
OAuth2:
type: oauth2
description: "m3ter supports machine to machine authentication using the `clientCredentials` OAuth2 flow.\n\nThe `authorizationCode` flow controls access for human users via the m3ter Console application. \n"
flows:
clientCredentials:
tokenUrl: /oauth/token
scopes:
m3ter-resources/m3ter-scope: m3ter resources
measurements:upload: Upload measurements
measurements:fileUpload: Upload file
measurements:retrieve: Retrieve measurements
authorizationCode:
authorizationUrl: https://m3ter.auth.us-east-1.amazoncognito.com/oauth2/authorize
tokenUrl: https://m3ter.auth.us-east-1.amazoncognito.com/oauth2/token
scopes:
m3ter-resources/m3ter-scope: m3ter resources
openid: OpenID
email: email
measurements:upload: Upload measurements
measurements:fileUpload: Upload file
measurements:retrieve: Retrieve measurements