Account balance query API
Endpoint description
The account balance query lets users check their New API account balance with their own API key. This endpoint only queries the balance; it triggers no generation task and charges nothing.
Endpoint: GET /api/user/balance
Billing: Free.
Balance unit: yuan. In the response, effective_amount has already been converted by quota_per_unit into the yuan amount a user can understand.
Request parameters
Headers
| Parameter | Type | Required | Notes |
|---|---|---|---|
| Authorization | string | yes | Bearer YOUR_API_KEY |
Query parameters
None.
Request examples
cURL
curl -X GET https://www.suno-api.io/api/user/balance \
-H "Authorization: Bearer YOUR_API_KEY"
Python
import requests
api_key = "YOUR_API_KEY"
response = requests.get(
"https://www.suno-api.io/api/user/balance",
headers={"Authorization": f"Bearer {api_key}"},
timeout=30,
)
response.raise_for_status()
result = response.json()
balance = result["data"]["balance"]
print(balance["formatted_effective_amount"])
Node.js
const apiKey = "YOUR_API_KEY";
const response = await fetch("https://www.suno-api.io/api/user/balance", {
method: "GET",
headers: {
Authorization: `Bearer ${apiKey}`,
},
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const result = await response.json();
console.log(result.data.balance.formatted_effective_amount);
PHP
<?php
$apiKey = "YOUR_API_KEY";
$ch = curl_init("https://www.suno-api.io/api/user/balance");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if ($response === false) {
throw new Exception(curl_error($ch));
}
curl_close($ch);
$result = json_decode($response, true);
echo $result["data"]["balance"]["formatted_effective_amount"];
?>
Response
{
"success": true,
"message": "",
"data": {
"object": "user_balance",
"user": {
"id": 123,
"username": "example",
"quota": 207900000,
"used_quota": 0,
"request_count": 10,
"group": "default",
"status": 1
},
"token": {
"id": 456,
"name": "default",
"group": "default",
"status": 1,
"remain_quota": 207900000,
"used_quota": 0,
"unlimited_quota": true,
"model_limits_enabled": false,
"model_limits": {}
},
"balance": {
"user_quota": 207900000,
"token_quota": 207900000,
"effective_quota": 207900000,
"user_amount": 415.8,
"token_amount": 415.8,
"effective_amount": 415.8,
"amount_unit": "yuan",
"formatted_effective_amount": "415.80 yuan"
},
"display": {
"quota_per_unit": 500000,
"amount_unit": "yuan"
}
}
}
Field reference
| Field | Type | Notes |
|---|---|---|
balance.user_quota |
number | Raw remaining quota of the user account |
balance.token_quota |
number | Raw remaining quota of the current API key; an unlimited-quota key returns the user balance |
balance.effective_quota |
number | Raw quota actually available to the current API key |
balance.effective_amount |
number | The actually available amount after conversion |
balance.amount_unit |
string | Fixed to yuan |
balance.formatted_effective_amount |
string | A balance string that can be shown directly to the user |
display.quota_per_unit |
number | The raw quota conversion unit; amount = quota / quota_per_unit |
Notes
- This endpoint uses the same API key as the generation endpoints.
- When an API key's balance is exhausted, balance queries are still allowed.
- Disabled or expired API keys cannot query.
- The endpoint does not return USD, CNY,
$or¥; it always usesyuan, to avoid misunderstandings.
Get an API key
Create an API key in the console after signing up. ¥0.6 per run returns 2 tracks, downloads are unlimited, and no phone number is required.
Get API key Back to overview