Admin
Get Project Usage
Retrieve credit usage, subscription details, and per-service request counts for a project within the current credit cycle.
GET
/
v0
/
admin
/
projects
/
{id}
/
usage
Get Project Usage
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
The project ID to retrieve usage for. Must match the project associated with the API key used for authentication.
Response Fields
Credits remaining in the current credit cycle. Calculated as the plan’s credit limit minus regular credits consumed, floored at zero.
Total credits consumed in the current credit cycle, including both regular and prepaid credits.
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.
Start and end dates of the current invoicing cycle. Informational only —
null on free plans, which are never invoiced. On paid plans this normally matches creditCycle.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.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. Fields: rpc, enhancedApi, walletApi, das, webhooks, preConfirmations, archival, photon, other.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. Fields: laserstreamGrpc, laserstreamWebsocket.Request Parameters
The project ID to retrieve usage for. Must match the project associated with the API key.
Path Parameters
Response
Project usage retrieved successfully.
Was this page helpful?
⌘I
Get Project Usage
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"
}