Всё то же доступно по REST — интерфейс не обязателен. Асинхронное задание с вебхуком:
curl -X POST http://127.0.0.1:8653/api/jobs \
-H "X-TT-Token: $TT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"model":{"custom":"HuggingFaceTB/SmolLM2-135M-Instruct"},
"dataset_id":"<dataset-id>",
"lora":{"r":16,"alpha":32},
"params":{"lr":2e-4,"epochs":3,"bs":2,"gacc":1},
"webhook":"https://example.com/hook"}'- POST /api/jobs создаёт асинхронное задание и возвращает URL мониторинга; GET /api/jobs/<id> даёт live-статус.
- по завершении сервер отправляет POST на ваш вебхук с подписью
X-TT-Signature: sha256=HMAC(body)— проверьте целостность на приёмнике тем же ключом. - пользовательские заголовки вебхука очищаются, приватные/внутренние адреса (SSRF) блокируются — кроме случая
TT_WEBHOOK_ALLOW_PRIVATE=1для чисто локальной автоматизации. - модалка очереди показывает колонку вебхука каждой задачи: доставлено ✓ или ошибка ✗.

Совет: полная карта API — в INSTALL.md, поставляемом рядом с этим файлом.
