curl --request POST \
--url https://api.lava.so/v1/meters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "GPT-4 Usage",
"rate_type": "fixed",
"tier_type": "tokens_1m",
"tiers": [
{
"start": "0",
"rate": "0.50"
}
],
"meter_slug": "gpt4-usage"
}
'import requests
url = "https://api.lava.so/v1/meters"
payload = {
"name": "GPT-4 Usage",
"rate_type": "fixed",
"tier_type": "tokens_1m",
"tiers": [
{
"start": "0",
"rate": "0.50"
}
],
"meter_slug": "gpt4-usage"
}
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({
name: 'GPT-4 Usage',
rate_type: 'fixed',
tier_type: 'tokens_1m',
tiers: [{start: '0', rate: '0.50'}],
meter_slug: 'gpt4-usage'
})
};
fetch('https://api.lava.so/v1/meters', 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.lava.so/v1/meters",
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([
'name' => 'GPT-4 Usage',
'rate_type' => 'fixed',
'tier_type' => 'tokens_1m',
'tiers' => [
[
'start' => '0',
'rate' => '0.50'
]
],
'meter_slug' => 'gpt4-usage'
]),
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.lava.so/v1/meters"
payload := strings.NewReader("{\n \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\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.lava.so/v1/meters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lava.so/v1/meters")
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 \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\n}"
response = http.request(request)
puts response.read_body{
"meter_id": "<string>",
"meter_slug": "<string>",
"name": "<string>",
"tiers": [
{
"start": 123,
"rate": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}Create meter
Create a new meter for the authenticated merchant. Meters define fee models for API request billing.
curl --request POST \
--url https://api.lava.so/v1/meters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "GPT-4 Usage",
"rate_type": "fixed",
"tier_type": "tokens_1m",
"tiers": [
{
"start": "0",
"rate": "0.50"
}
],
"meter_slug": "gpt4-usage"
}
'import requests
url = "https://api.lava.so/v1/meters"
payload = {
"name": "GPT-4 Usage",
"rate_type": "fixed",
"tier_type": "tokens_1m",
"tiers": [
{
"start": "0",
"rate": "0.50"
}
],
"meter_slug": "gpt4-usage"
}
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({
name: 'GPT-4 Usage',
rate_type: 'fixed',
tier_type: 'tokens_1m',
tiers: [{start: '0', rate: '0.50'}],
meter_slug: 'gpt4-usage'
})
};
fetch('https://api.lava.so/v1/meters', 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.lava.so/v1/meters",
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([
'name' => 'GPT-4 Usage',
'rate_type' => 'fixed',
'tier_type' => 'tokens_1m',
'tiers' => [
[
'start' => '0',
'rate' => '0.50'
]
],
'meter_slug' => 'gpt4-usage'
]),
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.lava.so/v1/meters"
payload := strings.NewReader("{\n \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\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.lava.so/v1/meters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lava.so/v1/meters")
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 \"name\": \"GPT-4 Usage\",\n \"rate_type\": \"fixed\",\n \"tier_type\": \"tokens_1m\",\n \"tiers\": [\n {\n \"start\": \"0\",\n \"rate\": \"0.50\"\n }\n ],\n \"meter_slug\": \"gpt4-usage\"\n}"
response = http.request(request)
puts response.read_body{
"meter_id": "<string>",
"meter_slug": "<string>",
"name": "<string>",
"tiers": [
{
"start": 123,
"rate": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}{
"error": {
"message": "Invalid authentication credentials",
"code": "forward_token_json_invalid",
"status": 400,
"issues": [
{
"path": [
"model"
],
"message": "Missing required field: model"
},
{
"path": [
"messages",
"0",
"content"
],
"message": "Invalid message content format"
}
]
}
}Authorizations
Bearer token authentication used for standard API calls. Format: 'Bearer YOUR_API_KEY'
Body
Display name of the meter
"GPT-4 Usage"
Fee model: 'fixed' (credits per usage unit) or 'percentage' (percentage of provider base cost)
fixed, percentage "fixed"
Unit type for pricing tiers
tokens_1m, characters_1m, minutes, requests "tokens_1m"
Pricing tiers (at least one required, must be in ascending start order)
Show child attributes
Show child attributes
Unique slug identifier for the meter. If not provided, one will be auto-generated.
"gpt4-usage"
Response
Meter created
Unique identifier for the meter
Slug identifier for the meter used in forward token authentication
Display name of the meter
Fee model: 'fixed' (credits per usage unit) or 'percentage' (percentage of provider base cost)
fixed, percentage Pricing tiers for the meter
Show child attributes
Show child attributes
When the meter was created