DELETE /apiv2/subuserdel/
删除一个 SUB-user 及其所有相关记录。历史记录(订单、质押代理)将重新分配给父用户。仅父账户或管理员可以删除 SUB-user。
接口 URL
DELETE https://netts.io/apiv2/subuserdel/{user_id}路径参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| user_id | integer | 是 | 要删除的 SUB-user 的 ID |
请求头
| 请求头 | 必填 | 描述 |
|---|---|---|
| X-API-KEY | 是 | 您的 API 密钥(必须是父用户的密钥) |
| X-Real-IP | 是 | 来自白名单的 IP 地址 |
身份验证与授权
该接口同时需要身份验证与授权:
- 身份验证:有效的 API 密钥 + 白名单中的 IP(与其他接口相同)
- 授权:仅父用户(创建该 SUB-user 的用户)可以删除其 SUB-users
如果用户尝试删除不属于自己的 SUB-user,请求将被拒绝并返回 403 Forbidden。
请求示例
cURL
bash
curl -X DELETE https://netts.io/apiv2/subuserdel/1234 \
-H "X-API-KEY: your_api_key" \
-H "X-Real-IP: your_whitelisted_ip"Python
python
import requests
user_id = 1234
url = f"https://netts.io/apiv2/subuserdel/{user_id}"
headers = {
"X-API-KEY": "your_api_key",
"X-Real-IP": "your_whitelisted_ip"
}
response = requests.delete(url, headers=headers)
data = response.json()
if response.status_code == 200:
print(f"Deleted user: {data['user_id']} ({data['google_id']})")
print(f"Parent user: {data['parent_user_id']}")
print(f"Records reassigned: {data['total_reassigned']}")
print(f"Records deleted: {data['total_deleted']}")
print(f"Message: {data['message']}")
else:
print(f"Error ({response.status_code}): {data.get('detail', 'Unknown error')}")Node.js
javascript
const axios = require('axios');
async function deleteSubUser(userId, apiKey, whitelistedIp) {
const url = `https://netts.io/apiv2/subuserdel/${userId}`;
const response = await axios.delete(url, {
headers: {
'X-API-KEY': apiKey,
'X-Real-IP': whitelistedIp
},
timeout: 30000
});
const data = response.data;
console.log(`Deleted: ${data.user_id} (${data.google_id})`);
console.log(`Reassigned: ${data.total_reassigned} rows`);
console.log(`Deleted: ${data.total_deleted} records`);
return data;
}
// Usage
deleteSubUser(1234, 'your_api_key', 'your_whitelisted_ip')
.then(result => console.log('Done:', result.message))
.catch(err => console.error('Error:', err.response?.data || err.message));PHP
php
<?php
$userId = 1234;
$url = "https://netts.io/apiv2/subuserdel/{$userId}";
$options = [
'http' => [
'header' => implode("\r\n", [
"X-API-KEY: your_api_key",
"X-Real-IP: your_whitelisted_ip"
]),
'method' => 'DELETE',
'timeout' => 30
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$data = json_decode($response, true);
echo "Deleted user: {$data['user_id']} ({$data['google_id']})\n";
echo "Reassigned: {$data['total_reassigned']} rows\n";
echo "Deleted: {$data['total_deleted']} records\n";
echo "Message: {$data['message']}\n";
?>响应
成功响应 (200 OK)
json
{
"user_id": 1234,
"google_id": "SUB123456789012345678",
"parent_user_id": 42,
"total_reassigned": 787,
"total_deleted": 8,
"message": "Mock user 1234 (SUB123456789012345678) deleted. History (787 rows) reassigned to parent 42."
}响应字段
| 字段 | 类型 | 描述 |
|---|---|---|
| user_id | integer | 已删除的 SUB-user ID |
| google_id | string | 已删除的 SUB-user 的 Google ID |
| parent_user_id | integer | 父用户 ID(历史记录重新分配至该用户) |
| total_reassigned | integer | 重新分配的历史记录总数 |
| total_deleted | integer | 已删除的记录总数 |
| message | string | 摘要信息 |
删除工作原理
删除操作在单个事务中原子化执行:
- 历史记录重新分配 —— SUB-user 的所有订单和质押代理历史记录都会重新分配给父用户。不会丢失任何交易数据。
- 记录清理 —— 移除特定于 SUB-user 的记录(API 密钥、设置、推荐数据、充值地址)。
- 审计追踪 —— 保存一条删除记录以供追踪使用。
安全保护措施
- 仅可删除 SUB-users —— 真实用户账户受保护,无法通过此接口删除
- 需要授权 —— 仅父用户可以删除属于自己的 SUB-users
- 事务安全 —— 所有操作均在单个数据库事务中运行(全有或全无)
- 保留历史记录 —— 订单和质押代理历史记录会重新分配给父用户,不会丢失
错误响应
错误请求 (400)
json
{
"detail": "User with id=9999 not found"
}json
{
"detail": "User 42 is NOT a mock user (google_id=1234567890). Only users with google_id starting with 'SUB' can be deleted."
}禁止访问 (403)
json
{
"detail": "Not authorized: you can only delete your own SUB-users."
}身份验证错误 (401)
json
{
"detail": "X-API-KEY header required"
}服务器内部错误 (500)
json
{
"detail": "Failed to delete mock user: ..."
}错误代码参考
| HTTP 状态码 | 描述 |
|---|---|
200 | SUB-user 删除成功 |
400 | 未找到用户或不是 SUB-user |
401 | 缺少 API 密钥请求头 |
403 | 未授权(非父用户)/ 无效的 API 密钥或 IP |
500 | 服务器内部错误 |
说明
- 删除操作是不可逆的 —— 在调用此接口前请确认确实要移除该 SUB-user
- 所有 SUB-user 历史记录(订单、质押代理)都会重新分配给父用户 —— 不会丢失任何数据
- 删除记录将永久保存在数据库审计表中
- 推荐返佣收益记录不受删除操作的影响
- 如果该 SUB-user 拥有非零余额,不会自动转移 —— 请在删除前完成提现
- SUB-users 可以通过 POST /apiv2/subusergen 接口重新创建
相关接口
- POST /apiv2/subusergen — 创建一个新的 SUB-user
- POST /apiv2/address/rotate — 轮换充值地址
- GET /apiv2/userinfo — 获取用户/SUB-user 信息