# Документация API Taisly - **OpenAPI Version:** `3.1.0` - **API Version:** `1.0.0` # Документация API Taisly API Taisly позволяет автоматизировать публикацию и репост видео на нескольких платформах социальных сетей с помощью простой аутентификации по API-ключу. ## Функции - Загружать и публиковать видео на нескольких платформах одновременно - Настраивать автоматический репост с одной платформы на другие - Планировать публикации на потом - Управлять подключёнными аккаунтами социальных сетей - Отслеживать историю и статус публикаций ## Требования - **Тарифный план**: STARTER, INFLUENCER или PRO (API-ключи недоступны на тарифе FREE) - **API-ключ**: Создайте в панели управления на - **HTTPS**: Все запросы к API должны использовать HTTPS ## Ограничения скорости | Тариф | Запросов в час | | ---------- | -------------- | | STARTER | 50 | | INFLUENCER | 200 | | PRO | 1000 | При превышении лимита вы получите ошибку 429 с полем `retryAfter`, указывающим количество секунд ожидания. ## Рекомендации по безопасности 1. Никогда не добавляйте API-ключи в систему контроля версий 2. Храните ключи в переменных окружения 3. Немедленно пересоздавайте ключи при компрометации 4. Используйте только HTTPS ## Требования к видео - **Формат**: MP4, MOV или другие распространённые форматы - **Размер**: Максимум 500 МБ - **Длительность**: 3-90 секунд - **Ориентация**: Вертикальная (9:16) ## Пример быстрого старта ```bash # 1. Получите список подключённых платформ curl -X GET https://app.taisly.com/api/private/platform/platforms \ -H "Authorization: Bearer taisly_your_api_key_here" # 2. Загрузите видео curl -X POST https://app.taisly.com/api/private/post \ -H "Authorization: Bearer taisly_your_api_key_here" \ -F "video=@/path/to/video.mp4" \ -F "platforms=[\"platform_id_1\"]" \ -F "description=Смотрите моё новое видео!" # 3. Проверьте историю публикаций curl -X GET https://app.taisly.com/api/private/post/history \ -H "Authorization: Bearer taisly_your_api_key_here" ``` ## Пример на Python ```python import requests API_KEY = 'taisly_your_api_key_here' BASE_URL = 'https://app.taisly.com/api/private' headers = { 'Authorization': f'Bearer {API_KEY}' } # Получить платформы response = requests.get(f'{BASE_URL}/platform/platforms', headers=headers) platforms = response.json()['data'] print(f"Подключённые платформы: {len(platforms)}") # Загрузить видео files = {'video': open('video.mp4', 'rb')} data = { 'platforms': str([platforms[0]['_id']]), 'description': 'Описание моего видео' } response = requests.post(f'{BASE_URL}/post', headers=headers, files=files, data=data) print(response.json()) ``` ## Servers - **URL:** `https://app.taisly.com/api/private` - **Description:** Production сервер ## Operations ### Получить информацию об API-ключе - **Method:** `GET` - **Path:** `/user/api-key` - **Tags:** API Key Management Получить информацию о вашем текущем API-ключе. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 403 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Создать API-ключ - **Method:** `POST` - **Path:** `/user/api-key/generate` - **Tags:** API Key Management Создать новый API-ключ или пересоздать, если ключ уже существует. **ВАЖНО**: - Полный API-ключ показывается только один раз. Сохраните его надёжно. - При пересоздании старый ключ будет немедленно аннулирован. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Отозвать API-ключ - **Method:** `POST` - **Path:** `/user/api-key/revoke` - **Tags:** API Key Management Немедленно отозвать текущий API-ключ. Все запросы с этим ключом будут завершаться ошибкой. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 403 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Получить подключённые платформы - **Method:** `GET` - **Path:** `/platform/platforms` - **Tags:** Platforms Получить все аккаунты социальных сетей, подключённые к вашему аккаунту. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 403 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Создать публикацию - **Method:** `POST` - **Path:** `/post` - **Tags:** Posts Загрузить видео на одну или несколько подключённых платформ. **Требования к видео:** - Формат: MP4, MOV или другие распространённые форматы - Размер: Максимум 500 МБ - Длительность: 3-90 секунд - Ориентация: Вертикальная (9:16) **Планирование:** - Передайте `scheduled` как Unix-метку времени в миллисекундах для запланированной публикации (опустите этот параметр, если не хотите планировать) #### Request Body ##### Content-Type: multipart/form-data - **`platforms` (required)** `array` — Список ID **Items:** `string` - **`video` (required)** `string`, format: `binary` — - **`description`** `string` - **`previewTime`** `number` — Время в секундах для создания превью видео (по умолчанию: 0) - **`scheduled`** `string` **Example:** ```json { "video": {}, "platforms": [ "" ], "description": "", "previewTime": 1, "scheduled": "" } ``` #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 403 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Получить историю публикаций - **Method:** `GET` - **Path:** `/post/history` - **Tags:** Posts Получить историю ваших публикаций с информацией о статусе для каждой платформы. **Пагинация:** - Используйте параметр `page` для пагинации (10 элементов на странице) - Или используйте `startTime` и `endTime` для фильтрации по диапазону дат (возвращает все подходящие публикации) **Значения статуса:** - PENDING: Публикация в очереди - SUCCESS: Успешно опубликовано - FAILED: Ошибка публикации (проверьте поле message для кода ошибки) #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Отменить запланированную публикацию - **Method:** `GET` - **Path:** `/post/cancelSchedule` - **Tags:** Posts Отменить публикацию, запланированную на потом. Публикация будет удалена безвозвратно. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Получить конфигурации репостов - **Method:** `GET` - **Path:** `/reposts` - **Tags:** Reposts Получить все настроенные правила автоматического репоста. Когда вы публикуете на платформу 'from', контент будет автоматически репоститься на все платформы 'to'. #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Добавить конфигурацию репоста - **Method:** `POST` - **Path:** `/repost/add` - **Tags:** Reposts Настроить автоматический репост с одной платформы на другие. **Как это работает:** - Когда вы публикуете контент на платформу 'from', он автоматически репостится на все платформы 'to' **Примечание**: Циклические зависимости предотвращаются. Нельзя создать A→B, если B→A уже существует. #### Request Body ##### Content-Type: application/json - **`from` (required)** `string` — ID платформы - **`to` (required)** `array` — Список ID платформ **Items:** `string` **Example:** ```json { "from": "", "to": [ "" ] } ``` #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 400 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Удалить конфигурацию репоста - **Method:** `POST` - **Path:** `/repost/delete` - **Tags:** Reposts Удалить правило автоматического репоста. Будущие публикации на исходной платформе больше не будут автоматически репоститься. #### Request Body ##### Content-Type: application/json - **`id` (required)** `string` **Example:** ```json { "id": "" } ``` #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json ### Приостановить/Возобновить конфигурацию репоста - **Method:** `POST` - **Path:** `/repost/pause` - **Tags:** Reposts Временно приостановить или возобновить автоматический репост. Полезно, когда вы хотите временно остановить репост без удаления конфигурации. #### Request Body ##### Content-Type: application/json - **`id` (required)** `string` - **`isPaused` (required)** `boolean` **Example:** ```json { "id": "", "isPaused": true } ``` #### Responses ##### Status: 200 ###### Content-Type: application/json ##### Status: 401 ###### Content-Type: application/json ##### Status: 500 ###### Content-Type: application/json