API v2: персональные серверы и лимиты
GET https://openspeedtest.ru/api/v2/servers
Возвращает персональный список тестовых серверов для ключа, а также итоговые лимиты аккаунта и текущее использование квоты.
Аутентификация
| Заголовок | Обязательный | Описание |
|---|---|---|
X-API-KEY | да | Активный API-ключ |
Только метод GET; другие методы → 405.
Пример
bashcurl -H "X-API-KEY: ВАШ_КЛЮЧ" "https://openspeedtest.ru/api/v2/servers"
Ответ (200)
json{
"success": true,
"servers": [
{
"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",
"city": "Москва",
"region": "Москва",
"country": "Россия",
"country_code": "RU",
"latitude": 55.7558,
"longitude": 37.6173,
"bandwidth_mbps": 10000
}
],
"limits": {
"api_requests_per_hour": 5,
"api_requests_per_day": 50,
"max_servers": 3,
"max_api_keys": 3
},
"usage": { "hour": 2, "day": 7 }
}
Описание полей
servers— только контрактные поля. Геополя (city,region,country,country_code,latitude,longitude,bandwidth_mbps) могут бытьnull. Внутренние технические поля в ответ не включаются.limits— итоговые лимиты аккаунта (персональные настройки → тариф → без ограничений). Для ключа без привязки к аккаунту —null.usage— текущее использование за час и сутки. Для ключа без привязки к аккаунту —null.
Рекомендации по использованию
Перед массовой отправкой результатов сверяйте usage с limits, чтобы не упираться в 429. Привязка ключа к аккаунту делает usage и limits доступными и включает единый учёт квоты.
Ошибки
| Код | Условие | Тело |
|---|---|---|
| 401 | Нет X-API-KEY | {"success":false,"error":"API Key is missing."} |
| 403 | Ключ не найден или неактивен | {"success":false,"error":"Invalid or inactive API Key."} |
| 405 | Метод не GET | {"success":false,"error":"Method Not Allowed"} |
| 429 | Превышена квота (не для ключей виджета) | см. «Квоты и лимиты» |
| 500 | Внутренняя ошибка | {"success":false,"error":"An internal server error occurred."} |
Техническая деталь
Эндпоинт не добавляет CORS-заголовков (рассчитан на запросы с того же источника). Значения limits вычисляются по цепочке «индивидуальные настройки аккаунта → активный тариф → без ограничений»; отсутствие лимита означает отсутствие ограничения. Запрос учитывается в счётчиках использования.