API документація
Токен із кабінету — ті самі дані акаунта: бібліотека, стеження, ІІ та ключові слова, плюс метадані й збір коментарів.
Випустити токенАвторизація
Передайте токен у заголовку Authorization: Bearer sk_live_…. У URL його класти не потрібно — токен потрапить у логи серверів і історію браузера.
Токени випускаються в кабінеті після підтвердження email, максимум 5 активних на акаунт. Повне значення показується один раз — зберігайте його лише на сервері й відкликайте в разі витоку. Той самий токен, що в кабінеті, покриває скоупи нижче: metadata:read, analyze:write, library:write, ai:write, keywords:write. Токен передавайте лише в заголовку Authorization. Аналіз на запиті списує коментарі з балансу (інакше 402 quota_exceeded). CORS: Bearer працює з будь-якого origin без cookie; cookie-сесія — лише наші домени і CSRF.
| Scope | Доступ |
|---|---|
metadata:read | Безкоштовні метадані поста |
analyze:write | Завдання збору коментарів |
library:write | Збережені пости, стеження, оновлення |
ai:write | Оцінка, запуск, фрази стеження |
keywords:write | Ключові слова, канали, алерти |
Пісочниця — без токена
POST /api/v1/sandbox/metadata і POST /api/v1/sandbox/analyze віддають фікстури тієї самої форми, що бойові ендпоінти: без TikTok, без квоти і без токена. Ліміт за IP — 5 запитів на хвилину і 30 на годину.
# фікстура метаданих (без токена)
curl -X POST https://api.example.com/api/v1/sandbox/metadata \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@user/video/7300000000000000000"}'
# фікстура повного аналізу (одразу status: complete)
curl -X POST https://api.example.com/api/v1/sandbox/analyze \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@user/video/7300000000000000000"}'POST /api/v1/metadata — безкоштовно
Синхронна відповідь: автор, метрики, хештеги, музика, обкладинка, ключові слова опису. Коментарів тут немає. З токеном або сесією — 10 запитів за 2 години на акаунт. З сайту без входу — 10 запитів на добу (лише браузер). Невдалий розбір ліміт не витрачає. Відповіді кешуються 5 хвилин за URL, потрапляння в кеш ("cached": true) ліміт не витрачає. Curl і власні клієнти — лише з Bearer.
curl -X POST https://api.example.com/api/v1/metadata \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@user/video/7300000000000000000"}'POST /api/v1/analyze — за балансом коментарів
Асинхронний: повертає job_id зі статусом queued, результат забирається через GET /api/v1/analyze/{job_id}. Опитуйте раз на 1–2 секунди; статуси — queued, in_progress, complete, failed. Чуже завдання віддає 404. У comments відповіді вже вкладені в батьківський коментар як replies. Збережений розбір і файли медіа коментарів живуть 14 днів з останнього повного збору коментарів; відкриття закладки строк не продовжує.
# створити завдання
curl -X POST https://api.example.com/api/v1/analyze \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@user/video/7300000000000000000"}'
# відповідь: {"job_id": "b1e2...", "status": "queued"}
# забрати результат
curl https://api.example.com/api/v1/analyze/b1e2... \
-H "Authorization: Bearer sk_live_..."Повтори одного URL
Той самий URL не парситься двічі. Якщо завдання ще виконується, повернеться його job_id ("deduplicated": "in_flight"). Якщо результат отримано менше ніж 5 хвилин тому — повернеться готове завдання ("deduplicated": "recent_result"). В обох випадках квота не витрачається.
Idempotency-Key
Опційно. Якщо передасте заголовок Idempotency-Key з унікальним значенням, повтор із тим самим ключем протягом доби поверне той самий job_id замість нового завдання. Для звичайних запитів заголовок не потрібен.
Бібліотека і стеження
POST /api/v1/analyses/{ref}/save зберігає пост. Список — GET /api/v1/analyses/saved, завантаження — GET /api/v1/analyses/{ref}, видалення — DELETE /api/v1/analyses/{ref}. Автооновлення — PUT /api/v1/analyses/{ref}/watch, повний перезбір — POST /api/v1/analyses/{ref}/refresh. Остання сесія браузера — GET /api/v1/analyses/session.
Аналіз за токеном сам зберігає пост через bookmark_if_absent: на момент complete він уже в бібліотеці. Опит GET /api/v1/analyze/{job_id} не продовжує 14-денний TTL.
Від аналізу до бібліотеки
З токеном готове завдання вже в закладках. Далі можна ввімкнути стеження або ІІ — той самий analysis_id це ref.
# створити завдання
curl -X POST https://api.example.com/api/v1/analyze \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://www.tiktok.com/@user/video/7300000000000000000"}'
# забрати результат
curl https://api.example.com/api/v1/analyze/b1e2... \
-H "Authorization: Bearer sk_live_..."
# готове завдання — analysis_id уже в бібліотеці: {"status":"complete","result":{"analysis_id":"tiktok:7300..."}}
# за бажанням: стеження
curl -X PUT https://api.example.com/api/v1/analyses/tiktok:7300.../watch \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"enabled": true, "interval_min": 60}'
# за бажанням: оцінка ІІ (потім POST /ai/run)
curl -X POST https://api.example.com/api/v1/ai/quote \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"ref": "tiktok:7300..."}'ІІ
POST /api/v1/ai/quote рахує списання, POST /api/v1/ai/run запускає завдання, опит — GET /api/v1/ai/jobs/{id}. Фрази стеження — PUT /api/v1/ai/{ref}/queries (до трьох). Виклик цих ручок із токеном — згода надіслати тексти коментарів у модель.
Ключові слова та алерти
GET і PUT /api/v1/keywords — список слів акаунта. Telegram і HTTPS-колбеки — GET / PUT /api/v1/notification-channels. Збіги — GET /api/v1/keyword-alerts.
Вебхук завдань
Якщо у webhook-каналу ввімкнено job_events (типово вимкнено), ми надішлемо POST після завершення завдання: type — job.complete або job.failed, kind — analyze або ai, плюс job_id, ref, url і error. Підпис тіла — HMAC в X-Signature, як у алертів за словами.
Ендпоінти
| Метод | Шлях | Призначення |
|---|---|---|
POST | /api/v1/metadata | Безкоштовні метадані поста |
POST | /api/v1/analyze | Запуск збору коментарів |
GET | /api/v1/analyze/{job_id} | Опит завдання аналізу |
POST | /api/v1/sandbox/metadata | Фікстура метаданих |
POST | /api/v1/sandbox/analyze | Фікстура аналізу |
GET | /api/v1/usage | Ліміти і баланс коментарів |
GET | /api/v1/media/file | Проксі обкладинки та зображень |
GET | /api/v1/media/download | Завантажити медіа файлом |
POST | /api/v1/analyses/{ref}/save | Закладка в бібліотеку |
GET | /api/v1/analyses/saved | Список збережених постів |
GET | /api/v1/analyses/{ref} | Завантажити збережений розбір |
DELETE | /api/v1/analyses/{ref} | Прибрати з бібліотеки |
PUT | /api/v1/analyses/{ref}/watch | Автооновлення |
POST | /api/v1/analyses/{ref}/refresh | Повний перезбір зараз |
GET | /api/v1/analyses/session | Останній розбір сесії |
POST | /api/v1/analyses/save-metadata | Зберегти лише метадані |
POST | /api/v1/ai/quote | Оцінка списання ІІ |
POST | /api/v1/ai/run | Запуск завдання ІІ |
GET | /api/v1/ai/jobs/{id} | Опит завдання ІІ |
PUT | /api/v1/ai/{ref}/queries | Фрази стеження |
GET, PUT | /api/v1/keywords | Список ключових слів |
GET, PUT | /api/v1/notification-channels | Telegram / webhook |
GET | /api/v1/keyword-alerts | Збіги за словами |
Ліміти та квоти
| Ліміт | Значення |
|---|---|
| Метадані | сайт: 10/добу; токен: 10 / 2 години |
| Коментарі | за купленими пакетами (баланс на календарний місяць) |
| Коментарів на пост | до 5 000 |
| Одночасних аналізів | 3 |
Відповіді містять X-RateLimit-Limit, X-RateLimit-Remaining, X-Quota-Limit, X-Quota-Remaining, а при 429 — Retry-After в секундах. Поточний стан також віддає GET /api/v1/usage.
Коли баланс коментарів вичерпано, аналіз відповідає 402 quota_exceeded: купіть пакет на сторінці коментарів — він додається до поточного місяця. Безкоштовний ліміт на коментарі після реєстрації діє лише в кабінеті: за токеном аналіз завжди йде з пакета.
Помилки
Тіло помилки: {"detail": "...", "code": "machine_code"}
| HTTP | code | Коли |
|---|---|---|
| 401 | unauthorized | Токен відсутній, відкликаний або недійсний |
| 403 | forbidden_scope | У токена немає потрібного доступу (scope) |
| 402 | quota_exceeded | Немає доступних коментарів — купіть пакет |
| 402 | payment_required | Платна функція (стеження, ІІ, слова) потрібна після купівлі пакета, або коментарі за цим постом ще не зібрані |
| 429 | rate_limited | Перевищено ліміт запитів, дивіться заголовок Retry-After |
| 429 | concurrency_limit | Уже виконується 3 аналізи одночасно |
| 400 | validation_error | Некоректний URL або непідтримувана платформа |
| 422 | audience_restricted | Автор обмежив аудиторію поста |
| 502 | parse_error | Не вдалося отримати дані поста |
| 404 | not_found | Завдання або розбір не знайдено чи належать іншому акаунту |