Get Project Usage
Retrieve credit usage, subscription details, and per-service request counts for a project within the current credit cycle.
curl --request GET \
--url 'https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key='import requests
url = "https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=', 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://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"creditsRemaining": 486100,
"creditsUsed": 13900,
"prepaidCreditsRemaining": 50000,
"prepaidCreditsUsed": 0,
"creditCycle": {
"start": "2026-04-01",
"end": "2026-05-01"
},
"subscriptionDetails": {
"billingCycle": {
"start": "2026-04-01",
"end": "2026-05-01"
},
"creditsLimit": 500000,
"plan": "business"
},
"credits": {
"rpc": 4500,
"enhancedApi": 1200,
"walletApi": 0,
"das": 5000,
"webhooks": 800,
"laserstreamGrpc": 1500,
"laserstreamWebsocket": 800,
"preConfirmations": 100,
"archival": 0,
"photon": 0,
"other": 0
},
"requests": {
"rpc": 4500,
"enhancedApi": 1200,
"walletApi": 0,
"das": 5000,
"webhooks": 800,
"preConfirmations": 50,
"archival": 0,
"photon": 0,
"other": 0
},
"dataTransfer": {
"laserstreamGrpc": 15000000,
"laserstreamWebsocket": 8000000
}
}{
"statusCode": 400,
"message": "Invalid project id",
"error": "Bad Request"
}{
"statusCode": 401,
"message": "Missing or invalid API key",
"error": "Unauthorized"
}{
"statusCode": 403,
"message": "Admin API not enabled for this project",
"error": "Forbidden"
}{
"statusCode": 429,
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests"
}{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}Overview
Returns a complete picture of a project’s credit consumption for the current credit cycle, including credits remaining, subscription plan details, and a breakdown of requests by service type (RPC, DAS, gRPC, WebSocket, etc.). All credit figures are scoped to thecreditCycle — the window credits accrue and reset against, derived from the subscription’s billing anchor. Every project has one, including free plans. The subscriptionDetails.billingCycle is the invoicing window; it is informational and null on free plans, which are never invoiced.
Request Parameters
Response Fields
YYYY-MM-DD format (UTC).YYYY-MM-DD format (UTC).null on free plans, which are never invoiced. On paid plans this normally matches creditCycle.YYYY-MM-DD format.YYYY-MM-DD format."business", "professional").creditsUsed after rounding.laserstreamGrpc, laserstreamWebsocket) do not appear here — see dataTransfer. Fields: rpc, enhancedApi, walletApi, das, webhooks, preConfirmations, archival, photon, other.credits but never in requests. Fields: laserstreamGrpc, laserstreamWebsocket.Request Parameters
Authorizations
API key passed as a query parameter.
Path Parameters
The project ID to retrieve usage for. Must match the project associated with the API key.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response
Project usage retrieved successfully.
Number of credits remaining in the current credit cycle. Calculated as creditsLimit - regularCreditsUsed, floored at 0.
487500
Total credits consumed in the current credit cycle, including both regular and prepaid credits.
12500
Number of prepaid credits remaining.
50000
Number of prepaid credits consumed in the current credit cycle.
0
The window every credit figure in this response is scoped to — the period credits accrue and reset against, derived from the subscription's billing anchor. Always present, for every plan, including free plans that are never invoiced.
Show child attributes
Show child attributes
Details about the project's subscription plan and invoicing cycle.
Show child attributes
Show child attributes
Per-product credit consumption for the current credit cycle, in whole credits.
Covers every product. Values are accumulated raw and rounded once at the end to
match billing, so per-product credits may not sum exactly to creditsUsed after
rounding.
Show child attributes
Show child attributes
Request counts for the current credit cycle, for request-metered products only.
The bandwidth-metered LaserStream products (laserstreamGrpc, laserstreamWebsocket)
do not appear here — see dataTransfer.
Show child attributes
Show child attributes
Bytes transferred for the current credit cycle, for the bandwidth-metered
LaserStream products only. These products are billed by data transferred, not
request count, so they appear here and in credits but never in requests.
Show child attributes
Show child attributes
Was this page helpful?
curl --request GET \
--url 'https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key='import requests
url = "https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=', 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://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=")
.asString();require 'uri'
require 'net/http'
url = URI("https://admin-api.helius.xyz/v0/admin/projects/{id}/usage?api-key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"creditsRemaining": 486100,
"creditsUsed": 13900,
"prepaidCreditsRemaining": 50000,
"prepaidCreditsUsed": 0,
"creditCycle": {
"start": "2026-04-01",
"end": "2026-05-01"
},
"subscriptionDetails": {
"billingCycle": {
"start": "2026-04-01",
"end": "2026-05-01"
},
"creditsLimit": 500000,
"plan": "business"
},
"credits": {
"rpc": 4500,
"enhancedApi": 1200,
"walletApi": 0,
"das": 5000,
"webhooks": 800,
"laserstreamGrpc": 1500,
"laserstreamWebsocket": 800,
"preConfirmations": 100,
"archival": 0,
"photon": 0,
"other": 0
},
"requests": {
"rpc": 4500,
"enhancedApi": 1200,
"walletApi": 0,
"das": 5000,
"webhooks": 800,
"preConfirmations": 50,
"archival": 0,
"photon": 0,
"other": 0
},
"dataTransfer": {
"laserstreamGrpc": 15000000,
"laserstreamWebsocket": 8000000
}
}{
"statusCode": 400,
"message": "Invalid project id",
"error": "Bad Request"
}{
"statusCode": 401,
"message": "Missing or invalid API key",
"error": "Unauthorized"
}{
"statusCode": 403,
"message": "Admin API not enabled for this project",
"error": "Forbidden"
}{
"statusCode": 429,
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests"
}{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}