Перейти к содержимому
Socialift
Разделы документации
Настройка

Приложение TikTok для API: пошаговая настройка

Для интеграции с TikTok нужно приложение в TikTok for Developers с двумя продуктами: Login Kit (OAuth и redirect URI) и Content Posting API с включённым Direct Post. Скопируйте Client key и Client secret, добавьте scope вроде video.publish, подтвердите домен или URL prefix для PULL_FROM_URL, протестируйте в sandbox и пройдите ревью — до аудита посты видны только в приватном режиме.

Обновлено:

Что даёт приложение TikTok?

Два значения: Client key (идентификатор приложения, в OAuth-запросах передаётся как client_key) и Client secret (секрет: обмен кода на токены и проверка подписи вебхуков). Пользовательский access token живёт 24 часа, refresh token — 365 дней; при обновлении refresh token может смениться, поэтому каждый раз сохраняйте новый.

Token endpoint ожидает application/x-www-form-urlencoded — запрос с JSON будет отклонён.

Scope делятся на две группы: профиль и список видео (user.info.*, video.list) и публикация контента (video.upload, video.publish). Все scope, кроме user.info.basic, требуют предварительного одобрения в конфигурации приложения.

Как создать и настроить приложение в TikTok for Developers

  1. Зарегистрируйтесь и создайте приложение

    Войдите в TikTok for Developers и создайте приложение. TikTok рекомендует регистрировать его от имени организации; личный аккаунт разработчика для реальных интеграций не рекомендуется.

  2. Заполните данные приложения

    Иконка (1024×1024 px, JPEG/JPG/PNG, до 5 МБ), название, категория, описание (показывается на странице авторизации), Terms of Service URL и Privacy Policy URL. У приложений, созданных после 9 сентября 2024 года, эти URL проверяются. Для платформы Web нужен URL официального сайта.

  3. Добавьте Login Kit и redirect URI

    Products → Add products → Login Kit. Правила redirect URI: абсолютный адрес на https, статический, без query-параметров и #; не больше 10 штук, каждый короче 512 символов; redirect_uri в запросе должен в точности совпадать с зарегистрированным.

  4. Добавьте Content Posting API и включите Direct Post

    Добавьте продукт Content Posting API и включите в его настройках конфигурацию Direct Post. Для прямой публикации приложение должно получить одобрение scope video.publish, а пользователь — выдать его.

  5. Добавьте scope

    В разделе Scopes добавьте только те scope, которые интеграция действительно использует (таблица ниже). В разделе Credentials скопируйте Client key и Client secret.

  6. Подтвердите владение URL для PULL_FROM_URL

    В виджете URL properties добавьте и подтвердите Domain (например, cdn.example.com — все пути на нём) или URL prefix (https:// + хост + путь + /). URL медиа должен быть на https, без редиректов и доступен всё время загрузки (до часа после старта задачи). Иначе API вернёт url_ownership_unverified (403). При загрузке файла самостоятельно (FILE_UPLOAD) подтверждать домен не нужно.

  7. Настройте callback URL вебхуков

    Укажите callback URL в настройках приложения (только HTTPS). Endpoint должен сразу отвечать 200: иначе TikTok считает доставку неуспешной и повторяет её до 72 часов с экспоненциальной задержкой. Доставка «хотя бы один раз» — отфильтровывайте дубли.

  8. Протестируйте в sandbox

    Sandbox — ограниченная среда, где интеграцию можно проверить без отправки на ревью. Пройдите в ней весь поток входа и публикации на тестовых аккаунтах — там же записывается демо-видео.

  9. Отправьте на ревью с демо-видео

    Подробно опишите, как в приложении используется каждый продукт и scope. Нужно хотя бы одно демо-видео (до 5, каждое до 50 МБ): полный сквозной поток, интерфейс и действия пользователя; для веб-приложения домен в видео должен совпадать с URL сайта. Сайт должен быть полностью готов, а ссылки на Terms of Service и Privacy Policy видны без открытия меню. Снятие ограничения приватности для Direct Post — отдельный аудит Content Posting API.

Как подключить приложение TikTok к Socialift

  1. «Kalitlar» → «TikTok app»

    В кабинете откройте «Kalitlar» (ключи) и карточку «TikTok app». Redirect URI из блока «Konsolga ko'chiring» (скопируйте в консоль) перенесите в настройки Login Kit символ в символ — даже / в конце имеет значение.

  2. Введите Client key и Client secret

    Поле «Scope'lar» необязательно: если пусто, запрашиваются user.info.basic, user.info.profile, user.info.stats, video.list, video.upload, video.publish. «Saqlash va tekshirish» (сохранить и проверить) — Socialift запрашивает client access token у token endpoint TikTok и так проверяет ключ.

  3. Скопируйте Webhook URL

    После сохранения в карточке появится Webhook URL — вставьте его в поле callback URL в TikTok. События проверяются по подписи вашим Client secret. В карточке также виден «Webhook verify token», но в TikTok такого поля нет — его можно игнорировать.

  4. Подключите аккаунт

    В «Ulanishlar» (подключения) нажмите «Ulash» (подключить) на карточке TikTok. Access token живёт 24 часа — «Token'ni yangilash» (обновить токен) обновляет его по refresh token. Методы публикации проверяйте в Playground с SELF_ONLY.

Какие scope нужны и для чего

Какие scope нужны и для чего — Таблица возможностей по платформам
ScopeЧто даётВ SDK
user.info.basicПрофиль: open id, аватар, отображаемое имяtt.me
user.info.profileprofile_web_link, profile_deep_link, bio_description, is_verifiedtt.me
user.info.statsКоличество лайков, подписчиков, подписок и видеоtt.me
video.listЧтение публичных видео пользователяtt.videos, tt.video, tt.iter_videos
video.uploadОтправка контента автору как черновика (он редактирует и публикует в TikTok)tt.upload_video
video.publishПрямая публикация контента в профильtt.creator_info, tt.publish_video, tt.publish_photos

Перед публикацией обязателен вызов creator_info: privacy_level должен быть одним из возвращённых privacy_level_options, иначе privacy_level_option_mismatch.

Ключи TikTok в Python SDK

TikTok.from_env() читает TIKTOK_CLIENT_KEY и TIKTOK_CLIENT_SECRET.

tiktok_post.py
import asyncio
import secrets

from socialift import TikTok

REDIRECT_URI = "https://example.com/auth/tiktok/callback"  # символ в символ как в Login Kit


async def main() -> None:
    # TIKTOK_CLIENT_KEY, TIKTOK_CLIENT_SECRET, SOCIALIFT_LICENSE_KEY
    async with TikTok.from_env() as tt:
        print(tt.login_url(redirect_uri=REDIRECT_URI, state=secrets.token_urlsafe(32)))

        bundle = await tt.exchange_code(input("code: "), redirect_uri=REDIRECT_URI)
        info = await tt.creator_info(bundle.access_token)  # обязательно перед публикацией
        print(info["privacy_level_options"])
        result = await tt.publish_video(bundle.access_token, video_url="https://cdn.example.com/reel.mp4",
                                        title="Hello TikTok!", privacy_level="SELF_ONLY", wait=True)
        print(result)


asyncio.run(main())

Явно: TikTok(client_key="...", client_secret="..."). video_url должен быть с подтверждённого домена; чтобы загрузить файл самому, передайте байты или путь в video=.

Подпись вебхука в SDK проверяет socialift.webhooks.verify_tiktok_request(client_secret, body, headers) — body должен быть сырыми байтами запроса.

Частые ошибки

  • Redirect URI отличается от указанного в Login Kit: http, / в конце или query-параметр.
  • Попытка опубликовать публичный пост без аудита — контент ограничен приватным режимом, а для публичного аккаунта вернётся unaudited_client_can_only_post_to_private_accounts.
  • Не вызван creator_info, или privacy_level не входит в возвращённый список.
  • PULL_FROM_URL с неподтверждённого домена или URL с редиректом — url_ownership_unverified.
  • После обновления сохранён старый refresh token — следующая попытка будет отклонена.
  • В token endpoint отправлен JSON — нужен application/x-www-form-urlencoded.
  • Домен в демо-видео не совпадает с URL сайта или один из продуктов не показан.
  • Endpoint вебхука выполняет тяжёлую работу и поздно отвечает 200 — TikTok повторяет доставку, появляются дубли.

Частые вопросы

Где взять client key и client secret TikTok?

В TikTok for Developers, в разделе Credentials на странице приложения. Client key — аналог App ID у Meta, но называется иначе. В кабинете Socialift их вписывают в поля «Client key» и «Client secret» карточки «TikTok app».

Почему видео, отправленное в TikTok через API, приватное?

Весь контент от API-клиентов без аудита ограничен приватным режимом. Чтобы снять ограничение, нужно пройти аудит Content Posting API. Поэтому в Socialift SDK значение privacy_level по умолчанию — SELF_ONLY.

Обязательно ли подтверждать домен для PULL_FROM_URL?

Да. Для загрузки по ссылке нужно добавить в приложение Domain или URL prefix и подтвердить владение, иначе вернётся url_ownership_unverified. Если загружать файл частями самостоятельно (FILE_UPLOAD), такого требования нет.

Сколько живёт access token TikTok?

Access token — 24 часа, refresh token — 365 дней. Refresh token в ответе на обновление может отличаться от прежнего — всегда сохраняйте новый. В кабинете Socialift есть кнопка «Token'ni yangilash» (обновить токен), в SDK — tt.refresh_token(...).

Что показать в демо-видео для ревью TikTok?

Полный поток на сайте или в приложении, где будет интеграция: вход, выдачу разрешений и работу каждого выбранного продукта с интерфейсом. Если приложение ещё не одобрено, видео записывают в sandbox; для веб-приложения домен в видео должен совпадать с URL сайта.

Источники

  1. TikTok: Register your app
  2. TikTok: Login Kit for Web
  3. TikTok: Content Posting API — Get started
  4. TikTok: Media transfer guide
  5. TikTok: App review guidelines
  6. TikTok: Webhooks overview

Связанные страницы