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-користувача