curl --request POST \
--url https://api.paygentic.io/v0/billableMetrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "<string>",
"merchantId": "<string>",
"name": "<string>",
"unit": "<string>",
"eventType": "<string>",
"productId": "<string>",
"itemId": "<string>",
"valueProperty": "<string>",
"groupBy": {},
"eventFrom": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.paygentic.io/v0/billableMetrics"
payload = {
"description": "<string>",
"merchantId": "<string>",
"name": "<string>",
"unit": "<string>",
"eventType": "<string>",
"productId": "<string>",
"itemId": "<string>",
"valueProperty": "<string>",
"groupBy": {},
"eventFrom": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: '<string>',
merchantId: '<string>',
name: '<string>',
unit: '<string>',
eventType: '<string>',
productId: '<string>',
itemId: '<string>',
valueProperty: '<string>',
groupBy: {},
eventFrom: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.paygentic.io/v0/billableMetrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.paygentic.io/v0/billableMetrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'description' => '<string>',
'merchantId' => '<string>',
'name' => '<string>',
'unit' => '<string>',
'eventType' => '<string>',
'productId' => '<string>',
'itemId' => '<string>',
'valueProperty' => '<string>',
'groupBy' => [
],
'eventFrom' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.paygentic.io/v0/billableMetrics"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.paygentic.io/v0/billableMetrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paygentic.io/v0/billableMetrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "bm_w9x0y1z2a3b4c5d6",
"object": "billableMetric",
"aggregation": "SUM",
"createdAt": "2024-01-15T10:30:00Z",
"description": "Total tokens consumed by Claude language model interactions",
"merchantId": "org_e7f8g9h0i1j2k3l4",
"name": "Claude Tokens",
"productId": "prod_m5n6o7p8q9r0s1t2",
"taxRate": 8.5,
"unit": "tokens",
"updatedAt": "2024-01-15T10:30:00Z"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}Create
Create a new billable metric for a merchant organization. A Billable Metric represents a metric that can be used to measure the usage of a Product. It contains information about the metric, such as its name, description, and units.
curl --request POST \
--url https://api.paygentic.io/v0/billableMetrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "<string>",
"merchantId": "<string>",
"name": "<string>",
"unit": "<string>",
"eventType": "<string>",
"productId": "<string>",
"itemId": "<string>",
"valueProperty": "<string>",
"groupBy": {},
"eventFrom": "2023-11-07T05:31:56Z"
}
'import requests
url = "https://api.paygentic.io/v0/billableMetrics"
payload = {
"description": "<string>",
"merchantId": "<string>",
"name": "<string>",
"unit": "<string>",
"eventType": "<string>",
"productId": "<string>",
"itemId": "<string>",
"valueProperty": "<string>",
"groupBy": {},
"eventFrom": "2023-11-07T05:31:56Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: '<string>',
merchantId: '<string>',
name: '<string>',
unit: '<string>',
eventType: '<string>',
productId: '<string>',
itemId: '<string>',
valueProperty: '<string>',
groupBy: {},
eventFrom: '2023-11-07T05:31:56Z'
})
};
fetch('https://api.paygentic.io/v0/billableMetrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.paygentic.io/v0/billableMetrics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'description' => '<string>',
'merchantId' => '<string>',
'name' => '<string>',
'unit' => '<string>',
'eventType' => '<string>',
'productId' => '<string>',
'itemId' => '<string>',
'valueProperty' => '<string>',
'groupBy' => [
],
'eventFrom' => '2023-11-07T05:31:56Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.paygentic.io/v0/billableMetrics"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.paygentic.io/v0/billableMetrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.paygentic.io/v0/billableMetrics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"<string>\",\n \"merchantId\": \"<string>\",\n \"name\": \"<string>\",\n \"unit\": \"<string>\",\n \"eventType\": \"<string>\",\n \"productId\": \"<string>\",\n \"itemId\": \"<string>\",\n \"valueProperty\": \"<string>\",\n \"groupBy\": {},\n \"eventFrom\": \"2023-11-07T05:31:56Z\"\n}"
response = http.request(request)
puts response.read_body{
"id": "bm_w9x0y1z2a3b4c5d6",
"object": "billableMetric",
"aggregation": "SUM",
"createdAt": "2024-01-15T10:30:00Z",
"description": "Total tokens consumed by Claude language model interactions",
"merchantId": "org_e7f8g9h0i1j2k3l4",
"name": "Claude Tokens",
"productId": "prod_m5n6o7p8q9r0s1t2",
"taxRate": 8.5,
"unit": "tokens",
"updatedAt": "2024-01-15T10:30:00Z"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}{
"message": "The requested resource was not found",
"error": "not_found"
}Authorizations
API key authentication
Body
Aggregation calculation method for metric values.
SUM, COUNT, AVG, MIN, MAX, UNIQUE_COUNT, LATEST Explanatory text describing what the metric tracks and how it's used for billing. Sample values: 'Total tokens consumed by Claude language model interactions', 'Gigabytes of cloud storage utilized', 'Count of machine learning inference requests processed', 'Quantity of AI-generated images created', 'Compute hours spent training neural networks', 'Terabytes of data transferred'
The unique identifier of the merchant organization associated with the billable metric.
^org_[a-zA-Z0-9]+$Human-readable label identifying what this metric measures. Sample values: 'Claude Tokens', 'Storage Capacity', 'Model Inference Calls', 'Generated Images', 'Training Compute Hours', 'Data Transfer Volume'
Measurement unit used when aggregating this metric's values. Common examples: 'tokens', 'GB', 'calls', 'images', 'hours', 'TB', 'queries', 'requests'
CloudEvents type for meter routing. Links this billable metric to the metering service.
1The product this metric belongs to. Required unless itemId is supplied, in which case the product is derived from that item's catalog.
^prod_[a-zA-Z0-9]+$Optional item tag, used to map this metric's invoice lines to an external accounting/tax identity. When supplied, productId is derived from the item's catalog and a supplied productId that disagrees is rejected.
^itm_[a-zA-Z0-9]+$JSONPath to extract a numeric value from event data. Must start with $. (example: $.amount or $.payload.bytes). Required for SUM/AVG/MIN/MAX/LATEST aggregations. Optional for UNIQUE_COUNT, which counts distinct values of this property when set and distinct events when not. Not stored for COUNT.
^\$\.[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*$Map of dimension name to JSONPath for group-by queries. Each value must start with $. (example: $.region).
Show child attributes
Show child attributes
Only count events after this timestamp. Used for meter versioning.
Response
Billable metric created successfully
Unique identifier for a billable metric
^bm_[a-zA-Z0-9]+$billableMetric SUM, COUNT, AVG, MIN, MAX, UNIQUE_COUNT, LATEST Unique identifier for an organization
^org_[a-zA-Z0-9]+$The product this metric belongs to. Always populated; derived from the item's catalog when the metric is tagged with an item.
^prod_[a-zA-Z0-9]+$The item this metric is tagged with, or null when untagged. Used to map this metric's invoice lines to an external accounting/tax identity.
^itm_[a-zA-Z0-9]+$Show child attributes
Show child attributes
Was this page helpful?