Skip to content

Usage

Query token usage records within a specified time range using a Management API Key.

Management API Key authentication is required.

Authorization: Bearer <management_api_key>
GET /management/usage
ParameterTypeRequiredDescription
start_timeint64YesStart time as Unix timestamp
end_timeint64YesEnd time as Unix timestamp
modelstringNoFilter by model
token_idstringNoFilter by token ID
user_idstringNoOrganization admins can filter by member
pageuint64NoDefault is 1
pagesizeuint64NoDefault is 20
  • start_time and end_time must both be greater than 0
  • start_time must be less than end_time
  • A single query cannot exceed a 31-day time range
Terminal window
curl -X GET "https://portal-api.r9s.ai/api/v1/portal/management/usage?start_time=1735689600&end_time=1736294400&page=1&pagesize=20" \
-H "Authorization: Bearer sk_mg_xxxxxxxxxxxxxxxxxx"
const response = await fetch('https://portal-api.r9s.ai/api/v1/portal/management/usage?start_time=1735689600&end_time=1736294400&page=1&pagesize=20', {
method: 'GET',
headers: {
'Authorization': 'Bearer sk_mg_xxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json'
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://portal-api.r9s.ai/api/v1/portal/management/usage"
params = {
"start_time": 1735689600,
"end_time": 1736294400,
"page": 1,
"pagesize": 20
}
headers = {
"Authorization": "Bearer sk_mg_xxxxxxxxxxxxxxxxxx",
"Content-Type": "application/json"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
print(data)
FieldTypeRequiredDescription
metaobjectYesResponse metadata
meta.codeintegerYesStatus code (0 for success)
meta.messagestringYesResponse message
meta.request_idstringYesRequest identifier
dataobjectYesUsage data
data.listarrayYesUsage records list
data.list[].idstringYesRecord ID
data.list[].request_timeint64YesRequest timestamp
data.list[].user_idstringYesUser ID
data.list[].custom_user_idstringYesCustom user ID
data.list[].token_idstringYesToken ID
data.list[].modelstringYesModel name
data.list[].model_typeintegerYesModel type
data.list[].input_tokenintegerYesInput token count
data.list[].output_tokenintegerYesOutput token count
data.list[].input_pricenumberYesInput price
data.list[].output_pricenumberYesOutput price
data.list[].cached_tokenintegerYesCached token count
data.list[].cached_pricenumberYesCached price
data.list[].total_amountnumberYesTotal amount
data.list[].discount_amountnumberYesDiscount amount
data.list[].amountnumberYesFinal amount
data.list[].channel_idintegerYesChannel ID
data.list[].user_namestringYesUser name
data.totalintegerYesTotal number of records
{
"meta": {
"code": 0,
"message": "success",
"request_id": "xxx"
},
"data": {
"list": [
{
"id": "1912345678901234567",
"request_time": 1710000000,
"user_id": "10001",
"custom_user_id": "ext-user-01",
"token_id": "tk_xxx",
"model": "gpt-4.1",
"model_type": 1,
"input_token": 1024,
"output_token": 256,
"input_price": 0.01,
"output_price": 0.02,
"cached_token": 0,
"cached_price": 0,
"total_amount": 0.03,
"discount_amount": 0,
"amount": 0.03,
"channel_id": 12,
"user_name": "alice"
}
],
"total": 1
}
}
  • If the API Key belongs to an organization admin context, user_id can be provided to query a specific member.
  • In that case, the server ignores the token_id filter.
ScenarioTypical Error
Missing authentication infounauthorized
Time range exceeds 31 daystime range must not exceed 31 days
  • Overview - Learn about Manager API authentication and basic information
  • API Keys - Manage API Keys
  • Balance - Retrieve current account balance information