文档

查询用户余额

- 查询用户账户的总体剩余额度和已使用额度

  • 查询用户账户的总体剩余额度和已使用额度
  • 获取用户级别的余额信息
  • 支持 CORS 跨域请求
  • 实时余额监控

获取当前用户账户的剩余余额和已使用余额。此接口返回用户级别的余额信息,与具体令牌无关,用于查看用户账户的总体余额。

请求示例

bash curl --request GET \ --url 'https://api.openveer.com/v1/user/balance' \ --header 'Authorization: Bearer <token>'

```python
import requests

API_BASE = 'https://api.openveer.com'
API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxx'

headers = {
'Authorization': f'Bearer {API_KEY}'
}

def get_user_balance():
response = requests.get(f'{API_BASE}/v1/user/balance', headers=headers)
data = response.json()

  if data.get('success'):
      print(f"用户剩余余额: {data['remain_balance']}")
      print(f"用户已使用: {data['used_balance']}")
  else:
      print(f"查询失败: {data.get('message')}")

  return data

get_user_balance()
```

```javascript
const API_BASE = 'https://api.openveer.com';
const API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxx';

async function getUserBalance() {
const response = await fetch(${API_BASE}/v1/user/balance, {
headers: {
'Authorization': Bearer ${API_KEY}
}
});

const data = await response.json();

if (data.success) {
  console.log(`用户剩余余额: ${data.remain_balance}`);
  console.log(`用户已使用: ${data.used_balance}`);
} else {
  console.error('查询失败:', data.message);
}

return data;

}

getUserBalance();
```

```go
package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)

type BalanceResponse struct {
Success bool json:"success"
Message string json:"message,omitempty"
RemainBalance float64 json:"remain_balance"
UsedBalance float64 json:"used_balance"
}

func main() {
url := "https://api.openveer.com/v1/user/balance"

  req, _ := http.NewRequest("GET", url, nil)
  req.Header.Set("Authorization", "Bearer <token>")

  client := &http.Client{}
  resp, err := client.Do(req)
  if err != nil {
      panic(err)
  }
  defer resp.Body.Close()

  body, _ := ioutil.ReadAll(resp.Body)

  var result BalanceResponse
  json.Unmarshal(body, &result)

  if result.Success {
      fmt.Printf("剩余余额: %.2f\n", result.RemainBalance)
      fmt.Printf("已使用: %.2f\n", result.UsedBalance)
  }

}
```

```java
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.openveer.com/v1/user/balance";

      HttpClient client = HttpClient.newHttpClient();
      HttpRequest request = HttpRequest.newBuilder()
          .uri(URI.create(url))
          .header("Authorization", "Bearer <token>")
          .GET()
          .build();

      HttpResponse<String> response = client.send(request,
          HttpResponse.BodyHandlers.ofString());

      System.out.println(response.body());
  }

}
```

```php

```

```ruby
require 'net/http'
require 'json'
require 'uri'

api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxx'

url = URI("https://api.openveer.com/v1/user/balance")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer #{api_key}"

response = http.request(request)
data = JSON.parse(response.body)

if data['success']
puts "剩余余额: #{data['remain_balance']}"
puts "已使用: #{data['used_balance']}"
else
puts "查询失败: #{data['message']}"
end
```

```swift
import Foundation

let apiKey = "sk-xxxxxxxxxxxxxxxxxxxxxx"
let url = URL(string: "https://api.openveer.com/v1/user/balance")!

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer (apiKey)", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: (error)")
return
}

  if let data = data, let responseString = String(data: data, encoding: .utf8) {
      print(responseString)
  }

}

task.resume()
```

```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
var apiKey = "sk-xxxxxxxxxxxxxxxxxxxxxx";
var url = "https://api.openveer.com/v1/user/balance";

      using var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");

      var response = await client.GetAsync(url);
      var result = await response.Content.ReadAsStringAsync();

      Console.WriteLine(result);
  }

}
```

响应示例

json { "success": true, "remain_balance": 100.0, "remain_credits": 1000, "used_balance": 25.5, "used_credits": 255 }

json { "success": false, "message": "获取用户额度失败: record not found" }

json { "success": false, "message": "获取已使用额度失败: record not found" }

json { "error": { "code": 401, "message": "身份验证失败,请检查您的API密钥", "type": "authentication_error" } }

json { "error": { "code": 429, "message": "请求过于频繁,请稍后再试", "type": "rate_limit_error" } }

认证

Authorization string
所有接口均需要使用 Bearer Token 进行认证 获取 API Key: 访问 [API Key 管理页面](https://openveer.com) 获取您的 API Key 使用时在请求头中添加: ``` Authorization: Bearer YOUR_API_KEY ```

接口端点

GET /v1/user/balance
GET /user/balance

两个端点功能相同,可以任选其一使用。

响应

success boolean
请求是否成功
message string
错误信息(仅失败时返回)
remain_balance float
用户剩余余额(成功时返回)。
remain_credits integer
用户剩余积分(成功时返回)。
used_balance float
用户已使用余额(成功时返回)
used_credits float
用户已使用积分(成功时返回)

令牌余额 vs 用户余额

对比项 令牌余额 (/v1/balance) 用户余额 (/v1/user/balance)
作用范围 单个令牌 整个用户账户
数据来源 Token 的 RemainQuota 和 UsedQuota User 的 quota 和 used_quota
使用场景 监控单个 API Key 的使用情况 查看用户账户总体余额
受限于 令牌级别的额度限制 用户级别的额度限制

使用场景

  • 查看用户账户的总体余额
  • 用于充值提醒和余额告警
  • 在用户控制面板显示账户余额
注意
**余额单位说明** 余额数值的单位取决于系统配置: * **USD** - 美元 * **Credits** - 积分

常见错误

错误信息 原因 解决方案
无 Authorization 头 未提供 Authorization 请求头 添加 Authorization: Bearer sk-xxxxx 请求头
获取用户额度失败 用户不存在 检查令牌关联的用户是否存在
获取已使用额度失败 数据库查询错误 联系管理员检查系统状态
警告
**安全提示** API Key 相当于密码,请妥善保管,不要泄露给他人。生产环境请务必使用 HTTPS。