Справочник API
Обзор
API SNSTracker позволяет программно управлять лентами и каналами мониторинга. Вы можете создавать ленты (видео, посты и т. д.) и каналы (аккаунты, профили), обновлять их для получения актуальных данных и получать уведомления в реальном времени через вебхуки.
Аутентификация
Все запросы к API требуют аутентификации с использованием API‑ключа. Передавайте ваш API‑ключ в заголовке X-API-Key.
Как получить API‑ключ:
- Войдите в SNSTracker
- Перейдите в Settings → API Keys
- Создайте новый API‑ключ или используйте существующий
- Скопируйте API‑ключ (он отображается только один раз при создании)
Эндпоинты API
1. Создание лент
Создавайте ленты мониторинга, отправляя URL лент (видео, посты и т. д.).
POST /api/v1/feedsЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
],
"collectionId": "coll_abc123xyz"
}Параметры:
urls(обязательно): массив URL лент для мониторинга. Максимум 200 URL в запросе.collectionId(необязательно): ID коллекции, куда будут добавлены ленты. Если не указан, будет использована коллекция по умолчанию вашей команды.
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@user/video/1234567890",
"platform": "tiktok",
"feedId": "feed_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/p/ABC123/",
"platform": "instagram",
"feedId": "feed_def456uvw",
"success": true
}
],
"errors": [],
"message": "Ленты успешно созданы. Данные будут обновлены в ближайшее время."
}
}Поля ответа:
success: количество успешно созданных лентfailed: количество неудачных попыток создания лентtotal: общее количество переданных URLresults: массив результатов для каждого URLindex: индекс в массиве запроса, начиная с 0url: проверенный и стандартизированный URLplatform: обнаруженная платформа (tiktok, instagram, youtube и т. д.)feedId: уникальный идентификатор созданной лентыsuccess: успешно ли создана лентаskipped: (необязательно) пропущена ли лента, потому что уже существуетresumed: (необязательно) была ли возобновлена остановленная лентаerror: (необязательно) сообщение об ошибке при неудачном создании
errors: массив ошибок для неудачных URL
Пример запроса
curl -X POST https://snstracker.com/api/v1/feeds \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@user/video/1234567890"
]
}'2. Обновление лент
Обновляйте существующие ленты, чтобы немедленно получить самые свежие данные. Обновлять можно только ленты со статусом "Pending" или "Tracked".
POST /api/v1/feeds/refreshЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"feedIds": ["feed_abc123xyz", "feed_def456uvw"]
}Параметры:
feedIds(обязательно): массив ID лент для обновления
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"feedIds": ["feed_abc123xyz", "feed_def456uvw"],
"total": 2,
"message": "Успешно обновлено 2 ленты(лент)"
}
}Поля ответа:
success: успешно ли выполнена операция обновленияfeedIds: массив ID лент, которые были обновленыtotal: количество обновлённых лентmessage: сообщение об успешном выполнении
Пример запроса
curl -X POST https://snstracker.com/api/v1/feeds/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"feedIds": ["feed_abc123xyz"]
}'3. Создание каналов
Создавайте каналы мониторинга, отправляя URL каналов (профили аккаунтов и т. д.).
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channelsЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"urls": [
"https://www.tiktok.com/@username",
"https://www.instagram.com/username/"
],
"collectionId": "coll_abc123xyz"
}Параметры:
urls(обязательно): массив URL каналов для мониторинга. Максимум 5 URL в запросе.collectionId(необязательно): ID коллекции, куда будут добавлены каналы. Если не указан, будет использована коллекция по умолчанию вашей команды.
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": 2,
"failed": 0,
"total": 2,
"results": [
{
"index": 0,
"url": "https://www.tiktok.com/@username",
"platform": "tiktok",
"channelId": "channel_abc123xyz",
"success": true
},
{
"index": 1,
"url": "https://www.instagram.com/username/",
"platform": "instagram",
"channelId": "channel_def456uvw",
"success": true
}
],
"errors": [],
"message": "Каналы успешно созданы. Данные будут обновлены в ближайшее время."
}
}Поля ответа:
success: количество успешно созданных каналовfailed: количество неудачных попыток создания каналовtotal: общее количество переданных URLresults: массив результатов для каждого URLindex: индекс в массиве запроса, начиная с 0url: проверенный и стандартизированный URLplatform: обнаруженная платформа (tiktok, instagram, youtube и т. д.)channelId: уникальный идентификатор созданного каналаsuccess: успешно ли создан каналskipped: (необязательно) пропущен ли канал, потому что уже существуетresumed: (необязательно) был ли возобновлён остановленный каналerror: (необязательно) сообщение об ошибке при неудачном создании
errors: массив ошибок для неудачных URL
Пример запроса
curl -X POST https://snstracker.com/api/v1/channels \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/@username"
]
}'4. Обновление каналов
Обновляйте существующие каналы, чтобы немедленно получить самые свежие данные. Обновлять можно только каналы со статусом "Pending" или "Tracked".
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
POST /api/v1/channels/refreshЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"channelIds": ["channel_abc123xyz", "channel_def456uvw"]
}Параметры:
channelIds(обязательно): массив ID каналов для обновления
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"channelIds": ["channel_abc123xyz", "channel_def456uvw"],
"total": 2,
"message": "Успешно обновлено 2 каналов"
}
}Поля ответа:
success: успешно ли выполнена операция обновленияchannelIds: массив ID каналов, которые были обновленыtotal: количество обновлённых каналовmessage: сообщение об успешном выполнении
Пример запроса
curl -X POST https://snstracker.com/api/v1/channels/refresh \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"channelIds": ["channel_abc123xyz"]
}'5. Синхронизация ленты
Синхронизируйте данные ленты напрямую из сервиса scrapy. Этот эндпоинт немедленно получает актуальные данные ленты и списывает кредиты при успешной синхронизации. Все участники и API-ключи команды используют один общий лимит для всех эндпоинтов синхронизации. Общий лимит: 1 для Starter или без действующей подписки, 5 для Standard и 10 для Premium.
⚠️ Важное примечание: этот эндпоинт синхронизации является отдельным и НЕ интегрируется с веб‑платформой. Операции синхронизации:
- НЕ создают и не обновляют записи лент в веб‑панели
- НЕ отображаются в списке лент или коллекциях
- НЕ запускают вебхуки или уведомления
- ТОЛЬКО возвращают полученные данные напрямую в ответе API
Этот эндпоинт предназначен для разового получения данных через API. Чтобы создавать постоянные ленты мониторинга, отображающиеся в веб‑платформе, используйте эндпоинт Создание лент.
POST /api/v1/feeds/syncЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"url": "https://www.tiktok.com/@user/video/1234567890"
}Параметры:
url(обязательно): URL ленты для синхронизации. Должен быть корректной непустой строкой.
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@user/video/1234567890",
"feedInfo": {
"feed_id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"url": "https://www.tiktok.com/@user/video/1234567890",
"views": 1000000,
"likes": 200000,
"comments": 1000,
"shares": 2000,
"bookmarks": 200,
"engagement": 512000,
"description": "Описание видео",
"hashtags": ["tag1", "tag2"],
"publish_at": 1234567890
}
}
}Поля ответа:
success: успешно ли выполнена операция синхронизацииurl: синхронизированный URL лентыfeedInfo: полная информация о ленте, включая метрики, описание, хэштеги и т. д.
Ответы об ошибках:
429 Too Many Requests: Общий лимит команды достигнут. Запрос не ставится в очередь.400 Bad Request: недостаточно кредитов или некорректный URL
Пример запроса
curl -X POST https://snstracker.com/api/v1/feeds/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@user/video/1234567890"
}'6. Синхронизация канала
Синхронизируйте данные канала напрямую из сервиса scrapy. Этот эндпоинт немедленно получает актуальные данные канала и списывает кредиты при успешной синхронизации. Все участники и API-ключи команды используют один общий лимит для всех эндпоинтов синхронизации. Общий лимит: 1 для Starter или без действующей подписки, 5 для Standard и 10 для Premium.
Channel pricing note: Xiaohongshu channel tasks are priced separately from the default channel task price and currently cost 10 credits per successful request.
⚠️ Важное примечание: этот эндпоинт синхронизации является отдельным и НЕ интегрируется с веб‑платформой. Операции синхронизации:
- НЕ создают и не обновляют записи каналов в веб‑панели
- НЕ отображаются в списке каналов или коллекциях
- НЕ запускают вебхуки или уведомления
- ТОЛЬКО возвращают полученные данные напрямую в ответе API
Этот эндпоинт предназначен для разового получения данных через API. Чтобы создавать постоянные каналы мониторинга, отображающиеся в веб‑платформе, используйте эндпоинт Создание каналов.
POST /api/v1/channels/syncЗапрос
Заголовки:
X-API-Key: Ваш API‑ключ (обязательно)Content-Type:application/json
Тело запроса:
{
"url": "https://www.tiktok.com/@username"
}Параметры:
url(обязательно): URL канала для синхронизации. Должен быть корректной непустой строкой.
Ответ
Успешный ответ (200):
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.tiktok.com/@username",
"channelInfo": {
"id": "1234567890",
"platform": 1,
"platform_name": "tiktok",
"username": "username",
"nickname": "User Name",
"description": "Описание канала",
"followers": 1000000,
"followings": 2000,
"likes": 200000000,
"total_count": 1000,
"track_count": 1000,
"status": 1
}
}
}Поля ответа:
success: успешно ли выполнена операция синхронизацииurl: синхронизированный URL каналаchannelInfo: полная информация о канале, включая метрики, описание и т. д.
Ответы об ошибках:
429 Too Many Requests: Общий лимит команды достигнут. Запрос не ставится в очередь.400 Bad Request: недостаточно кредитов или некорректный URL
Пример запроса
curl -X POST https://snstracker.com/api/v1/channels/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/@username"
}'7. Синхронизация публикаций канала
Возвращает одну страницу: не более 12 элементов за запрос для Instagram и Reels, без автоматического перехода дальше. instagram включает изображения, видео и карусели; reels — видео Reels.
POST /api/v1/channels/feeds/sync
X-API-Key: your-api-key
Content-Type: application/jsonRequest and pagination
{
"platform": "instagram",
"channel_name": "instagram"
}count— необязательное положительное целое число, задающее желаемое количество элементов на этой странице, без значения по умолчанию. Ограничения зависят от платформы: Instagram и Reels возвращают не более 12 элементов за запрос, иногда меньше. Если параметр не указан, используется размер страницы платформы по умолчанию.- Для первой страницы не передавайте
cursor. Для следующей передайте прежнийnext_cursorбез изменений с теми жеplatformиchannel_name. В конце:has_more=false,next_cursor=null.
{
"platform": "instagram",
"channel_name": "instagram",
"cursor": "previous-next-cursor"
}Каждая успешно полученная страница стоит 10 кредитов, включая пустые страницы. Только неудачные запросы бесплатны; перед запросом нужно минимум 10 кредитов. Лимит команды общий с другими API синхронизации. Записи в панели не создаются.
Response example (placeholder cursor) — reels, lunacut.edit, count=1
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"platform": "reels",
"channel_name": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"requested_count": 1,
"returned_count": 1,
"has_more": true,
"next_cursor": "cursor-from-response",
"items": [
{
"feed_id": "4009169989985582972",
"platform": 5,
"platform_name": "reels",
"type": "video",
"url": "https://www.instagram.com/reel/Dejbt1JPz98/",
"author_username": "lunacut.edit",
"publish_at": 1792150387,
"duration": 70.077,
"view_count": 310475
}
]
}
}platform and channel_name are required. channel_name is the username, not the display name; leading @ is accepted and dots are preserved. requested_count is null when count is omitted; returned_count equals items.length. Unknown metrics/timestamps are null. Posts may lack timestamps and carousel details. items uses the existing feed fields, including video_url, image_urls and cover_url; the example shows only selected fields. publish_at is Unix seconds and duration is seconds. Upstream order is preserved, without a most-popular sorting option; deduplicate across pages by feed_id. Empty pages can still have a next cursor; a carousel counts as one post.
Доступность метрик в items, включая просмотры (view_count), лайки (like_count), сохранения (bookmark_count) и комментарии (comment_count), зависит от платформы и данных её списка публикаций. Некоторые метрики могут быть недоступны. Они возвращаются как null, что не означает нулевое значение.
Чтобы запросить отсутствующие метрики, отдельно вызовите POST /api/v1/feeds/sync, передав url элемента в поле url тела запроса. Детальный запрос оплачивается отдельно по правилам этого эндпоинта. Результат зависит от данных, предоставляемых платформой; получение всех недостающих метрик не гарантируется.
HTTP: 400 invalid input/cursor or insufficient initial credits; 401 invalid API key; 403 disabled team or inaccessible channel; 402 insufficient credits at settlement; 429 team concurrency limit (Retry-After: 1); 502 upstream/invalid page; 503 service unavailable; 504 timeout.
8. Получить дополнительные сведения о профиле
POST /api/v1/channels/about/syncТолько Instagram и Reels. Обязательный url, как в /api/v1/channels/sync: https://www.instagram.com/lunacut.edit/ или https://www.instagram.com/lunacut.edit/reels/. platform, count и cursor не нужны. Ссылки на публикации и другие платформы не поддерживаются.
curl -X POST https://snstracker.com/api/v1/channels/about/sync \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.instagram.com/lunacut.edit/"}'Успешный запрос стоит 80 кредитов, даже если поля равны null. Ошибки не оплачиваются; до запроса требуется не менее 80 кредитов. Общий лимит команды со всеми синхронными API: Starter/без активной подписки 1, Standard 5, Premium 10. Записи и webhooks не создаются.
Пример ответа; доступность полей зависит от публичных данных аккаунта.
{
"code": 0,
"message": "ok",
"data": {
"success": true,
"url": "https://www.instagram.com/lunacut.edit/",
"channelAbout": {
"platform": 6,
"platform_name": "instagram",
"username": "lunacut.edit",
"channel_url": "https://www.instagram.com/lunacut.edit/",
"country": "Brazil",
"country_visible": true,
"date_joined": "2020-05",
"date_joined_text": "May 2020"
}
}
}country: публичная страна/регион только при country_visible=true, не текущая геолокация IP. country_visible: видимость или null, если неизвестна. date_joined: месяц регистрации (YYYY-MM) либо null, если отсутствует/не распознан. date_joined_text: исходный текст даты либо null. Bio, число подписчиков и прежние имена не включены.
400 / 401 / 402 / 403 / 429 (Retry-After: 1) / 502 / 503 / 504.
Интеграция вебхуков
SNSTracker поддерживает вебхуки для получения уведомлений в реальном времени, когда отслеживаемый контент достигает ваших пороговых значений. Вы можете настроить вебхуки для получения уведомлений о:
- Обновлениях лент: когда просмотры, вовлечённость (лайки + комментарии + репосты) увеличиваются на заданный порог
- Обновлениях каналов: когда подписчики, подписки или лайки увеличиваются на заданный порог
Настройка вебхуков
- Настройте цели вебхуков в настройках Collections
- Включите уведомления в конфигурации Collection
- Задайте пороги для метрик, которые хотите отслеживать
Для подробных инструкций по настройке вебхуков см. Руководство по настройке вебхуков.
Ответы об ошибках
Все эндпоинты могут возвращать следующие ответы об ошибках:
401 Unauthorized - Отсутствует API‑ключ
{
"code": -1,
"message": "Заголовок X-API-Key обязателен"
}401 Unauthorized - Неверный API‑ключ
{
"code": -1,
"message": "Неверный API ключ"
}400 Bad Request - Некорректный ввод
{
"code": -1,
"message": "Некорректный запрос: urls должен быть массивом"
}400 Bad Request - Слишком много URL (Создание лент)
{
"code": -1,
"message": "Максимум 200 URL на запрос"
}400 Bad Request - Слишком много URL (Создание каналов)
{
"code": -1,
"message": "Максимум 5 URL на запрос"
}400 Bad Request - Недостаточно кредитов
{
"code": -1,
"message": "Недостаточно кредитов. Требуется: 10, доступно: 5"
}429 Too Many Requests - Параллельная синхронизация команды
{
"code": -1,
"message": "Maximum concurrent sync requests (1) reached for this team. Currently active: 1. Wait for a request to complete, or contact official support to increase the limit."
}403 Forbidden - Недопустимая коллекция
{
"code": -1,
"message": "Коллекция не найдена или не принадлежит вашей команде"
}404 Not Found
{
"code": -1,
"message": "Ленты не найдены"
}или
{
"code": -1,
"message": "Каналы не найдены"
}Примеры использования
Пример на Python - Создание лент
import requests
url = "https://snstracker.com/api/v1/feeds"
headers = {
"X-API-Key": "your-api-key-here",
"Content-Type": "application/json"
}
data = {
"urls": [
"https://www.tiktok.com/@user/video/1234567890",
"https://www.instagram.com/p/ABC123/"
]
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
if result["code"] == 0:
print(f"Успешно создано лент: {result['data']['success']}")
for feed in result["data"]["results"]:
print(f" - {feed['url']}: {feed['feedId']}")
else:
print(f"Ошибка: {result['message']}")Пример на JavaScript - Обновление лент
const response = await fetch('https://snstracker.com/api/v1/feeds/refresh', {
method: 'POST',
headers: {
'X-API-Key': 'your-api-key-here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
feedIds: ['feed_abc123xyz', 'feed_def456uvw'],
}),
});
const result = await response.json();
if (result.code === 0) {
console.log(`Успешно обновлено ${result.data.total} лент`);
result.data.feedIds.forEach((feedId) => {
console.log(` - ${feedId}`);
});
} else {
console.error(`Ошибка: ${result.message}`);
}Важные примечания
-
Проверка URL: Все URL автоматически проверяются перед созданием. Некорректные URL будут отклонены.
-
Дубликаты: Если элемент с таким же URL уже существует в коллекции:
- Если он активен, он будет пропущен (отмечен
skipped: true) - Если он остановлен, он будет возобновлён (отмечен
resumed: true)
- Если он активен, он будет пропущен (отмечен
-
Сбор данных: После успешного создания элементы ставятся в очередь на сбор данных. Данные будут доступны вскоре после создания.
-
Статус обновления: Обновлять можно только элементы со статусом "Pending" или "Tracked". Элементы с другими статусами будут отфильтрованы.
-
Кредиты: Перед отправкой запросов убедитесь, что у вас достаточно кредитов. Операции синхронизации списывают кредиты сразу после успешного получения данных. Xiaohongshu channel tasks are priced separately and currently cost 10 credits per successful request.
/api/v1/channels/feeds/sync: Каждая успешно полученная страница стоит 10 кредитов, включая пустые страницы. Только неудачные запросы бесплатны; перед запросом нужно минимум 10 кредитов. Лимит команды общий с другими API синхронизации. Записи в панели не создаются./api/v1/channels/about/sync: Успешный запрос стоит 80 кредитов, даже если поля равныnull. Ошибки не оплачиваются; до запроса требуется не менее 80 кредитов. Общий лимит команды со всеми синхронными API: Starter/без активной подписки 1, Standard 5, Premium 10. Записи и webhooks не создаются. -
Параллельная синхронизация команды (
/api/v1/feeds/sync+/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync): Все участники и API-ключи команды используют один общий лимит для всех эндпоинтов синхронизации. Общий лимит: 1 для Starter или без действующей подписки, 5 для Standard и 10 для Premium. Лимит автоматически следует текущей действующей подписке; индивидуальная настройка команды от официальной поддержки имеет приоритет. Чтобы увеличить лимит команды, обратитесь в официальную поддержку. -
Sync vs Create: Эндпоинты синхронизации (
/api/v1/feeds/syncи/api/v1/channels/sync+/api/v1/channels/feeds/sync+/api/v1/channels/about/sync) являются отдельными и НЕ интегрируются с веб‑платформой. Они только возвращают данные в ответе API и не создают записи в панели. Чтобы создать постоянные элементы мониторинга, отображающиеся в веб‑платформе, используйте эндпоинты Create (/api/v1/feedsи/api/v1/channels). -
Повтор: После 429 дождитесь завершения активного запроса и повторите попытку с увеличением интервала, соблюдая
Retry-After. После 503 повторите попытку позже. -
Поддерживаемые платформы: TikTok, Instagram, YouTube и другие основные соцсети.
Устранение неполадок
Проблема: "X-API-Key header is required"
Решение: Убедитесь, что вы включили заголовок X-API-Key в запрос.
Проблема: "Invalid API key"
Решение: Проверьте, что API‑ключ корректен. Можно создать новый в Settings → API Keys.
Проблема: "Maximum URLs allowed per request"
Решение: Разделите URL на несколько запросов. Для лент — до 200 URL, для каналов — до 5 URL в запросе.
Проблема: "No collection found"
Решение: Сначала создайте коллекцию в панели или укажите существующий ID коллекции.
Проблема: "Insufficient credits"
Решение: Купите дополнительные кредиты или проверьте ваш тарифный план.
Проблема: "No refreshable items found"
Решение: Обновлять можно только элементы со статусом "Pending" или "Tracked". Проверьте статус ваших элементов.
Проблема: Некоторые URL не проходят валидацию
Решение: Проверьте массив errors в ответе для конкретных сообщений об ошибках. Убедитесь, что URL относятся к поддерживаемым платформам и являются общедоступными.