Получение списка серверов
GET https://openspeedtest.ru/api.php?action=get-servers
Возвращает список активных тестовых серверов. Запрос обязательно передаёт действующий API-ключ: каталог серверов не отдаётся анонимно, чтобы его нельзя было бесконтрольно скопировать.
Аутентификация
| Заголовок | Обязательный | Описание |
|---|---|---|
X-API-KEY | да | Действующий API-ключ |
Как защищён каталог серверов
- Анонимный доступ закрыт. Без ключа возвращается
401— «API Key is missing.». - Ключ можно отозвать в личном кабинете — доступ прекращается немедленно.
- Привязка ключа: для виджета — к домену (
allowed_domains), для CLI — к IP сервера (при отправке результатов). - Учёт и квоты: каждый запрос учитывается, действует лимит аккаунта (см. статью «Квоты и лимиты»).
- Статические выгрузки каталога (например,
servers.json) закрыты на уровне веб-сервера.
Режимы работы
- CLI/агент — ключ в заголовке
X-API-KEY, безOrigin/Referer: возвращается публичный список (или персональный, если ключу назначены серверы). - Виджет/браузер — при наличии
Origin/Refererдополнительно проверяется, что домен входит в разрешённые для ключа.
Параметры
| Параметр | Обязательный | Описание |
|---|---|---|
action | да | get-servers |
format | нет | widget — расширенный объект для встраиваемого теста |
Пример
bashcurl -H "X-API-KEY: ВАШ_КЛЮЧ" \
"https://openspeedtest.ru/api.php?action=get-servers"
Ответ (200)
Без параметра format возвращается массив серверов:
json[
{
"id": 12,
"name": "Moscow #1",
"server_url": "https://msk1.example-speedtest.net",
"dl_url": "https://msk1.example-speedtest.net/speedtest/random3500x3500.jpg",
"ul_url": "https://msk1.example-speedtest.net/speedtest/upload.php",
"ping_url": "https://msk1.example-speedtest.net/speedtest/empty.php",
"get_ip_url": "https://msk1.example-speedtest.net/speedtest/getip.php",
"sponsor_name": "ExampleNet",
"sponsor_url": "https://example.net",
"is_active": 1,
"created_at": "2026-01-10 12:00:00",
"updated_at": "2026-09-01 09:30:00",
"provider_id": 42,
"status": "active"
}
]
При персональном списке серверов к объектам добавляются геоданные: city, region, country, country_code, latitude, longitude, bandwidth_mbps.
Персональный список. Если для ключа назначены серверы, возвращаются только они. Ключи виджета всегда получают полный публичный список. Ключи без привязок получают полный публичный список.
Ошибки
| Код | Условие | Тело |
|---|---|---|
| 401 | Не передан X-API-KEY | {"success":false,"error":"API Key is missing."} |
| 403 | Недействительный или неактивный ключ | {"success":false,"error":"Invalid or inactive API Key."} |
| 403 | Домен не разрешён для ключа | {"success":false,"error":"Domain not allowed for this API Key."} |
| 429 | Превышена квота аккаунта | см. «Квоты и лимиты» |
| 500 | Внутренняя ошибка | {"success":false,"error":"An internal server error occurred."} |
Техническая деталь
С параметром format=widget ответ имеет вид { "servers": [...], "client": {...}|null, "is_pro": bool, "custom_settings": {...}|null }. Поле client заполняется по IP запроса (провайдер и город), если его удалось определить. is_pro и custom_settings относятся к оформлению встраиваемого теста и заполняются для владельцев соответствующего тарифа.
Каждый запрос с валидным ключом фиксируется в счётчиках использования и журнале API — по этим данным владелец ключа видит активность, а сервис может ограничить или заблокировать злоупотребление.