Разработчикам
API для чтения турниров, подписанные вебхуки и встраиваемые виджеты для организаторов и партнёров MAXIMUS VEGAS. Доступ выдаёт владелец или администратор пространства организатора в разделе «API, вебхуки и виджеты».
Доступ
Ключ API и адреса вебхуков создаются в пространстве организатора. Ключ видит турниры только своего пространства, включая черновики; турнир другого пространства отвечает 404 так же, как несуществующий. До 10 действующих ключей и 5 адресов вебхуков на пространство.
Авторизация и лимиты
Передавайте ключ в заголовке Authorization. Не более 120 запросов в минуту на ключ: сверх лимита — 429 с заголовком Retry-After. Неверный, отозванный или отсутствующий ключ — 401. API только читает данные: изменить турнир через API нельзя.
curl -H "Authorization: Bearer mvk_…" https://www.maximus.vegas/api/v1/tournaments
Методы
GET /api/v1/organizationпространство, которому принадлежит ключGET /api/v1/tournamentsтурниры пространства: статус, формат, игра, старт, участникиGET /api/v1/tournaments/{slug}турнир и его участники с местами и посевомGET /api/v1/tournaments/{slug}/matchesматчи: этап, раунд, стороны, счёт, победитель, времяGET /api/v1/tournaments/{slug}/standingsтаблица: очки (круговая, швейцарская), группы, leaderboard или итоговые места
{ "data": [ { "slug": "autumn-cup", "name": "Autumn Cup", "game": "cs2", "status": "REGISTRATION_OPEN", "registered": 12, "max_participants": 16, "starts_at": "2026-10-12T16:00:00.000Z", "url": "https://www.maximus.vegas/ru/tournaments/autumn-cup" } ] }Ошибки
Ответ с ошибкой — JSON с кодом и пояснением; коды: unauthorized, rate_limited, not_found, method_not_allowed, unavailable.
{ "error": { "code": "not_found", "message": "No such resource for this key." } }Вебхуки
Портал отправляет POST с JSON на ваш HTTPS-адрес. Ответьте кодом 2xx в течение 5 секунд; перенаправления не выполняются. При ошибке доставка повторяется через 1, 5, 30, 120, 360 минут; после шестой неудачной попытки её можно повторить вручную. Адреса во внутренних сетях не принимаются.
События
tournament.status_changedстатус турнира изменилсяregistration.createdновая заявкаregistration.withdrawnзаявка отозванаmatch.completedматч завершёнmatch.correctedрезультат матча исправленpingтестовое событие
{
"id": "evt_1042",
"type": "match.completed",
"created_at": "2026-10-01T18:04:11.000Z",
"data": {
"tournament": { "id": "…", "slug": "autumn-cup", "name": "Autumn Cup", "game": "cs2", "format": "single_elimination", "status": "IN_PROGRESS", "url": "https://www.maximus.vegas/ru/tournaments/autumn-cup" },
"match": { "id": "…", "round": 2, "position": 1, "status": "completed", "a_name": "Night Owls", "b_name": "Iron Wolves", "score_a": 2, "score_b": 1, "winner": "a" }
}
}Подпись и защита от повтора
Каждый запрос подписан секретом адреса (показывается один раз при создании и при смене). Проверьте подпись по сырому телу запроса, отклоните метку времени, отстоящую больше чем на 5 минут, и идентификатор события, который вы уже принимали: повторённый запрос тогда отклоняется. Во время смены секрета заголовок может содержать несколько значений v1=.
MV-Webhook-Id: evt_1042 MV-Webhook-Timestamp: 1790877851 MV-Webhook-Signature: v1=<hex HMAC-SHA256(secret, "evt_1042.1790877851." + body)>
import { createHmac, timingSafeEqual } from "node:crypto";
const seen = new Set(); // keep accepted ids in a database in production
export function verifyWebhook(headers, rawBody, secret) {
const id = headers["mv-webhook-id"];
const ts = headers["mv-webhook-timestamp"];
const sig = headers["mv-webhook-signature"];
if (!id || !ts || !sig) return false;
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false; // stale
const expected = "v1=" + createHmac("sha256", secret).update(`${id}.${ts}.${rawBody}`).digest("hex");
const ok = sig.split(" ").some((s) => s.length === expected.length && timingSafeEqual(Buffer.from(s), Buffer.from(expected)));
if (!ok || seen.has(id)) return false; // forged or replayed
seen.add(id);
return true;
}Виджеты
Виджет — страница для iframe на вашем сайте: сетка, регистрация и таблица турнира, календарь пространства. Показываются опубликованные турниры; ссылки открывают портал в новой вкладке; регистрация проходит на портале. Код вставки — в разделе «API, вебхуки и виджеты» пространства.
<iframe src="https://www.maximus.vegas/embed/ru/tournaments/{slug}/bracket" title="Bracket" width="100%" height="560" style="border:0" loading="lazy"></iframe>
/embed/ru/tournaments/{slug}/registration
/embed/ru/tournaments/{slug}/standings
/embed/ru/organizer/{space}/calendarПроверка интеграции
Кнопка «Отправить тестовое событие» шлёт подписанное событие ping на выбранный адрес — так проверяется приёмник и проверка подписи. Для полного прогона создайте отдельное пространство организатора: его черновые и тестовые турниры видны только ключу этого пространства, а события его турниров уходят только на его адреса.