API для агентов и LLM
Это не отдельный API: это именно та поверхность, которую вызывает браузер, когда вы запускаете тест скорости на этом сайте, задокументированная так, чтобы скрипт, агент или инструмент LLM тоже мог её вызвать. Без ключа, без регистрации, без CORS.
Отдельного «публичного API» здесь нет: это те же четыре эндпоинта, которые вызывает браузер этого сайта при запуске теста скорости, без API-ключа, без аккаунта и — см. ниже — без заголовка CORS.
Эндпоинты
/api/speed/pingБез лимитаМинимальный зонд «туда-обратно».
Поле t в ответе носит только диагностический характер. Workers замораживают Date.now() между операциями ввода-вывода, поэтому это ненадёжные часы для измерения задержки — измеряйте запрос самостоятельно.
/api/speed/metaБез лимитаПоказывает, что Cloudflare знает о вызывающей стороне: IP, провайдера, ASN, город, страну и edge-узел (colo), который ответил.
Ничего из этого не сохраняется. Данные возвращаются только вызывающей стороне и больше никому.
/api/speed/down600 токенов / час / IPПередаёт bytes (параметр запроса, по умолчанию 1 МБ, максимум 100 МБ) случайных данных для измерения скорости скачивания.
Ответ помечен no-store, no-transform — ничто его не сжимает и не кэширует, а любое из этого завысило бы измеренную скорость.
/api/speed/up600 токенов / час / IPПринимает тело запроса до 100 МБ и сообщает, сколько байт пришло и сколько это заняло времени, для измерения скорости загрузки.
Заявленный Content-Length больше 100 МБ отклоняется с кодом 413 ещё до чтения тела.
Лимит использования — в цифрах
/api/speed/down и /api/speed/up делят один бюджет из 600 токенов на IP, пополняемый на один токен каждые 6 секунд. Это примерно 10 полных тестов скорости в час — полный тест использует значительно меньше 60 запросов. /api/speed/ping и /api/speed/meta без лимита: их нагрузка тривиальна, а лимитирование добавило бы обращение к KV именно на том пути, который они и призваны измерять.
Самый большой запрос, который отдаёт или принимает любой из этих эндпоинтов — 100 МБ.
Без CORS — намеренно
Эти эндпоинты не отправляют заголовок Access-Control-Allow-Origin, и ни один из них не проходит проверку того же источника, которую этот сайт использует на маршрутах аккаунта и оплаты. Это сочетание намеренное: серверный вызывающий — curl, агент, инструмент LLM — уже работает сегодня, а браузер, выполняющий кросс-доменный JavaScript против этих эндпоинтов, уже блокируется самим браузером. Добавление CORS с * позволило бы любому сайту расходовать пропускную способность этого сайта через браузеры своих же посетителей; документировать текущее положение дел ничего не стоит и ничего не меняет.
Разобранный пример — curl
Скачайте 5 МБ и засеките время — стандартная форма ручной проверки пропускной способности.
curl -o /dev/null -w "%{time_total}s for %{size_download} bytes\n" \
"https://mysygnal.net/api/speed/down?bytes=5000000"Разобранный пример — агент или инструмент LLM
То же измерение, засечённое самим вызывающим, а не взятое на веру из ответа — см. примечание про /api/speed/ping выше.
const t0 = performance.now();
const res = await fetch("https://mysygnal.net/api/speed/down?bytes=5000000");
await res.arrayBuffer();
const seconds = (performance.now() - t0) / 1000;
const mbps = (5_000_000 * 8) / seconds / 1_000_000;Всё остальное, что этот сайт предлагает вызывающей стороне
llms.txt индексирует инструменты, руководства и каждую страницу роутера на этом сайте в одном текстовом файле, предназначенном для чтения моделью, а не браузером.