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

⚠️ Важная информация о безопасности API

Публичный характер API

ShopStory Public API является публичным API. Любой, кто знает ваш applicationId, может получить доступ к публичной информации о ваших трансляциях.


🔓 Что доступно публично

Следующая информация доступна любому, кто знает ваш applicationId:

Через /v3/streams?applicationId=YOUR_ID

Доступно публично:

  • Список трансляций (запланированных, live, завершенных)
  • Названия и описания стримов
  • Превью изображения
  • Информация о стримерах
  • Категории и теги
  • Привязки к товарам (ID товаров, названия, изображения)
  • Расписание трансляций (plannedDate, startDate, endDate)

НЕ доступно:

  • Аналитика и метрики просмотров
  • Приватные/черновые трансляции
  • Административные данные
  • Платежная информация
  • Персональные данные стримеров

🎯 Кто может видеть ваши данные

Сценарии доступа

  1. Ваши клиенты

    • ✅ Легальный доступ через ваш сайт/приложение
  2. Конкуренты

    • ⚠️ Могут запрашивать ваши данные, если знают applicationId
    • ⚠️ Могут отслеживать ваше расписание стримов
    • ⚠️ Могут анализировать вашу продуктовую стратегию
  3. Любой разработчик

    • ⚠️ Может экспериментировать с вашим applicationId
    • ⚠️ Может скрапить ваш каталог

🛡️ Как защитить конфиденциальные данные

1. Не передавайте чувствительную информацию в названиях

// ❌ ПЛОХО - раскрывает бизнес-стратегию
{
"name": "Эксклюзивная распродажа для VIP-клиентов - скидка 70%",
"description": "Только для клиентов сегмента Premium. Новая коллекция весна 2025"
}

// ✅ ХОРОШО - нейтральное название
{
"name": "Новинки весенней коллекции",
"description": "Обзор актуальных трендов сезона"
}

2. Используйте внутренние ID товаров

// ❌ ПЛОХО - раскрывает артикулы поставщика
{
"vendorCode": "SUPPLIER-EXCLUSIVE-2025-SPRING-VIP",
"feedProductId": "premium-客户-12345"
}

// ✅ ХОРОШО - непрозрачные ID
{
"vendorCode": "p-8f3a91",
"feedProductId": "183966"
}

3. Не раскрывайте планы в расписании

// ❌ ПЛОХО - конкуренты видят вашу стратегию на месяц вперед
plannedStreams: [
{ plannedDate: "2025-11-15", name: "Запуск нового бренда X" },
{ plannedDate: "2025-11-20", name: "Коллаборация с Y" },
{ plannedDate: "2025-11-25", name: "Эксклюзив Black Friday" }
]

// ✅ ХОРОШО - публикуйте стримы за 24-48 часов
plannedStreams: [
{ plannedDate: "2025-10-23", name: "Специальный выпуск" }
]

🔐 Рекомендации по защите applicationId

1. Не публикуйте в открытых источниках

# ❌ ПЛОХО - applicationId в публичном коде
const APP_ID = 'sephora-prod-2025'; // В GitHub!

# ✅ ХОРОШО - в переменных окружения
const APP_ID = process.env.SHOPSTORY_APP_ID;

2. Используйте разные ID для окружений

// ✅ Рекомендуется
const appIds = {
development: 'myapp-dev-xyz',
staging: 'myapp-stage-abc',
production: 'myapp-prod-secret'
};

3. Мониторьте подозрительную активность

// Отслеживайте необычные паттерны
analytics.track('api_request', {
applicationId: appId,
ip: request.ip,
userAgent: request.headers['user-agent'],
endpoint: '/v3/streams'
});

// Алертинг при аномалиях
if (requestsLastHour > 1000) {
sendAlert('Possible scraping detected for ' + appId);
}

📊 Что можно узнать о вашем бизнесе

Реальные риски

Анализируя публичные данные, конкуренты могут:

  1. Узнать вашу контент-стратегию

    • Частота стримов
    • Популярные категории
    • Время проведения (оптимальные слоты)
  2. Понять продуктовый фокус

    • Какие товары вы продвигаете
    • Новинки и тренды
    • Сезонная стратегия
  3. Оценить масштаб операций

    • Количество стримов в месяц
    • Количество уникальных стримеров
    • Охват категорий
  4. Скопировать успешные форматы

    • Названия стримов
    • Описания
    • Структуру каталога

Пример реального скрапинга

# ⚠️ Это может делать ЛЮБОЙ конкурент
import requests
import time

def scrape_competitor(application_id):
"""Собрать все данные о конкуренте"""
all_streams = []
offset = 0

while True:
url = f"https://app.shopstory.live/v3/streams"
params = {
'applicationId': application_id,
'limit': 50,
'offset': offset
}

response = requests.get(url, params=params)
data = response.json()

if data['status'] != 200:
break

streams = data['body']['availableStreams']
all_streams.extend(streams)

if len(streams) < 50:
break

offset += 50
time.sleep(1) # Уважаем rate limits

return all_streams

