Один ZIP содержит одно приложение. JSON сохраняйте в UTF-8. app.json лежит в корне, скриншоты — в screenshots/, дополнительные файлы — в extra_files/. Не вкладывайте всё в лишнюю общую папку.
app.json icon.png application/program.jar screenshots/screen1.png extra_files/readme.txt
{ "name": "Моё приложение", "package_name": "org.example.myapp", "version": "1.0", "category": "Утилиты", "device_category": "Java ME", "device_version": "Все версии", "short_description": "Краткое описание", "description": "Полное описание\n\nВторой абзац", "files": { "app": "application/program.jar", "icon": "icon.png", "screenshots": ["screenshots/screen1.png"], "extra_files": ["extra_files/readme.txt"] } }
Вместо названий платформы и версии можно передать device_version_id из /api/devices. Категория приложения и устройство должны существовать на сайте. Ключевые слова выбираются автоматически, максимум 10. Иконка необязательна; поддерживаются PNG/JPEG/GIF/WebP/ICO. Массивы screenshots и extra_files необязательны.
Добавьте в корень update.json:
{"package_name":"org.example.myapp"}
В app.json укажите обновлённые поля и файлы. Пакет должен соответствовать update.json. При обновлении переданный массив screenshots или extra_files заменяет прежний список; отсутствующее поле сохраняет его, пустой массив очищает список. Новый файл приложения обязателен. Состояние модерации сохраняется: обновление не публикует скрытое приложение автоматически.
Выберите до 10 отдельных ZIP в форме публикации. Для обновления принимается только один ZIP. Сайт проверяет пути, размеры, повторения имён, сжатие, целостность и права автора; содержимое архива не исполняется.
POST /api/v3/apps/import — несколько файлов archives в multipart/form-data; POST /api/v3/apps/{id}/import — один archives для обновления. Требуется Bearer-токен разработчика, администратора или создателя. Результат — массив по каждому архиву; HTTP 207 означает смешанный результат, поэтому проверяйте status каждого элемента.