На главную

Публичное API

Таблицы лидеров и статистика FastBuilder и дуэлей — те же цифры, что на сайте, в JSON. Для ботов, оверлеев на стриме, сторонних сайтов и любых ваших поделок.

проверяем… Ключ: не нужен База: https://weakestww.ru/api/v1 Только чтение, GET

Начало

Регистрации, ключей и заголовков нет: откройте адрес в браузере — увидите ответ. CORS открыт, поэтому запрос можно слать прямо со страницы.

curl "https://weakestww.ru/api/v1/duels/top?mode=bridge&limit=5"

Список эндпоинтов отдаёт и само API — GET /api/v1.

Правила

Что Как
Лимит 2 запроса в секунду, до 60 «в запасе» на адрес. Сверх — 429 с заголовком Retry-After. Остаток видно в X-RateLimit-Remaining.
Кэш Ответы кэшируются: дуэли — 2 минуты, FastBuilder — 10. Точное время стоит в Cache-Control, момент расчёта — в поле updatedAt. Опрашивать чаще смысла нет.
Версия Всё лежит под /api/v1. Поля из ответов не пропадают и не переименовываются; несовместимые изменения приедут как /api/v2.
Прочие адреса Эндпоинты сайта вне /api/v1 (например /api/duels/*) — внутренние. Они меняются без предупреждения, на них не завязывайтесь.

FastBuilder

Рекорды бриджинга. В зачёт идут только проверенные забеги — те же, что стоят в таблице рекордов в игре и на сайте.

GET /api/v1/fastbuilder/arenas

Список арен: сколько на каждой зачётных забегов и разных игроков. id отсюда — то, что подставляется в эндпоинты ниже.

GET /api/v1/fastbuilder/top/:arena

Таблица рекордов арены: по лучшему времени каждого игрока, от быстрого к медленному.

Параметр Значение
:arena Ключ арены, регистр не важен: Short, short — одно и то же.
limit 1…100, по умолчанию 10.
Пример ответа
{
  "arena": "Short",
  "updatedAt": "2026-09-06T04:50:20.899Z",
  "top": [
    { "place": 1, "nickname": "Alpha", "timeMs": 4200,
      "date": "2026-08-01T12:00:00.000Z", "replayId": 501 }
  ]
}

replayId — реплей этого забега, его видно по адресу https://weakestww.ru/r/501.

GET /api/v1/fastbuilder/player/:name

Лучшее время игрока на каждой арене, где у него есть зачётный забег, и место в таблице этой арены. Ник — без учёта регистра; в ответе он в том виде, в котором записан в базе. Если зачётных забегов нет — 404.

Пример ответа
{
  "nickname": "Machi",
  "runs": 27,
  "arenas": [
    { "arena": "Short", "place": 2, "timeMs": 4300,
      "date": "2026-08-03T12:00:00.000Z", "runs": 22 }
  ]
}

Дуэли

Статистика дуэлей и командных режимов: победы, серии, K/D.

GET /api/v1/duels/modes

Режимы, число игроков с историей в каждом и общий счётчик сыгранных матчей. id отсюда идёт в ?mode=.

GET /api/v1/duels/top

Таблица лидеров.

Параметр Значение
mode GLOBAL (по умолчанию — все режимы вместе) либо режим из /duels/modes: bridge, mlgrush, bedfight, stickfight, fireballfight, bedwars, rushbedwars, mlgrush4x1.
period all (по умолчанию), daily, weekly, monthly. Период — текущие сутки, неделя с понедельника и месяц.
sort wins (по умолчанию), winrate, games, streak.
limit 1…100, по умолчанию 10.
Пример ответа
{
  "mode": "bridge", "period": "all", "sort": "wins",
  "minGamesForWinrate": null,
  "top": [
    { "place": 1, "nickname": "Alpha", "wins": 30, "losses": 5, "games": 35,
      "kills": 90, "deaths": 20, "goals": 10,
      "currentStreak": 3, "bestStreak": 9, "winrate": 85.71, "kd": 4.5 }
  ]
}
GET /api/v1/duels/player/:name

Сводка игрока по всем режимам (summary), разбивка по режимам (modes) и место в общем рейтинге по победам (rank). Если игрок не сыграл ни одного матча — 404.

Пример ответа
{
  "nickname": "Machi", "rank": 4,
  "lastMatchAt": "2026-09-01T10:00:00.000Z",
  "summary": { "wins": 10, "losses": 5, "games": 15, "kills": 40, "deaths": 20,
               "goals": 3, "currentStreak": 2, "bestStreak": 6,
               "winrate": 66.67, "kd": 2 },
  "modes": [ { "mode": "bridge", "label": "Bridge Duel", "wins": 7, "...": "" } ]
}

Ошибки

У ошибки всегда одна форма: код для программы, пояснение для человека.

{ "error": "unknown_mode", "message": "No such duel mode",
  "allowed": ["GLOBAL", "bridge", "mlgrush", "..."] }
HTTP error Когда
400 bad_limit, bad_name,
unknown_mode, unknown_period,
unknown_sort
Параметр не из списка. Допустимые значения приходят в самом ответе — опечатка не превращается в молча пустой топ.
404 unknown_arena,
player_not_found,
unknown_endpoint
Нет такой арены, у игрока нет зачётной истории, или адрес набран неверно.
429 rate_limited Превышен лимит. В retryAfter и Retry-After — через сколько секунд можно снова.
500 internal_error Сломалось у нас. Повторите позже.

Как считаются цифры

Несколько вещей, без которых числа читаются неправильно.

Нашли расхождение с сайтом или хотите поле, которого нет? Напишите в Discord или Telegram.