Документация› API и интеграции› Получение списка серверов

Получение списка серверов

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 — по этим данным владелец ключа видит активность, а сервис может ограничить или заблокировать злоупотребление.