DELETE /apiv2/subuserdel/
Удаление SUB-пользователя и всех связанных с ним записей. Записи истории (заказы, делегирования) переназначаются родительскому пользователю. Только родительский аккаунт или администратор могут удалить SUB-пользователя.
URL эндпоинта
DELETE https://netts.io/apiv2/subuserdel/{user_id}Параметры пути
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| user_id | integer | Да | ID удаляемого SUB-пользователя |
Заголовки запроса
| Заголовок | Обязательный | Описание |
|---|---|---|
| X-API-KEY | Да | Ваш API-ключ (должен быть ключом родительского пользователя) |
| X-Real-IP | Да | IP-адрес из вашего белого списка |
Аутентификация и авторизация
Этот эндпоинт требует как аутентификации, так и авторизации:
- Аутентификация: Действующий API-ключ + IP из белого списка (так же, как и для других эндпоинтов)
- Авторизация: Только родительский пользователь (создавший SUB-пользователя) может удалять своих SUB-пользователей
Если пользователь пытается удалить SUB-пользователя, который ему не принадлежит, запрос отклоняется с кодом 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 | ID удаленного SUB-пользователя |
| google_id | string | Google ID удаленного SUB-пользователя |
| parent_user_id | integer | ID родительского пользователя (история переназначена этому пользователю) |
| total_reassigned | integer | Общее количество переназначенных записей истории |
| total_deleted | integer | Общее количество удаленных записей |
| message | string | Сводное сообщение |
Как работает удаление
Удаление выполняется атомарно в рамках одной транзакции:
- Переназначение истории — вся история заказов и делегирований SUB-пользователя переназначается родительскому пользователю. Данные транзакций не теряются.
- Очистка записей — удаляются записи, относящиеся к SUB-пользователю (API-ключ, настройки, реферальные данные, адрес депозита).
- Журнал аудита — запись об удалении сохраняется для целей отслеживания.
Механизмы безопасности
- Удалять можно только SUB-пользователей — учетные записи реальных пользователей защищены и не могут быть удалены через этот эндпоинт
- Требуется авторизация — только родительский пользователь может удалять своих SUB-пользователей
- Безопасность транзакций — все операции выполняются в рамках одной транзакции базы данных («все или ничего»)
- Сохранение истории — история заказов и делегирований переназначается родительскому аккаунту, а не теряется
Ответы с ошибками
Некорректный запрос (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-пользователь успешно удален |
400 | Пользователь не найден или не является SUB-пользователем |
401 | Отсутствует заголовок API-ключа |
403 | Нет доступа (не является родительским пользователем) / Недействительный API-ключ или IP |
500 | Внутренняя ошибка сервера |
Примечания
- Удаление необратимо — перед вызовом этого эндпоинта убедитесь, что действительно хотите удалить SUB-пользователя
- Вся история SUB-пользователя (заказы, делегирования) переназначается родителю — данные не теряются
- Запись об удалении сохраняется навсегда в таблице аудита базы данных
- Записи о реферальных доходах не затрагиваются удалением
- Если у SUB-пользователя ненулевой баланс, он не переводится автоматически — выведите средства перед удалением
- SUB-пользователей можно создать снова через эндпоинт POST /apiv2/subusergen
Связанные эндпоинты
- POST /apiv2/subusergen — Создать нового SUB-пользователя
- POST /apiv2/address/rotate — Сменить адрес депозита
- GET /apiv2/userinfo — Получить информацию о пользователе/SUB-пользователе