Перейти к основному содержимому

API интеграция v2

Обзор API

TDS.SO предоставляет REST API v2 для программного управления всеми функциями системы. API поддерживает создание редиректов, управление доменами, создание лендингов, получение статистики и другие операции.

Базовый URL

https://dashboard.tds.so/api/v2/

Аутентификация

Все запросы к API должны содержать параметр token - ваш API ключ, который можно получить в разделе настроек панели.

Важно

Храните API ключ в безопасном месте и не передавайте его третьим лицам.

Методы API

Создание ресурсов

Создание шаблона

Endpoint: GET /create/template

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
setting_nameНетstringНазвание шаблона
redirect_typeНетstringТип редиректа (js, meta, php)
redirect_delayНетintegerЗадержка редиректа в секундах
unique_typeНетstringТип отслеживания уникальных посетителей (ip)
auto_deleteНетintegerАвтоудаление после часов
min_symbolsНетintegerМинимальное количество символов URL
max_symbolsНетintegerМаксимальное количество символов URL
is_ban_checkНетbooleanВключить проверку на бан
is_random_phrazeНетbooleanИспользовать случайные фразы
is_previewНетbooleanВключить режим превью
GET /api/v2/create/template?token=your_api_key&setting_name=Test%20Template&redirect_type=js&redirect_delay=3&unique_type=ip&auto_delete=24&min_symbols=5&max_symbols=10

Создание редиректов

Endpoint: GET /create/redirect

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
redirect_domainsДаstringДомены для редиректа (через запятую)
link_listsДаstringЦелевые URL (через запятую)
templateНетintegerID шаблона для использования
folderНетstringИмя папки для организации ссылок
expired_atНетstringДата истечения срока (YYYY-MM-DD HH:mm:ss)
landing_userНетintegerID лендинга для пользователей (если шаблон типа landing)
landing_botНетintegerID лендинга для ботов (если шаблон типа landing)
has_oneНетbooleanСоздать одну ссылку на домен
no_checkНетbooleanПропустить валидацию доменов
no_cacheНетbooleanПропустить кеш доменов
check_vkНетbooleanПроверить статус бана ВК
GET /api/v2/create/redirect?token=your_api_key&redirect_domains=example.com,test.com&link_lists=https://google.com,https://facebook.com&template=1&folder=test&expired_at=2024-12-31%2023:59:59
Использование лендингов

При использовании шаблона типа "landing":

  • landing_user - ID лендинга, который будет показан обычным пользователям
  • landing_bot - ID лендинга, который будет показан ботам
  • ID лендинга можно получить после создания лендинга или через метод GET /get/landings
  • Если параметры лендингов не указаны для шаблона типа "landing", будут использованы значения по умолчанию из шаблона

Создание лендинга

Создание лендинга загрузкой файла

Endpoint: POST /create/landing

Параметры (multipart/form-data):

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
landing_fileДаfileZIP архив или HTML файл (макс. 20MB)
titleНетstringЗаголовок лендинга
POST /api/v2/create/landing
Content-Type: multipart/form-data

token=your_api_key
landing_file=@path/to/landing.zip
title=My Uploaded Landing

Получение данных

Список ссылок

Endpoint: GET /get/links

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
offsetНетintegerКоличество возвращаемых записей
orderНетstringПорядок сортировки (DESC/ASC)
folder_nameНетstringФильтр по имени папки
created_fromНетstringФильтр по дате создания (от)
created_toНетstringФильтр по дате создания (до)
GET /api/v2/get/links?token=your_api_key&offset=10&order=DESC&folder_name=test

Список доменов

Endpoint: GET /get/domains

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
template_idНетintegerФильтр по ID шаблона
template_nameНетstringФильтр по названию шаблона
GET /api/v2/get/domains?token=your_api_key&template_id=1

Список шаблонов

Endpoint: GET /get/templates

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
nameНетstringПолучить конкретный шаблон по названию
GET /api/v2/get/templates?token=your_api_key

Список лендингов

Endpoint: GET /get/landings

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
limitНетintegerОграничить количество результатов
idНетintegerПолучить конкретный лендинг по ID
GET /api/v2/get/landings?token=your_api_key&limit=10

Обновление ресурсов

Обновление ссылок

Endpoint: GET /set/links

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
redirect_linkНетstringНовый URL для редиректа
linkНетstringСелектор ссылок: all, first, last, или конкретная ссылка
set_folderНетstringНовое имя папки
expired_atНетstringНовая дата истечения (YYYY-MM-DD HH:mm:ss)
link_idsНетstringКонкретные ID ссылок (через запятую)
template_idНетintegerФильтр по ID шаблона
template_nameНетstringФильтр по названию шаблона
folderНетstringФильтр по текущей папке
groupНетstringФильтр по группе
GET /api/v2/set/links?token=your_api_key&redirect_link=https://newdestination.com&link=all&set_folder=updated_folder&expired_at=2024-12-31%2023:59:59

Продление ссылок

Endpoint: GET /set/extend

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
hoursДаintegerКоличество часов для продления (макс. 8760)
linkНетstringСелектор ссылок: all, first, last, или конкретная ссылка
reactivateНетbooleanРеактивировать неактивные ссылки
template_idНетintegerФильтр по ID шаблона
template_nameНетstringФильтр по названию шаблона
folderНетstringФильтр по папке
groupНетstringФильтр по группе
GET /api/v2/set/extend?token=your_api_key&hours=48&link=all&reactivate=true

Управление доменами

Проверка доменов

Endpoint: GET /domains/check

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
domains_listДаstringСписок доменов через запятую или 'current' для сохраненных
check_googleНетbooleanПроверить статус бана Google
check_vkНетbooleanПроверить статус бана ВК
check_yandexНетbooleanПроверить статус бана Yandex
save_domainsНетbooleanСохранить валидные домены
delete_invalidНетbooleanУдалить невалидные домены
no_cacheНетbooleanПропустить кеш доменов
noteНетstringЗаметка папки для сохраненных доменов
GET /api/v2/domains/check?token=your_api_key&domains_list=example.com,test.com&check_google=true&check_vk=true

Удаление доменов

Endpoint: GET /domains/delete

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
domains_listДаstringСписок доменов через запятую или 'all' для всех
softНетbooleanМягкое удаление (можно восстановить)
limitНетintegerОграничить количество удаляемых доменов
GET /api/v2/domains/delete?token=your_api_key&domains_list=example.com,test.com&soft=true

Очистка кеша доменов

Endpoint: GET /domains/clear-cache

Параметры:

ПараметрОбязательныйТипОписание
tokenДаstringAPI ключ
domains_listДаstringСписок доменов через запятую или 'all' для всех
GET /api/v2/domains/clear-cache?token=your_api_key&domains_list=all

Обработка ошибок

Все ошибки возвращаются в формате 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
Лучшие практики
  1. Начните с тестирования на небольшом количестве данных
  2. Используйте песочницу для разработки
  3. Документируйте все используемые endpoint'ы
  4. Создайте обертку для API в вашем языке программирования
  5. Добавьте мониторинг и алерты для критических операций
Ограничения
  • Максимум 1000 доменов за один запрос проверки
  • Максимум 10000 ссылок в ответе get/links
  • Размер запроса не должен превышать 2MB
  • API ключ действителен до окончания подписки