API Ключі для адмінів та модераторів
Старий бот-API: ключі доступу, три режими запитів і коди відповідей. Застарілий — для нових інтеграцій є /api/v1/.
Це документація старого API. Він лишається робочим для наявних інтеграцій і не змінюється, але нові проєкти мають користуватись новим API — довідник /api/v1/.
Вступ
API ключі дозволяють автоматизувати роботу з перекладами без веб-інтерфейсу. Через один і той самий ключ доступні 3 типи запитів:
user_translate_text— створення/оновлення пропозиції перекладуai_translated_text— запис у полеai_translated_textshow_info— отримання повної інформації по рядку перекладу
Для кого доступні
API ключі доступні тільки для ролей:
- Super Admin
- Admin
- Moderator
Обмеження
- Максимум 1 API ключ на користувача
- Ключі безстрокові (без терміну дії)
- Є окремі ліміти на ключ:
- для
user_translate_text - для
ai_translated_text - для
show_info
- для
- Базове значення ліміту для кожного типу: 10 000 (можна змінити в
/admin/settings) - Є загальний історичний лічильник запитів по користувачу (усі ключі, всі типи запитів)
Створення API ключа
- Увійдіть в особистий кабінет (
/admin/profile) - Відкрийте секцію "API ключ"
- Натисніть "Створити новий ключ"
- (Опціонально) вкажіть назву ключа
- Збережіть ключ
Формат API ключа
wwm_ + 60 hex-символів (64 символи загалом)
Endpoint
- URL:
https://winds4ua.com.ua/api/translations-api.php - Метод:
POST - Content-Type:
application/json - Авторизація: заголовок
X-API-Key
Режим 1: Пропозиція перекладу (user_translate_text)
Параметри
action(опціонально):"propose"(за замовчуванням)row_id(обов'язково): ID рядка (16 символів)user_translate_text(обов'язково): текст перекладуignore_glossary_warnings(опціонально, тільки moderator/admin/super_admin)ignore_validation_errors(опціонально, тільки moderator/admin/super_admin)
Приклад
curl -X POST https://winds4ua.com.ua/api/translations-api.php \
-H "Content-Type: application/json" \
-H "X-API-Key: ваш_api_ключ" \
-d '{
"action": "propose",
"row_id": "0000000000000001",
"user_translate_text": "Перекладений текст"
}'
Режим 2: Запис у ai_translated_text
Параметри
action(опціонально):"update_ai_translated_text"update_ai_translated_text(опціонально, boolean):true(дозволяє ввімкнути режим через додатковий параметр)row_id(обов'язково): ID рядка (16 символів)ai_translated_text(обов'язково): текст для поляai_translated_textoverwrite_ai_translated_text(опціонально, boolean):false(за замовчуванням): запис тільки якщо поле в БД порожнєtrue: примусовий перезапис
provider(опціонально, рядок до 128 символів): хто зробив переклад — напр.openai,deepseek,opencode. Варто передавати, щоб у ревізії було видно провайдера; без нього працює як ранішеmodel(опціонально, рядок до 128 символів): назва моделі, якою зроблено переклад. Так само необов'язкова
Без provider і model запит працює точно як раніше. Якщо передати їх довшими
за 128 символів — 400 із текстом provider і model — до 128 символів.
Пишіть їх за єдиним правилом — так само, як у новому API
(довідник, підрозділ «Як заповнювати provider і model»):
provider— хто віддає модель: лише малі латинські літери, цифри й дефіс, без пробілів і версій (openai,anthropic,google,deepseek,mistral,openrouter,opencode,ollama…).model— точний ідентифікатор моделі з API провайдера, разом із версією (gpt-4.1-mini,claude-sonnet-4-5,deepseek-chat,gemini-2.5-flash).- Одна й та сама модель завжди пишеться однаково — інакше статистика рахує різні написання як різні моделі. Сервер лише обрізає пробіли на краях.
Приклад (без перезапису)
curl -X POST https://winds4ua.com.ua/api/translations-api.php \
-H "Content-Type: application/json" \
-H "X-API-Key: ваш_api_ключ" \
-d '{
"action": "update_ai_translated_text",
"row_id": "0000000000000001",
"ai_translated_text": "AI переклад"
}'
Приклад (з перезаписом)
curl -X POST https://winds4ua.com.ua/api/translations-api.php \
-H "Content-Type: application/json" \
-H "X-API-Key: ваш_api_ключ" \
-d '{
"action": "update_ai_translated_text",
"row_id": "0000000000000001",
"ai_translated_text": "Оновлений AI переклад",
"overwrite_ai_translated_text": true
}'
Режим 3: Отримання інформації (show_info)
Параметри
action(опціонально):"show_info"show_info(опціонально, boolean):trueshow-info(опціонально, boolean):true(альтернативний формат)row_id(обов'язково): ID рядка (16 символів)
Що повертає
original_textai_translated_texttranslated_textref_chinese_text- статуси заповненості/збереження полів
approved_proposalproposals_summary(pending,approved,rejected,total)proposals(всі пропозиції поrow_idзі статусами)
Для рядка, що є в diff-файлі гри, original_text і ref_chinese_text — текст diff, а file_name/number — рядка diff; форма відповіді не змінилась.
Приклад
curl -X POST https://winds4ua.com.ua/api/translations-api.php \
-H "Content-Type: application/json" \
-H "X-API-Key: ваш_api_ключ" \
-d '{
"action": "show_info",
"row_id": "0000000000000001"
}'
Основні коди відповідей
200— успіх400— невалідні параметри401— відсутній/невалідний API ключ403— недостатньо прав404— рядок не знайдено409—ai_translated_textвже заповнене (іoverwrite_ai_translated_text=false)422— помилки валідації (дляuser_translate_text)429— перевищено ліміт запитів для відповідного типу (user_translate_text,ai_translated_text,show_info)
Валідація
Для user_translate_text виконується повна валідація (структура, теги, глосарій).
Для ai_translated_text виконується перевірка обов'язкових параметрів, існування row_id та правила overwrite.
Для show_info виконується перевірка ключа, ліміту типу show_info та існування row_id.
Як відстежити використання API ключа?
В особистому кабінеті відображається:
- Дата створення ключа
- Останнє використання
Якщо ключ ніколи не використовувався - відображається "Ніколи не використовувався".
Рекомендації з безпеки
-
Зберігайте ключі в безпечному місці
- Не зберігайте ключі в публічних репозиторіях
- Використовуйте змінні середовища або конфігураційні файли з обмеженим доступом
-
Регулярно перевіряйте використання
- Перевіряйте "Останнє використання" в особистому кабінеті
- Якщо виявлено підозрілу активність - регенеруйте ключ
-
Використовуйте HTTPS
- Завжди використовуйте HTTPS для передачі API ключів
- Не передавайте ключі через незашифровані з'єднання
-
Обмежте доступ до ключів
- Не діліться ключами з іншими користувачами
- Якщо ключ скомпрометовано - негайно видаліть або регенеруйте його