API и MCP
Два способа читать данные GetCourt: обычный JSON API и MCP-сервер для ИИ-ассистентов. Оба только на чтение.
Отдаётся ровно то, что и так видно на странице игры, — вид спорта, уровень, время, корт и сколько мест свободно. Игры на кортах, которые ещё на модерации, наружу не уходят.
JSON API
Ни ключа, ни сессии не нужно — список игр публичный.
GET https://getcourt.co/api/v1/games GET https://getcourt.co/api/v1/games/:id
Параметры запроса
| Параметр | Что делает |
|---|---|
| city | Город так, как он записан у корта, например Belgrade. Можно передать несколько раз. |
| sport | Вид спорта, например Tennis, Padel, Squash. |
| skill_level | Уровень игры, например Beginner. |
| with_spots | true — только игры, где остались свободные места. |
| urgent | true — только игры со срочным поиском игроков. |
| from | Дата не раньше, ISO 8601 (ГГГГ-ММ-ДД). |
| to | Дата не позже, ISO 8601 (ГГГГ-ММ-ДД). |
| upcoming | false — добавить уже отыгранные игры. По умолчанию только будущие. |
| limit | Сколько игр вернуть: 1–100, по умолчанию 25. |
Повторяющиеся игры проходят фильтры дат всегда: их следующее вхождение считается на лету, а не лежит в колонке, — поэтому в ответе может оказаться игра вне заданного диапазона.
Запрос
curl "https://getcourt.co/api/v1/games?city=Belgrade&sport=Tennis&with_spots=true&limit=2"
Ответ
{
"games": [
{
"id": 1042,
"date": "2026-09-12",
"time": "19:00",
"duration_minutes": 90,
"recurring": false,
"sport": "Tennis",
"skill_level": "Intermediate",
"surface": "Hard",
"environment": "outdoor",
"kind": "game",
"with_coach": false,
"urgent_player_search": true,
"comment": "Doubles, bring a spare ball",
"players": { "taken": 3, "total": 4, "spots_left": 1 },
"court": {
"id": 17,
"name": "Tennis Club Ada",
"city": "Belgrade",
"country_code": "RS",
"latitude": 44.79,
"longitude": 20.41,
"indoor": false,
"outdoor": true,
"free": false,
"url": "https://getcourt.co/courts/17"
},
"url": "https://getcourt.co/games/1042"
}
]
}
Участники наружу не уходят: в ответе только «сколько мест занято из скольких», без имён и контактов.
MCP-сервер
Те же данные в виде сервера Model Context Protocol — ассистент ищет игры сам, а не разбирает страницы сайта.
- Адрес:
POST /mcp, Streamable HTTP поверх JSON-RPC 2.0, батчи поддержаны. - Версии протокола:
2025-06-18,2025-03-26,2024-11-05. - Авторизация:
Authorization: Bearer <токен>. Без токена или с неверным — 401. Пока не выпущен ни один токен, эндпоинт выключен целиком и отвечает 404. - Где взять токен: выпустить себе самому в разделе Аккаунт → Безопасность, когда подтверждена почта или привязан телеграм. Срок — полгода от последнего запроса, так что рабочий токен не протухает; там же его можно отозвать.
Инструменты
| Инструмент | Что делает |
|---|---|
| search_games | Поиск будущих игр по городу, виду спорта, уровню, датам, свободным местам и срочному поиску. |
| get_game | Одна игра по числовому id. |
Настройка клиента
Большинство MCP-клиентов принимают такой JSON-конфиг:
{
"mcpServers": {
"getcourt": {
"type": "http",
"url": "https://getcourt.co/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}
Или вызвать напрямую
curl -X POST https://getcourt.co/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"search_games","arguments":{"city":"Belgrade","with_spots":true}}}'
Ограничения
- JSON API: 60 запросов в минуту с одного IP.
- MCP: 120 запросов в минуту с одного IP — на один вопрос обычно уходит несколько вызовов.
- Оба интерфейса только читают: создать игру или записаться в неё через них нельзя.