curl --request GET \
--url https://api.simpl.gg/v1/billing/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.simpl.gg/v1/billing/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.simpl.gg/v1/billing/usage', 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.simpl.gg/v1/billing/usage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.simpl.gg/v1/billing/usage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.simpl.gg/v1/billing/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.simpl.gg/v1/billing/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"period": "2026-09",
"total_cost": 24.5,
"credit_applied": 5,
"balance_due": 19.5,
"projects": [
{
"project_id": "proj_abc",
"name": "My Game",
"cost": 18
}
]
}Get metered usage
Usage for one billing period, broken down by project. Defaults to the
current period, which is live and moves as servers run. Pass month to
read a closed period.
credit_applied is the plan credit consumed: pro carries $5/mo of
server credit, which does not roll over. balance_due is
total_cost minus credit_applied, floored at zero.
curl --request GET \
--url https://api.simpl.gg/v1/billing/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.simpl.gg/v1/billing/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.simpl.gg/v1/billing/usage', 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.simpl.gg/v1/billing/usage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.simpl.gg/v1/billing/usage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.simpl.gg/v1/billing/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.simpl.gg/v1/billing/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"period": "2026-09",
"total_cost": 24.5,
"credit_applied": 5,
"balance_due": 19.5,
"projects": [
{
"project_id": "proj_abc",
"name": "My Game",
"cost": 18
}
]
}Authorizations
Developer session token from POST /v1/auth/login or
POST /v1/auth/register. Valid 7 days.
Authenticates the developer control plane. It also reaches the server
and build endpoints, which a dashboard has to drive and which no
session can otherwise call: an API key's value is returned once, at
mint, so nothing can read back a key for an existing project. On those
endpoints a session names its project with project_id, or is
resolved from the resource it addresses, and is always checked against
the account that owns it.
It reaches no player-facing game endpoint.
Query Parameters
Billing month to report, as YYYY-MM. Defaults to the current period.
^[0-9]{4}-(0[1-9]|1[0-2])$"2026-08"
Response
Usage for the period.
Metered usage for one billing period, broken down by project. Costs are USD. The current period is live and moves as servers run.
Billing period in YYYY-MM.
^[0-9]{4}-(0[1-9]|1[0-2])$"2026-09"
24.5
Plan credit applied to this period. Pro accounts carry $5/mo of server credit; it does not roll over.
5
total_cost minus credit_applied, floored at zero.
19.5
Show child attributes
Show child attributes