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
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-inbound
.handler.export
<string>
- The name of the exported type. Value should beOpenMeterInboundPolicy
.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.
apiUrl
<string>
- The URL of the OpenMeter API endpoint. Defaults to"https://openmeter.cloud"
.apiKey
(required)<string>
- The API key to use when sending metering calls to OpenMeter.meter
<undefined>
- A single meter configuration or an array of meter configurations for OpenMeter.meterOnStatusCodes
<undefined>
- A list of successful status codes and ranges "200-299, 304" that should trigger a metering event. Defaults to"200-299"
.eventSource
<string>
- The event's source (e.g. the service name). Defaults to"api-gateway"
.requiredEntitlements
<string[]>
- A list of entitlements (feature keys) required in order for the call to be allowed.subjectPath
<string>
- The path to the property onrequest.user
that contains the subject used for meters and entitlements. For example.data.accountId
would read therequest.user.data.accountId
property. Defaults to".sub"
.
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.
Additionally, the policy can check entitlements before allowing access to your API. When entitlement checking is enabled, the policy will:
- Check if the subject has access to the required features
- Block the request if the subject doesn't have access to any required feature
- Log detailed information about failed entitlements
Programmatic Meters
You can dynamically set meters for each request using the
OpenMeterInboundPolicy.setMeters
method:
Code
Examples
Basic Metering
Code
Multiple Meters
Code
Metering with Entitlement Checking
Code
Custom Status Codes
Code
CloudEvents Format
The policy sends events to OpenMeter in CloudEvents format. Each event includes:
specversion
: Always "1.0"id
: Unique identifier (combines request ID and meter type)time
: ISO 8601 timestampsource
: The configured event sourcesubject
: The user/customer identifiertype
: The meter typedata
: Custom data from the meter configuration
You can override CloudEvents fields when setting meters dynamically:
Code
Read more about how policies work