API para agentes y LLMs
No es una API aparte: es exactamente la superficie que llama el navegador cuando corres el test de velocidad en este sitio, documentada para que un script, un agente o una herramienta de LLM también pueda llamarla. Sin clave, sin registro, sin CORS.
Aquí no hay una “API pública” aparte: son los mismos cuatro endpoints que llama el navegador de este sitio para correr un test de velocidad, sin clave de API, sin cuenta, y, mira abajo, sin encabezado CORS.
Endpoints
/api/speed/pingSin límiteUna prueba mínima de ida y vuelta.
El campo t de la respuesta es solo de diagnóstico. Los Workers congelan Date.now() entre operaciones de E/S, así que no es un reloj confiable para medir latencia, mide la petición tú mismo.
/api/speed/metaSin límiteRefleja lo que Cloudflare ve de quien llama: IP, ISP, ASN, ciudad, país, y el borde (colo) que respondió.
Nada de esto se guarda. Se devuelve a quien llama y a nadie más.
/api/speed/down120 peticiones / 60 s / IPTransmite bytes (parámetro de consulta, 1 MB por defecto, tope de 100 MB) de datos aleatorios, para medir la velocidad de descarga.
La respuesta es no-store, no-transform, nada la comprime ni la guarda en caché, cualquiera de las dos cosas inflaría la velocidad medida.
/api/speed/up120 peticiones / 60 s / IPAcepta un cuerpo de petición de hasta 100 MB e informa cuántos bytes llegaron y cuánto tardó, para medir la velocidad de subida.
Un Content-Length declarado por encima de 100 MB se rechaza con 413 antes de leer el cuerpo.
El límite de uso, en números
/api/speed/down y /api/speed/up comparten un límite de 120 peticiones por IP en cada ventana de 60 segundos, que se reinicia sola. En una línea de gigabit, un test de velocidad normal hace unas 40 de esas peticiones (cuatro flujos de descarga y cuatro de subida, y cada uno vuelve a pedir hasta que termina su fase; las líneas más lentas hacen menos), así que eso es más o menos 3 tests completos por ventana. Si te pasas del límite recibes 429 con un encabezado Retry-After. El conteo se lleva por ubicación de Cloudflare, así que tómalo como aproximado. /api/speed/ping y /api/speed/meta no tienen límite: sus respuestas son triviales, y limitarlas agregaría una verificación justo al camino que existen para medir.
La petición más grande que cualquiera de los dos endpoints sirve o acepta es 100 MB.
Sin CORS: a propósito
Estos endpoints no envían encabezado Access-Control-Allow-Origin, y ninguno pasa por la verificación de mismo origen que este sitio usa en sus rutas de cuenta y facturación. Esa combinación es deliberada: quien llama desde un servidor, curl, un agente, una herramienta de LLM, ya funciona hoy, mientras que un navegador ejecutando JavaScript de otro origen contra estos endpoints ya está bloqueado por el propio navegador. Agregar CORS con * dejaría que cualquier sitio web gastara el ancho de banda de este sitio desde los navegadores de sus propios visitantes; documentar la forma actual no cuesta nada y no cambia nada.
Un ejemplo: curl
Descarga 5 MB y mide el tiempo, la forma estándar de una prueba manual de velocidad.
curl -o /dev/null -w "%{time_total}s for %{size_download} bytes\n" \
"https://mysygnal.net/api/speed/down?bytes=5000000"Un ejemplo: un agente o una herramienta de LLM
La misma medición, cronometrada por quien llama en vez de confiar en la respuesta, mira la nota sobre /api/speed/ping arriba.
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;Todo lo demás que este sitio le ofrece a quien llama por código
llms.txt indexa las herramientas, las guías y cada página de router de este sitio en un solo archivo de texto plano, pensado para que lo lea un modelo y no un navegador.