| Purpose | Address |
|---|---|
| AI Model Calls & OpenAI-Compatible Endpoints | https://platform.dataeyes.ai |
| Platform Management Endpoints | https://www.dataeyes.ai/apex |
Important: OpenAI-compatible endpoints prefixed with /v1/use the platform address; management endpoints prefixed with/api/use the management proxy address. Do not mix these.
Authorization: Bearer sk-xxxxxxxxxxxxxxxxAuthorization: Bearer <system_access_token>
apex-api-user: <user_numeric_id>The system access token can be found in the console under "Personal Settings > Account Management > Security Settings". The user numeric ID must be obtained from a backend administrator.
https://platform.dataeyes.aiGET /v1/dashboard/billing/subscription| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <API-Key> |
{
"object": "billing_subscription",
"has_payment_method": true,
"soft_limit_usd": 100000000,
"hard_limit_usd": 100000000,
"system_hard_limit_usd": 100000000,
"access_until": 0
}| Field | Type | Description |
|---|---|---|
object | String | Fixed value "billing_subscription" |
has_payment_method | Boolean | Whether a payment method is bound; always true |
soft_limit_usd | Number | Soft quota limit (USD) — triggers a warning notification when reached |
hard_limit_usd | Number | Hard quota limit (USD) — service is suspended when reached |
system_hard_limit_usd | Number | System-level hard limit, identical to hard_limit_usd |
access_until | Integer | Subscription expiration time (Unix timestamp); 0 means never expires |
Unlimited Quota: When an API Key is configured with unlimited quota, all three limit fields return 100000000(100 million USD), indicating no quota restrictions.
GET /v1/dashboard/billing/usage| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <API-Key> |
The start_dateandend_datequery parameters are OpenAI-compatible reserved fields. The current version returns total cumulative usage and does not filter by date range.
{
"object": "list",
"total_usage": 601.41
}| Field | Type | Description |
|---|---|---|
object | String | Fixed value "list" |
total_usage | Number | Cumulative usage in cents (USD × 100). For example, 601.41 represents $6.01 spent |
GET /v1/models| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <API-Key> |
{
"data": [
{
"id": "gpt-4o",
"object": "model",
"created": 1626777600,
"owned_by": "openai",
"supported_endpoint_types": ["openai"]
},
{
"id": "claude-opus-4-6",
"object": "model",
"created": 1626777600,
"owned_by": "vertex-ai",
"supported_endpoint_types": ["openai", "anthropic"]
},
{
"id": "gemini-2.5-pro-thinking",
"object": "model",
"created": 1626777600,
"owned_by": "custom",
"supported_endpoint_types": ["openai", "gemini"]
}
],
"object": "list",
"success": true
}| Field | Type | Description |
|---|---|---|
data | Array | Model list |
data[].id | String | Model identifier — use this value when making API calls |
data[].object | String | Fixed value "model" |
data[].created | Integer | Model creation time (Unix timestamp) |
data[].owned_by | String | Model provider (e.g., openai, vertex-ai, xai, custom) |
data[].supported_endpoint_types | Array | Supported calling formats: openai, anthropic, gemini, image-generation, embeddings, rerank, etc. |
object | String | Fixed value "list" |
success | Boolean | Whether the request succeeded |
https://www.dataeyes.ai/apexGET /api/usage/token/| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <API-Key> |
{
"code": true,
"message": "ok",
"data": {
"object": "token_usage",
"name": "my-production-key",
"total_granted": 5000000,
"total_used": 20,
"total_available": 4999980,
"unlimited_quota": false,
"model_limits": {},
"model_limits_enabled": false,
"expires_at": 0
}
}{
"code": true,
"message": "ok",
"data": {
"object": "token_usage",
"name": "default-key",
"total_granted": 500000,
"total_used": 3007043,
"total_available": -2507043,
"unlimited_quota": true,
"model_limits": {},
"model_limits_enabled": false,
"expires_at": 0
}
}| Field | Type | Description |
|---|---|---|
code | Boolean | Whether the request succeeded; true indicates success |
message | String | Status description; "ok" on success |
data.object | String | Fixed value "token_usage" |
data.name | String | API Key display name |
data.total_granted | Integer | Total allocated quota (internal units). Conversion: ÷ 500,000 = USD |
data.total_used | Integer | Cumulative consumed quota (internal units) |
data.total_available | Integer | Remaining available quota (total_granted − total_used) |
data.unlimited_quota | Boolean | Whether this is an unlimited quota key. When true, quota limits do not apply |
data.model_limits | Object | Model access restriction rules. Empty object {} means no restrictions |
data.model_limits_enabled | Boolean | Whether model-level access control is enabled |
data.expires_at | Integer | Key expiration time (Unix timestamp); 0 means never expires |
USD Amount = Internal Quota Value ÷ 500,000| Internal Quota Value | Equivalent USD | Calculation |
|---|---|---|
5,000,000 | $10.00 | 5000000 ÷ 500000 = 10 |
3,007,043 | $6.01 | 3007043 ÷ 500000 ≈ 6.01 |
500,000 | $1.00 | 500000 ÷ 500000 = 1 |
Unlimited Quota Note: When unlimited_quota = true,total_availablemay be negative, reflecting only that cumulative consumption exceeds the initial allocation — this does not affect service availability.
https://www.dataeyes.ai/apexGET /api/user/self| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <system_access_token> |
apex-api-user | Yes | Target user's numeric ID |
{
"success": true,
"message": "",
"data": {
"id": 669,
"username": "example_user",
"display_name": "example_user",
"email": "user@example.com",
"role": 1,
"status": 1,
"group": "pro",
"quota": 4084864,
"used_quota": 269527941,
"request_count": 9412,
"aff_code": "xxxx",
"aff_count": 0,
"aff_quota": 0,
"aff_history_quota": 0,
"inviter_id": 0
}
}data object)| Field | Type | Description |
|---|---|---|
id | Integer | User numeric ID |
username | String | Login username |
display_name | String | Display name |
email | String | Registered email address |
role | Integer | User role. 1 = Regular user, 10 = Administrator, 100 = Super administrator |
status | Integer | Account status. 1 = Active, 2 = Disabled |
group | String | User's billing group |
quota | Integer | Account-level remaining quota (internal units, ÷500000 = USD) |
used_quota | Integer | Account-level total consumed quota |
request_count | Integer | Cumulative API request count |
aff_code | String | Referral code |
aff_count | Integer | Number of referred users |
aff_quota | Integer | Pending referral reward quota |
aff_history_quota | Integer | Historical cumulative referral rewards |
inviter_id | Integer | Inviter's user ID; 0 means no inviter |
GET /api/token/| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <system_access_token> |
apex-api-user | Yes | Target user's numeric ID |
| Parameter | Type | Default | Description |
|---|---|---|---|
p | Integer | 1 | Page number |
size | Integer | 10 | Items per page |
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 10,
"total": 56,
"items": [
{
"id": 11848,
"user_id": 669,
"key": "0jCu7MEFsd6jzr...",
"status": 1,
"name": "openai-vip-pro",
"created_time": 1778838568,
"accessed_time": 1779028792,
"expired_time": -1,
"remain_quota": -1279,
"unlimited_quota": true,
"model_limits_enabled": false,
"model_limits": "",
"allow_ips": "",
"used_quota": 1279,
"group": "gpt-vip-pro",
"cross_group_retry": false
}
]
}
}data.items[])| Field | Type | Description |
|---|---|---|
id | Integer | API Key numeric ID |
user_id | Integer | Owner's user ID |
key | String | Key value (without sk- prefix) |
status | Integer | Key status. 1 = Active, 2 = Disabled, 3 = Expired |
name | String | Key display name |
created_time | Integer | Creation time (Unix timestamp) |
accessed_time | Integer | Last access time (Unix timestamp) |
expired_time | Integer | Expiration time (Unix timestamp); -1 = Never expires |
remain_quota | Integer | Remaining quota (internal units) |
unlimited_quota | Boolean | Whether quota is unlimited |
model_limits_enabled | Boolean | Whether model access control is enabled |
model_limits | String | Model restriction rules (JSON string; empty = no restrictions) |
allow_ips | String | IP whitelist (comma-separated; empty = no restrictions) |
used_quota | Integer | Consumed quota (internal units) |
group | String | Key's billing group |
cross_group_retry | Boolean | Whether cross-group retry is enabled |
| Field | Type | Description |
|---|---|---|
data.page | Integer | Current page number |
data.page_size | Integer | Items per page |
data.total | Integer | Total count |
GET /api/token/{id}| Parameter | Type | Description |
|---|---|---|
id | Integer | API Key's numeric ID |
| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <system_access_token> |
apex-api-user | Yes | Target user's numeric ID |
{
"success": true,
"message": "",
"data": {
"id": 11527,
"user_id": 669,
"key": "2UWqFGoE2AM2FY...",
"status": 1,
"name": "cl-of",
"created_time": 1778739907,
"accessed_time": 1779454195,
"expired_time": -1,
"remain_quota": -36107,
"unlimited_quota": true,
"model_limits_enabled": false,
"model_limits": "",
"allow_ips": "",
"used_quota": 36107,
"group": "cl-of-pro",
"cross_group_retry": false
}
}Response fields are identical to Section 3.2 items[].
GET /api/token/search| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <system_access_token> |
apex-api-user | Yes | Target user's numeric ID |
| Parameter | Type | Required | Description |
|---|---|---|---|
keyword | String | Yes | Search keyword. Must exactly match the Key's display name |
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 10,
"total": 1,
"items": [
{
"id": 11848,
"user_id": 669,
"key": "0jCu7MEFsd6jzr...",
"status": 1,
"name": "openai-vip-pro",
"unlimited_quota": true,
"used_quota": 1279,
"group": "gpt-vip-pro"
}
]
}
}Important: This endpoint performs exact full-name matching and does not support fuzzy search. The keywordparameter must exactly match the Key's complete display name.
GET /api/subscription/self| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <system_access_token> |
apex-api-user | Yes | Target user's numeric ID |
{
"success": true,
"message": "",
"data": {
"subscriptions": [],
"all_subscriptions": [],
"billing_preference": "subscription_first"
}
}| Field | Type | Description |
|---|---|---|
data.subscriptions | Array | Currently active subscription plans |
data.all_subscriptions | Array | All subscription plans (including expired) |
data.billing_preference | String | Billing priority. "subscription_first" = prioritize subscription quota |
| Endpoint | Authentication | Use Case | Data Granularity |
|---|---|---|---|
/v1/dashboard/billing/subscription | API Key | Third-party client integration — view account quota | Account-level |
/v1/dashboard/billing/usage | API Key | Third-party client integration — view cumulative spending | Account-level |
/v1/models | API Key | Query models accessible by the Key | Account-level |
/api/usage/token/ | API Key | Production real-time validation of per-Key quota and model permissions | Key-level |
/api/user/self | System Token | Admin console — user information management | User-level |
/api/token/ | System Token | Admin console — Key listing and lifecycle management | Key-level |
/api/token/{id} | System Token | Admin console — individual Key detail view | Key-level |
/api/token/search | System Token | Admin console — Key name search | Key-level |
/api/subscription/self | System Token | Admin console — subscription management | User-level |
/v1/dashboard/billing/subscription + /v1/dashboard/billing/usage — OpenAI-compatible with zero integration effort/api/usage/token/ — highest precision, not restricted by group permissions| Scenario | Response Content | Cause | Resolution |
|---|---|---|---|
| Invalid API Key | HTTP 401 Unauthorized | Key is invalid, expired, or disabled | Verify Key status in the console or create a new one |
| Invalid System Token | {"code":401,"msg":"Not logged in or session expired"} | System access token is incorrect or expired | Re-obtain from "Personal Settings > Account Management > Security Settings" |
| Invalid User ID | {"code":401,"msg":"Not logged in or session expired"} | apex-api-user value does not match a valid user | Use the correct user numeric ID |
| Incorrect Path | HTTP 404 page not found | Platform and management proxy addresses were mixed | Use platform.dataeyes.ai for /v1 endpoints, www.dataeyes.ai/apex for /api endpoints |
| Group Permission Denied | No permission to access xxx group | API Key's group is not authorized | Contact administrator to adjust group configuration, or use /api/usage/token/ instead |
| Search Failed | {"success":false,"message":"Token search failed"} | keyword parameter contains special characters or encoding issues | Use ASCII characters and ensure exact match with Key name |
total_available falls below a threshold/api/token/search only supports exact full-name matching; for fuzzy search, use the list endpoint with pagination