OpenMeter Metering Policy
Send usage metrics to OpenMeter for metering and billing. This policy allows you to track API usage by sending events to OpenMeter's API in CloudEvents format.
With this policy, you'll benefit from:
- Usage-Based Billing: Implement precise metering for pay-as-you-go pricing models
- Real-Time Analytics: Track API usage patterns and customer behavior as they happen
- Customizable Event Tracking: Capture specific metrics that matter to your business
- Customer Segmentation: Identify usage patterns across different customer segments
- Flexible Integration: Works seamlessly with OpenMeter's CloudEvents-based API
- Batch Processing: Efficiently sends events in batches to minimize performance impact
Configuration
The configuration shows how to configure the policy in the 'policies.json' document.
Code(json)
Policy Configuration
name
<string>
- The name of your policy instance. This is used as a reference in your routes.policyType
<string>
- The identifier of the policy. This is used by the Zuplo UI. Value should beopenmeter-metering-inbound
.handler.export
<string>
- The name of the exported type. Value should beOpenMeterMeteringInboundPolicy
.handler.module
<string>
- The module containing the policy. Value should be$import(@zuplo/runtime)
.handler.options
<object>
- The options for this policy. See Policy Options below.
Policy Options
The options for this policy are specified below. All properties are optional unless specifically marked as required.
url
(required)<string>
- The URL of the OpenMeter API endpoint.apiKey
<string>
- The API key to use when sending metering calls to OpenMeter.eventType
<string>
- The type of event to use when sending metering calls to OpenMeter (overridable in code).meterValue
<number>
- The value to use when sending metering calls to OpenMeter (overridable in code).customerIdPropertyPath
<string>
- The path to the property onrequest.user
contains the customer ID. For example.data.accountNumber
would read therequest.user.data.accountNumber
property.customerId
<string>
- The default customerId (subject) for all metering calls - overridable in code and bycustomerIdPropertyPath
.source
<string>
- The source identifier for the event (e.g. service name).data
<object>
- A dictionary of additional data to be sent to OpenMeter (extensible in code).statusCodes
(required)<undefined>
- A list of successful status codes and ranges "200-299, 304" that should trigger a metering call to OpenMeter.
Using the Policy
How it works
The policy sends usage events to OpenMeter's API in CloudEvents format whenever a request matches the configured status codes. The events include customer identification, event type, and custom data that can be used for metering and billing.
Configuration
Code(json)
Options
url
(required): The URL of the OpenMeter API endpoint.apiKey
(optional): The API key to use when sending metering calls to OpenMeter.eventType
(optional): The type of event to use when sending metering calls to OpenMeter.meterValue
(optional): The value to use when sending metering calls to OpenMeter.customerIdPropertyPath
(optional): The path to the property onrequest.user
that contains the customer ID.customerId
(optional): The default customerId (subject) for all metering calls.source
(optional): The source identifier for the event (e.g., service name).data
(optional): A dictionary of additional data to be sent to OpenMeter.statusCodes
(required): A list of successful status codes that should trigger a metering call to OpenMeter.
Dynamic Configuration
You can dynamically set properties for each request using the
OpenMeterMeteringPolicy.setRequestProperties
method:
Code(typescript)
Example
Code(json)
This configuration will send an event to OpenMeter for each successful API request (status codes 200-299) with the specified event type, source, and custom data.
Read more about how policies work