Публичный API
Структурированный доступ только для чтения к отчётам сообщества о совместимости карт, автобусов, транспортных средств, модов, объектов, плагинов и инструментов, работающих на openOMSI. Создан для разработчиков openOMSI, инструментов анализа, ботов и интеграций.
Это НЕ API для сообщений об ошибках openOMSI. Ошибки самого движка следует направлять в официальные каналы проекта. Здесь можно только читать то, что протестировало сообщество.
⚠ ЛИМИТ ЗАПРОСОВ ПУБЛИЧНОГО API
6 запросов с одного IP за 60 мин.
Этот API намеренно имеет жёсткое ограничение частоты запросов, поскольку он публичный и не требует аутентификации.
- Проектируйте интеграции так, чтобы ответы кэшировались локально.
- Не опрашивайте API постоянно.
- По возможности используйте агрегирующие эндпоинты: один вызов отвечает на большинство вопросов.
Лимит общий для всех публичных эндпоинтов и действует только для внешних потребителей; сам сайт эту квоту не использует.
Быстрый старт
Базовый URL: https://openomsi.omsimods.com.br/api/public/v1. Всё в формате JSON, только GET, без аутентификации. Начните с эндпоинта meta, чтобы узнать точные значения, принимаемые фильтрами.
curl https://openomsi.omsimods.com.br/api/public/v1/meta
curl "https://openomsi.omsimods.com.br/api/public/v1/content?q=millennium&type=VEHICLE"
OpenAPI (JSON)
Лимит запросов, заголовки и ошибки
- Каждый ответ содержит RateLimit-Limit, RateLimit-Remaining и RateLimit-Reset. После достижения лимита API отвечает 429 с Retry-After (в секундах).
- Условные запросы (If-None-Match / If-Modified-Since) возвращают 304 без тела, но 304 всё равно учитывается в квоте.
- Ошибки всегда имеют один и тот же формат {"error": code, "message": text}; статусы 400, 404, 429 и 500. Трассировки стека никогда не возвращаются.
HTTP/1.1 429 Too Many Requests
Retry-After: 1234
RateLimit-Limit: 6
RateLimit-Remaining: 0
RateLimit-Reset: 1234
{
"error": "rate_limit_exceeded",
"message": "Public API limit reached. Try again later.",
"retry_after": 1234
}Практические сценарии использования
Значения в примерах условные; структура ответов настоящая.
1. Работает ли Grand Paris Moulon на Windows?
Один вызов возвращает сводку по платформам, категории проблем, распределение FPS, протестированные версии и последние отчёты. Смотрите compatibility.by_platform.WINDOWS.
GET https://openomsi.omsimods.com.br/api/public/v1/content/grand-paris-moulon
Ответ (сокращённо)
{
"compatibility": {
"total_reports": 4,
"works": 2,
"works_with_issues": 2,
"does_not_work": 0,
"inconclusive": 0,
"low_data": false,
"by_platform": {
"WINDOWS": {
"reports": 4,
"works": 2,
"works_with_issues": 2,
"does_not_work": 0,
"inconclusive": 0,
"latest_tested_openomsi_version": "0.1.126",
"fps": {
"samples": 3,
"median": 38,
"min": 28,
"max": 60
}
}
}
},
"issues": {
"by_category": {
"TEXTURES": 2,
"SCRIPTS": 1
},
"reports_with_issues": 2
},
"performance": {
"source": "user_reported",
"fps": {
"samples": 3,
"median": 38,
"min": 28,
"max": 60
},
"load_time_seconds": {
"samples": 2,
"median": 95,
"min": 80,
"max": 110
}
},
"latest_tested_openomsi_version": "0.1.126"
}2. Список карт, протестированных на Android
Фильтруйте по типу и платформе. Каждый элемент уже содержит итоги, протестированные платформы и последнюю протестированную версию openOMSI.
GET https://openomsi.omsimods.com.br/api/public/v1/content?type=MAP&platform=ANDROID&sort=reports&limit=20
Ответ (сокращённо)
{
"data": [
{
"id": "cm0millennium1",
"slug": "mapa-brigadeiro-sampaio",
"name": "Mapa Brigadeiro Sampaio",
"type": "MAP",
"author": null,
"current_version": null,
"url": "https://openomsi.omsimods.com.br/conteudo/caio-millennium-brt-i-o500u",
"source_url": "https://omsimods.com.br/",
"image_url": null,
"omsimodsbr_verified": true,
"reports": {
"total": 3,
"works": 0,
"works_with_issues": 3,
"does_not_work": 0,
"inconclusive": 0,
"by_platform": {
"WINDOWS": {
"reports": 3,
"works": 0,
"works_with_issues": 3,
"does_not_work": 0,
"inconclusive": 0
}
}
},
"reports_with_issues": 3,
"latest_tested_openomsi_version": "0.1.126",
"latest_test_at": "2026-09-29T15:20:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"pages": 1
}
}3. Как разработчик openOMSI, посмотреть проблемы с текстурами в текущей версии
Фильтруйте отчёты по версии openOMSI и категории проблемы. Каждый отчёт содержит структурированные issue_categories и описание тестировщика.
GET https://openomsi.omsimods.com.br/api/public/v1/reports?openomsi_version=0.1.126&issue_category=TEXTURES&limit=50
Ответ (сокращённо)
{
"data": [
{
"id": "cm0report0001",
"content": {
"id": "cm0grandparis01",
"slug": "grand-paris-moulon",
"name": "Grand Paris Moulon",
"type": "MAP"
},
"content_version": null,
"openomsi_version": "0.1.126",
"platform": "WINDOWS",
"architecture": "X64",
"result": "WORKS_WITH_ISSUES",
"fps": {
"avg": 41,
"min": 28,
"max": 60
},
"load_time_seconds": 95,
"device": {
"label": "Desktop GTX 1060",
"model": null,
"os_version": "Windows 11",
"cpu": "Ryzen 5 3600",
"gpu": "GTX 1060 6GB",
"ram_gb": 16
},
"issue_categories": [
"TEXTURES"
],
"issue_description": "Windows of some black buses render with wrong textures.",
"notes": null,
"tested_at": "2026-09-29T17:02:00.000Z",
"screenshot_url": null,
"author": {
"display_name": "tester"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"pages": 1
}
}4. Обнаружить возможную регрессию между версиями
compare показывает один контент бок о бок в двух версиях; regressions перечисляет весь контент, который раньше работал, а теперь сообщает о проблемах. Результаты — лишь возможные регрессии, но не подтверждённые.
GET https://openomsi.omsimods.com.br/api/public/v1/compatibility/compare?content=grand-paris-moulon&from=0.1.121&to=0.1.126
GET https://openomsi.omsimods.com.br/api/public/v1/compatibility/regressions?from=0.1.121&to=0.1.126&type=BUS
Ответ (сокращённо)
{
"changes": [
{
"platform": "WINDOWS",
"from": {
"works": 3,
"works_with_issues": 0,
"does_not_work": 0,
"inconclusive": 0
},
"to": {
"works": 1,
"works_with_issues": 3,
"does_not_work": 0,
"inconclusive": 0
},
"from_reports": 3,
"to_reports": 4,
"possible_regression": true
}
],
"possible_regression": true
}5. Подключить Discord-бота
Ищите по названию, затем формируйте ответ по первому элементу: название, платформа, результат, последняя протестированная версия и количество отчётов. Кэшируйте у себя.
GET https://openomsi.omsimods.com.br/api/public/v1/content?q=grand%20paris&platform=WINDOWS&limit=1
Ответ (сокращённо)
{
"data": [
{
"name": "Grand Paris Moulon",
"reports": {
"total": 4,
"works": 2,
"works_with_issues": 2
},
"latest_tested_openomsi_version": "0.1.126"
}
]
}Пример ответа бота
Grand Paris Moulon
Windows
⚠ Работает с проблемами
Последнее тестирование: 0.1.126
Отчёты: 4
6. О каких проблемах на Android сообщают чаще всего?
Эндпоинт issues агрегирует категории с количеством отчётов и различного контента; эндпоинт platform добавляет наиболее часто упоминаемые устройства и FPS.
GET https://openomsi.omsimods.com.br/api/public/v1/issues?platform=ANDROID&openomsi_version=0.1.126
GET https://openomsi.omsimods.com.br/api/public/v1/platforms/android
Ответ (сокращённо)
{
"data": [
{
"category": "TEXTURES",
"reports": 31,
"contents": 18
},
{
"category": "PHYSICS",
"reports": 22,
"contents": 14
}
]
}7. Текущий релиз и загрузки
releases/latest возвращает версию, дату публикации, URL на GitHub и официальные файлы для загрузки по платформам и архитектурам.
GET https://openomsi.omsimods.com.br/api/public/v1/releases/latest
Ответ (сокращённо)
{
"version": "0.1.126",
"published_at": "2026-09-27T20:11:00.000Z",
"github_url": "https://github.com/openOMSI-org/openOMSI/releases/tag/v0.1.126",
"assets": [
{
"key": "android-arm64",
"label": "Android ARM64",
"platform": "ANDROID",
"architecture": "ARM64",
"type": "CLIENT",
"name": "openOMSI-android-arm64.apk",
"download_url": "https://github.com/openOMSI-org/openOMSI/releases/download/v0.1.126/openOMSI-android-arm64.apk",
"size_bytes": 152043520
}
]
}8. Найти контент, который ещё никто не тестировал
has_reports=false выводит одобренный контент без отчётов; комбинируйте с type или q.
GET https://openomsi.omsimods.com.br/api/public/v1/content?has_reports=false&type=MAP&limit=50
Ответ (сокращённо)
{
"data": [
{
"name": "…",
"type": "MAP",
"reports": {
"total": 0
}
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 312,
"pages": 7
}
}Эндпоинты
Все пути начинаются с https://openomsi.omsimods.com.br/api/public/v1. Полное машиночитаемое описание — документ OpenAPI.
| Эндпоинт | Что возвращает |
|---|
GET /meta | Таксономии, лимиты и версия API. |
GET /status | Проверка работоспособности (тоже ограничена по частоте: не опрашивайте её). |
GET /content | Поиск контента с итогами по отчётам, протестированными платформами и последней протестированной версией для каждого элемента. |
GET /content/{slug} | Один контент за один вызов: источники, совместимость, проблемы, производительность, протестированные версии, устройства и последние отчёты. |
GET /reports | Отдельные отчёты со структурированными категориями проблем, FPS, оборудованием и датами. |
GET /compatibility | Агрегация по версии openOMSI, платформе или типу контента. |
GET /compatibility/compare | Один контент, сравниваемый между двумя версиями openOMSI. |
GET /compatibility/regressions | Возможные регрессии между последовательными протестированными версиями. |
GET /issues | Категории проблем, ранжированные по отчётам и затронутому контенту. |
GET /platforms/{platform} | Агрегация по одной платформе (android, windows, linux, macos). |
GET /devices | Оборудование, указанное тестировщиками, сгруппированное и подсчитанное. |
GET /runtime-reports | Тесты устройств самого openOMSI (сессия могла так и не начаться): оборудование, ОС, до какого этапа дошёл запуск, графический API, очищенный текст ошибки и необязательный очищенный журнал (sanitized_log). Без какого-либо контента. |
GET /runtime-reports/{id} | Один тест устройства с очищенным журналом, если он есть. |
GET /releases/latest | Текущий релиз и официальные файлы для загрузки. |
GET /releases | История релизов с постраничной навигацией. |
Тесты устройств никогда не раскрывают исходный журнал, IP-адреса, адреса электронной почты, имена пользователей и идентификаторы аккаунтов: только технические данные и очищенный журнал. Это наблюдения сообщества, а не бенчмарк и не официальное требование.
Фильтры, пагинация, сортировка и поля
- Пагинация: page (с 1) и limit (по умолчанию 20, максимум 50). Списки отвечают {"data": [...], "pagination": {page, limit, total, pages}}.
- Сортировка: sort = reports, recent, name, latest_test или issues; order = asc или desc.
- Необязательный fields=name,slug,type оставляет только эти поля верхнего уровня у каждого элемента. Ответ по умолчанию уже полный.
- Фильтры по enum нечувствительны к регистру и принимают списки через запятую (platform=ANDROID,WINDOWS).
- Если при поиске контента используются фильтры по отчётам (platform, result, openomsi_version, issue_category), подсчёты относятся к соответствующим отчётам.
Параметры
| Параметр | Описание |
|---|
q | Текстовый поиск по названиям и псевдонимам контента. |
type | Тип контента. Допускается список через запятую. |
platform | Платформа, указанная в отчёте. Допускается список через запятую. |
result | Результат, сообщённый тестировщиком. Допускается список через запятую. |
openomsi_version | Версия openOMSI, на которой выполнялся тест. |
issue_category | Категория проблемы, прикреплённая к отчёту (AUDIO принимается как псевдоним SOUND). Допускается список через запятую. |
author | Автор контента (частичное совпадение). |
has_reports | true: только протестированный контент; false: только контент, который ещё никто не тестировал. |
sort | Поле сортировки. |
order | Направление сортировки. |
page | Номер страницы, начиная с 1. |
limit | Количество элементов на странице (максимум 50). |
fields | Список полей верхнего уровня через запятую, которые нужно оставить в каждом элементе (необязательно; по умолчанию элемент возвращается целиком). |
content | Slug или id контента (точное совпадение) либо часть его названия. |
architecture | Архитектура процессора, указанная в отчёте. Допускается список через запятую. |
device | Текст, содержащийся в названии устройства. |
has_fps | Только отчёты с указанным (true) или без указанного (false) значения FPS. |
from | reports: протестировано в эту дату ISO или позже. compare/regressions: более старая версия openOMSI. |
to | reports: протестировано в эту дату ISO или раньше. compare/regressions: более новая версия openOMSI. |
startup_stage | До какого этапа openOMSI дошёл на устройстве. Допускается список через запятую. |
graphics_backend | Графический API, выбранный тестировщиком. Допускается список через запятую. |
gpu | Текст, содержащийся в названии GPU. |
cpu | Текст, содержащийся в названии CPU. |
manufacturer | Производитель устройства (частичное совпадение). |
device_model | Модель устройства (частичное совпадение). |
os_version | Версия ОС (частичное совпадение). |
media_indexing_observed | Android: тестировщик сообщил, что галерея или сканер медиафайлов индексировал изображения OMSI (true) или нет (false). |
has_log | Только тесты с очищенным журналом (true) или без него (false). |
include_log | Включить sanitized_log в каждый элемент (по умолчанию false: в списке указывается только has_sanitized_log). |
Enums / Таксономии
Сгенерировано из собственных списков приложения. AUDIO принимается в фильтрах как псевдоним SOUND.
ContentType
ADDONMAPBUSVEHICLEMODSCENERYOBJECTSPLINEPLUGINTOOLOTHER
CompatibilityResult
WORKSWORKS_WITH_ISSUESDOES_NOT_WORKINCONCLUSIVE
Platform
ANDROIDWINDOWSLINUXMACOS
Architecture
X86X64ARM64UNKNOWN
IssueCategory
GRAPHICSTEXTURESPHYSICSSCRIPTSSOUNDCOLLISIONSPERFORMANCELOADINGCONTROLSMULTIPLAYERINTERFACECRASHOTHER
Данные о производительности
FPS и время загрузки — данные, СООБЩАЕМЫЕ ПОЛЬЗОВАТЕЛЯМИ, а не контролируемый бенчмарк. В статистике в первую очередь используется медиана, и всегда указывается размер выборки (samples), а также min и max.
Кэш, CORS и версионирование
- Ответы содержат Cache-Control, ETag и Last-Modified. Браузеры могут использовать их повторно несколько минут; общие кэши обязаны перепроверять, чтобы квота всегда соблюдалась.
- CORS открыт только для GET, HEAD и OPTIONS. Методов записи нет.
- Версия API указана в пути (/api/public/v1). Старые пути без версии перенаправляют (308) на v1. Изменения, ломающие совместимость, будут выходить только в новой версии.
- Сайт openOMSI Compatibility читает собственную базу данных напрямую и никогда не использует этот API или его квоту.
Рекомендации по интеграции
- Кэшируйте данные локально.
- Избегайте опроса; делайте запросы только при необходимости.
- Используйте агрегирующие эндпоинты (content detail, compatibility, issues, platforms).
- Учитывайте Retry-After и заголовки RateLimit-*.
- Не парсите HTML, если в API есть эквивалентные данные.
- Не делайте из отчётов сообщества выводов о подтверждённых ошибках движка.
- Всегда сохраняйте версию openOMSI в своём анализе.
О данных
Отчёты сообщества — это наблюдения, а не авторитетная сертификация совместимости. Один отчёт не означает ни «этот мод совместим», ни «это ошибка openOMSI». Учитывайте количество выборок, версию openOMSI, платформу, оборудование, версию контента, категорию проблемы и согласованность отчётов между собой.
Конфиденциальность
Ответы никогда не содержат Discord ID, адреса электронной почты, IP-адреса, сессии, подписки на уведомления, данные модерации или идентификаторы устройств. Отчёты показывают только публичное отображаемое имя и оборудование, которое тестировщик решил опубликовать. В отчёте issue_categories структурировано, а issue_description — это единственное свободное текстовое описание тестировщика для всего отчёта.
https://openomsi.omsimods.com.br/api/openapi.json