API интеграция
Обзор API
TDS.SO предоставляет REST API для программного управления всеми функциями системы. API поддерживает создание редиректов, управление доменами, получение статистики и другие операции.
Базовый URL
https://dashboard.tds.so/api/v2/
Аутентификация
Все запросы к API должны содержать параметр token
- ваш API ключ, который можно получить в разделе настроек панели.
Храните API ключ в безопасном месте и не передавайте его третьим лицам.
Методы API
Создание шаблона
Endpoint: POST /create/template
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
setting_name | Нет | string | Название шаблона |
setting_description | Нет | string | Описание шаблона |
redirect_type | Нет | string | Тип редиректа (meta, js, 301, 302, iframe и др.) |
redirect_delay | Нет | integer | Задержка редиректа (1-10 сек) |
unique_type | Нет | string | Тип уникальности |
auto_delete | Нет | integer | Автоудаление через часов (1-30) |
auto_bind | Нет | boolean | Автопривязка доменов |
is_ban_check | Нет | boolean | Проверка бана |
is_random_phraze | Нет | boolean | Рандомные фразы |
is_preview | Нет | boolean | Превью |
send_get | Нет | boolean | Передача GET параметров |
min_symbols | Нет | integer | Мин. количество символов (1-10) |
max_symbols | Нет | integer | Макс. количество символов (1-10) |
reg1 | Нет | boolean | Латиница |
reg2 | Нет | boolean | Кириллица |
s_nums | Нет | boolean | Цифры |
subDomains | Нет | boolean | Поддомены |
bot_list | Нет | array | Список ботов |
white_refferer | Нет | string | Белый реферер |
hasAudio | Нет | boolean | Аудио |
ban_all | Нет | boolean | Банить всех |
minHour | Нет | integer | Мин. час (0-24) |
maxHour | Нет | integer | Макс. час (0-24) |
bot_redirect | Нет | string | Редирект для ботов |
- Пример запроса
- Ответ
POST /api/v2/create/template
token=your_api_key&setting_name=Test_Template&redirect_type=meta&redirect_delay=3
{
"response": {
"template": {
"name": "Test_Template",
"id": 19
},
"route": "create/template"
}
}
Создание редиректа
Endpoint: POST /create/redirect
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
redirect_domains | Да | string | Домены для редиректа (через запятую) |
link_lists | Да | string | Целевые URL (через запятую) |
template | Нет | string/int | ID, название шаблона или 'last', 'first', 'random' |
has_one | Нет | boolean | Один редирект для всех доменов |
no_check | Нет | boolean | Пропустить проверку доменов |
check_vk | Нет | boolean | Проверить бан ВК |
- Пример запроса
- Ответ
POST /api/v2/create/redirect
token=your_api_key&redirect_domains=domain1.com,domain2.com&link_lists=https://target1.com
{
"response": "Создано: 2 редиректа",
"log": [
"http://domain1.com/xyz123",
"http://domain2.com/abc456"
]
}
Получение данных
Список ссылок
Endpoint: GET /get/links
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
offset | Нет | integer | Количество записей (по умолчанию 20) |
order | Нет | string | Порядок сортировки (DESC/ASC) |
- Ответ
{
"response": {
"links": [
{
"link_redirect": "http://domain.com/abc123",
"redirect_to": "https://target.com",
"total_clicks": 100,
"mobile_clicks": 45,
"bots_clicks": 5,
"unique_clicks": 80,
"created_time": "2024-01-01 12:00:00"
}
]
},
"full_stat": {
"full_clicks": 100,
"unique_clicks": 80,
"bots_clicks": 5,
"mobile_clicks": 45
}
}
Список доменов
Endpoint: GET /get/domains
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
template_id | Нет | integer | ID шаблона |
template_name | Нет | string | Название шаблона |
- Ответ
{
"response": {
"domains": [
{
"domain": "example.com",
"plug": 1,
"banned": 0,
"owned": 1,
"selling_key": null,
"link_count": 5
}
]
}
}
Список шаблонов
Endpoint: GET /get/templates
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
name | Нет | string | Название конкретного шаблона |
- Ответ
{
"response": {
"templates": [
{
"id": 1,
"name": "Template Name",
"bot_list": ["google", "yandex"],
"redirect_type": "meta",
"min_symbols": 5,
"max_symbols": 10,
"random_phrazes": true,
"ban_check": true,
"useragent_bots": [],
"button": false,
"delay": 3,
"hours_delete": null
}
]
}
}
Обновление ссылок
Endpoint: POST /set/links
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
redirect_link | Да | string | Новый URL для редиректа |
link | Условно* | string | Ссылка, домен, 'last', 'first', 'all' |
template_id | Условно* | integer | ID шаблона |
template_name | Условно* | string | Название шаблона |
folder | Условно* | string | Папка доменов |
group | Нет | string | Группа ссылок |
* Должен быть указан хотя бы один из параметров: link, template_id, template_name или folder
- По ссылке
- По шаблону
- По папке
- Комбинированный
- Ответ
POST /api/v2/set/links
token=your_api_key&redirect_link=https://new-target.com&link=domain.com
POST /api/v2/set/links
token=your_api_key&redirect_link=https://new-target.com&template_id=123
POST /api/v2/set/links
token=your_api_key&redirect_link=https://new-target.com&folder=Campaign_2024
POST /api/v2/set/links
token=your_api_key&redirect_link=https://new-target.com&template_name=My_Template&folder=Campaign_2024
{
"response": "OK",
"new_redirect": "https://new-target.com",
"updated_count": 15,
"filters_applied": {
"template_name": "My_Template",
"folder": "Campaign_2024"
}
}
Управление доменами
Проверка доменов
Endpoint: POST /domain/check
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
domains_list | Да | string | Список доменов через запятую или 'current' |
check_vk | Нет | boolean | Проверка бана ВК |
check_google | Нет | boolean | Проверка бана Google (требуется токен) |
check_yandex | Нет | boolean | Проверка бана Yandex (требуется токен) |
delete_invalid | Нет | boolean | Удалить невалидные домены |
note | Нет | string | Папка для сохранения |
generate_keys | Нет | boolean | Генерировать ключи продажи |
give_domain | Нет | string | Email для передачи доменов |
- Ответ
[
{
"valid": ["domain1.com", "domain2.com"],
"invalid": ["bad-domain.com"]
},
{
"log": "Проверка доступности...",
"result": "Проверено доменов: 3 | Невалидных: 1"
}
]
Удаление доменов
Endpoint: POST /domain/delete
Параметры:
Параметр | Обязательный | Тип | Описание |
---|---|---|---|
token | Да | string | API ключ |
domains_list | Да | string | Список доменов через запятую или 'all' |
soft | Нет | boolean | Мягкое удаление (не удаляет ссылки) |
limit | Нет | integer | Ограничение количества |
- Ответ
[
["domain1.com", "domain2.com"],
{
"result": "Удаление доменов: 2 | Ссылок: 10"
}
]
Обработка ошибок
Все ошибки возвращаются в формате JSON с полями error
и error_id
:
{
"error": "Invalid token",
"error_id": 2
}
Коды ошибок
error_id | Описание |
---|---|
0 | Закончился срок панели или общая ошибка |
1 | Не заполнено обязательное поле |
2 | Невалидный API ключ |
3 | Неправильное название метода |
4 | Пустой ответ или данные не найдены |
5 | Ошибка валидации параметров |
Примеры использования
PHP
<?php
$token = 'your_api_key';
$baseUrl = 'https://dashboard.tds.so/api/v2';
// Создание шаблона
function createTemplate($token, $name, $redirectType = 'meta') {
$url = $GLOBALS['baseUrl'] . '/create/template';
$data = [
'token' => $token,
'setting_name' => $name,
'redirect_type' => $redirectType
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Обновление ссылок по шаблону
function updateLinksByTemplate($token, $templateId, $newRedirect) {
$url = $GLOBALS['baseUrl'] . '/set/links';
$data = [
'token' => $token,
'template_id' => $templateId,
'redirect_link' => $newRedirect
];
$options = [
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($data)
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
return json_decode($response, true);
}
// Использование
$result = createTemplate($token, 'My Template', 'js');
$templateId = $result['response']['template']['id'];
$updateResult = updateLinksByTemplate($token, $templateId, 'https://new-target.com');
echo "Обновлено ссылок: " . $updateResult['updated_count'];
Python
import requests
class TDSAPI:
def __init__(self, token):
self.token = token
self.base_url = 'https://dashboard.tds.so/api/v2'
def create_redirect(self, domains, targets, template=None):
"""Создание редиректов"""
url = f'{self.base_url}/create/redirect'
data = {
'token': self.token,
'redirect_domains': ','.join(domains) if isinstance(domains, list) else domains,
'link_lists': ','.join(targets) if isinstance(targets, list) else targets
}
if template:
data['template'] = template
response = requests.post(url, data=data)
return response.json()
def update_links_by_folder(self, folder, new_redirect):
"""Обновление ссылок по папке"""
url = f'{self.base_url}/set/links'
data = {
'token': self.token,
'folder': folder,
'redirect_link': new_redirect
}
response = requests.post(url, data=data)
return response.json()
def check_domains(self, domains, check_vk=True, check_google=False):
"""Проверка доменов"""
url = f'{self.base_url}/domain/check'
data = {
'token': self.token,
'domains_list': ','.join(domains) if isinstance(domains, list) else domains,
'check_vk': check_vk,
'check_google': check_google
}
response = requests.post(url, data=data)
return response.json()
# Использование
api = TDSAPI('your_api_key')
# Создание редиректов
result = api.create_redirect(
domains=['domain1.com', 'domain2.com'],
targets=['https://target.com'],
template='last'
)
# Обновление ссылок в папке
update_result = api.update_links_by_folder('Campaign_2024', 'https://new-target.com')
print(f"Обновлено {update_result['updated_count']} ссылок")
# Проверка доменов
check_result = api.check_domains(['domain1.com', 'domain2.com'], check_vk=True)
print(check_result[1]['result'])
JavaScript (Node.js)
const axios = require('axios');
class TDSAPI {
constructor(token) {
this.token = token;
this.baseURL = 'https://dashboard.tds.so/api/v2';
}
async createTemplate(name, options = {}) {
const params = new URLSearchParams({
token: this.token,
setting_name: name,
...options
});
try {
const response = await axios.post(`${this.baseURL}/create/template`, params);
return response.data;
} catch (error) {
console.error('Error creating template:', error.response?.data || error.message);
throw error;
}
}
async updateLinksByTemplate(templateName, newRedirect) {
const params = new URLSearchParams({
token: this.token,
template_name: templateName,
redirect_link: newRedirect
});
try {
const response = await axios.post(`${this.baseURL}/set/links`, params);
return response.data;
} catch (error) {
console.error('Error updating links:', error.response?.data || error.message);
throw error;
}
}
async getStatistics() {
const params = { token: this.token };
try {
const response = await axios.get(`${this.baseURL}/get/links`, { params });
return response.data;
} catch (error) {
console.error('Error getting statistics:', error.response?.data || error.message);
throw error;
}
}
}
// Использование
(async () => {
const api = new TDSAPI('your_api_key');
try {
// Создание шаблона
const template = await api.createTemplate('JS Template', {
redirect_type: 'js',
redirect_delay: 2
});
console.log('Template created:', template);
// Обновление ссылок
const updateResult = await api.updateLinksByTemplate('JS Template', 'https://new-target.com');
console.log(`Updated ${updateResult.updated_count} links`);
// Получение статистики
const stats = await api.getStatistics();
console.log('Statistics:', stats.full_stat);
} catch (error) {
console.error('API Error:', error);
}
})();
Рекомендации по использованию
1. Обработка ошибок
- Всегда проверяйте наличие поля
error
в ответе - Добавьте повторные попытки для сетевых ошибок
- Используйте таймауты для запросов (рекомендуется 30 секунд)
- Логируйте все ошибки для отладки
2. Оптимизация
- Кэшируйте список шаблонов и доменов
- Группируйте операции при массовых обновлениях
- Используйте фильтры для точечных изменений
- Не превышайте 60 запросов в минуту
3. Безопасность
- Храните API ключ в переменных окружения
- Используйте HTTPS для всех запросов
- Регулярно ротируйте API ключи
- Ограничьте доступ к API только с доверенных IP
4. Массовые операции
При работе с большим количеством данных:
- Разбивайте операции на батчи по 100-500 записей
- Добавляйте задержки между запросами (1-2 секунды)
- Используйте асинхронные запросы где возможно
- Мониторьте использование API
- Начните с тестирования на небольшом количестве данных
- Используйте песочницу для разработки
- Документируйте все используемые endpoint'ы
- Создайте обертку для API в вашем языке программирования
- Добавьте мониторинг и алерты для критических операций
- Максимум 1000 доменов за один запрос проверки
- Максимум 10000 ссылок в ответе get/links
- Размер запроса не должен превышать 2MB
- API ключ действителен до окончания подписки