# Конкурент может получить ВСЕ ваши данные
competitor_data = scrape_competitor('your-application-id')

print(f"Собрано {len(competitor_data)} стримов конкурента")
print(f"Категории: {set(s['categories'] for s in competitor_data)}")
print(f"Товаров в каталоге: {sum(len(s['products']) for s in competitor_data)}")

🚀 Миграция на безопасную авторизацию

Рекомендация от команды ShopStory

Мы рекомендуем перейти на аутентификацию через API токены вместо публичного applicationId.

Как будет выглядеть безопасный API

// ❌ Текущий подход (публичный)
GET /v3/streams?applicationId=sephora&limit=10

// ✅ Рекомендуемый подход (приватный)
GET /v3/streams?limit=10
Authorization: Bearer sk_live_abc123xyz...

Преимущества миграции

АспектТекущее (applicationId)С токеном (Bearer)
Безопасность❌ Публичный ID✅ Секретный токен
Ротация❌ Требует изменения кода✅ Просто обновить токен
Мониторинг⚠️ Сложно отследить источник✅ Токен = конкретное приложение
Права доступа❌ Все или ничего✅ Scoped permissions
Отзыв доступа❌ Невозможно✅ Просто отозвать токен

План миграции (без breaking changes)

// Фаза 1: Поддержка обоих методов (6 месяцев)
// Старый метод - работает
GET /v3/streams?applicationId=myapp

// Новый метод - работает
GET /v3/streams
Authorization: Bearer sk_live_...

// Фаза 2: Deprecated warning (3 месяца)
// Старый метод возвращает предупреждение в заголовках
X-Deprecated: "applicationId auth will be removed on 2026-04-01"

// Фаза 3: Только токены
// Старый метод возвращает 401

🎯 Текущие рекомендации

До миграции на токены:

1. Аудит публичных данных

# Проверьте, что раскрывает ваш API прямо сейчас
curl "https://app.shopstory.live/v3/streams?applicationId=YOUR_ID&limit=1" | jq .

Вопросы для проверки:

  • Раскрывают ли названия стримов конфиденциальную информацию?
  • Содержат ли описания упоминания партнеров/поставщиков?
  • Можно ли по товарам понять вашу ценовую стратегию?
  • Раскрывает ли расписание ваши бизнес-планы?

2. Минимизация публичных данных

// При создании стрима в админке ShopStory
{
"name": "Обзор новинок", // ✅ Нейтрально
"description": "Актуальные тренды", // ✅ Общее
"categories": ["fashion"], // ✅ OK
"plannedDate": "2025-10-23" // ✅ Только ближайшие
}

3. Юридическая защита

Добавьте в Terms of Service:

Использование ShopStory API разрешено только:
- Для интеграции в ваши собственные приложения
- Для отображения контента конечным пользователям

Запрещено:
- Скрапинг данных других клиентов
- Мониторинг активности конкурентов
- Автоматизированный сбор данных

📞 Связаться с командой безопасности

Если вы обеспокоены безопасностью ваших данных:

Мы рассмотрим возможность:

  • Выдачи вам приватных API токенов
  • Включения IP whitelist для вашего applicationId
  • Миграции на безопасную аутентификацию

⚖️ Баланс между публичностью и безопасностью

Почему API публичный

ShopStory Public API создан для:

  • ✅ Встраивания плееров на сайты клиентов
  • ✅ Отображения каталога стримов конечным пользователям
  • ✅ Простоты интеграции без backend

Когда это безопасно

Если вы используете ShopStory для:

  • ✅ Публичных маркетинговых стримов
  • ✅ Контента, который и так виден на вашем сайте
  • ✅ Открытых образовательных сессий

Когда нужна дополнительная защита

Если у вас:

  • ⚠️ Эксклюзивный контент для VIP-клиентов
  • ⚠️ Анонсы продуктов до официального релиза
  • ⚠️ Внутренние стримы для партнеров
  • ⚠️ Конфиденциальная бизнес-информация

→ Свяжитесь с ShopStory для настройки приватного API


✅ Итоговые рекомендации

  1. Осознайте риски

    • Ваш applicationId может быть известен конкурентам
    • Публичные данные доступны для анализа
  2. Минимизируйте раскрытие

    • Не используйте конфиденциальную информацию в названиях
    • Публикуйте расписание за 24-48 часов, не на месяц вперед
    • Используйте непрозрачные ID товаров
  3. Защитите applicationId

    • Не коммитьте в публичные репозитории
    • Используйте переменные окружения
    • Мониторьте подозрительную активность
  4. Планируйте миграцию

    • Обсудите с ShopStory переход на токены
    • Подготовьте план миграции
    • Обновите клиентские приложения
  5. Юридическая защита

    • Добавьте ограничения в Terms of Service
    • Мониторьте нарушения
    • Сообщайте о скрапинге в ShopStory

Важно

Эта документация отражает текущее состояние API. ShopStory работает над улучшением безопасности и планирует ввести аутентификацию через API токены в будущих версиях.

Следите за обновлениями в разделе Changelog.