ES

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

GET/api/speed/pingSin límite

Una 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.

GET/api/speed/metaSin límite

Refleja 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.

GET/api/speed/down600 tokens / hora / IP

Transmite 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.

POST/api/speed/up600 tokens / hora / IP

Acepta 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 cupo de 600 tokens por IP, que se recarga a razón de un token cada 6 segundos. Eso es más o menos 10 tests de velocidad completos por hora — un test completo usa bastante menos de 60 peticiones. /api/speed/ping y /api/speed/meta no tienen límite: sus respuestas son triviales, y limitarlas agregaría una lectura de KV 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.