API para agentes e LLMs
Não é uma API separada: é exatamente a superfície que o navegador chama quando você roda o teste de velocidade neste site, documentada para que um script, um agente ou uma ferramenta de LLM também possa chamá-la. Sem chave, sem cadastro, sem CORS.
Não existe uma “API pública” separada aqui: são os mesmos quatro endpoints que o navegador deste site chama para rodar um teste de velocidade, sem chave de API, sem conta, e, veja abaixo, sem cabeçalho CORS.
Endpoints
/api/speed/pingSem limiteUma sondagem mínima de ida e volta.
O campo t da resposta é só para diagnóstico. Os Workers congelam Date.now() entre operações de E/S, então não é um relógio confiável para medir latência, meça a requisição você mesmo.
/api/speed/metaSem limiteReflete o que a Cloudflare vê de quem chama: IP, ISP, ASN, cidade, país, e a borda (colo) que respondeu.
Nada disso é armazenado. É devolvido só para quem chama.
/api/speed/down120 requisições / 60 s / IPTransmite bytes (parâmetro de consulta, 1 MB por padrão, limite de 100 MB) de dados aleatórios, para medir a velocidade de download.
A resposta é no-store, no-transform, nada a comprime nem a coloca em cache, e qualquer uma das duas coisas inflaria a velocidade medida.
/api/speed/up120 requisições / 60 s / IPAceita um corpo de requisição de até 100 MB e informa quantos bytes chegaram e quanto tempo levou, para medir a velocidade de upload.
Um Content-Length declarado acima de 100 MB é rejeitado com 413 antes de ler o corpo.
O limite de uso, em números
/api/speed/down e /api/speed/up compartilham um limite de 120 requisições por IP a cada janela de 60 segundos, que se reinicia sozinha. Em uma linha gigabit, um teste de velocidade padrão faz cerca de 40 dessas requisições (quatro fluxos de download e quatro de upload, cada um refazendo requisições até o fim da sua fase; linhas mais lentas fazem menos), então isso dá mais ou menos 3 testes completos por janela. Acima do limite, a resposta é 429 com um cabeçalho Retry-After. A contagem é feita por local da Cloudflare, então considere-a aproximada. /api/speed/ping e /api/speed/meta não têm limite: suas respostas são triviais, e limitá-las adicionaria uma verificação bem no caminho que elas existem para medir.
A maior requisição que qualquer um dos dois endpoints serve ou aceita é 100 MB.
Sem CORS: de propósito
Esses endpoints não enviam cabeçalho Access-Control-Allow-Origin, e nenhum deles passa pela verificação de mesma origem que este site usa nas rotas de conta e cobrança. Essa combinação é deliberada: quem chama do lado do servidor, curl, um agente, uma ferramenta de LLM, já funciona hoje, enquanto um navegador rodando JavaScript de origem cruzada contra esses endpoints já é bloqueado pelo próprio navegador. Adicionar CORS com * deixaria qualquer site gastar a largura de banda deste site a partir dos navegadores dos próprios visitantes; documentar a forma atual não custa nada e não muda nada.
Um exemplo: curl
Baixe 5 MB e cronometre, a forma padrão de um teste manual de velocidade.
curl -o /dev/null -w "%{time_total}s for %{size_download} bytes\n" \
"https://mysygnal.net/api/speed/down?bytes=5000000"Um exemplo: um agente ou ferramenta de LLM
A mesma medição, cronometrada por quem chama em vez de confiar na resposta, veja a nota sobre /api/speed/ping acima.
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;Tudo mais que este site oferece a quem chama por código
llms.txt indexa as ferramentas, os guias e cada página de roteador deste site em um único arquivo de texto simples, feito para ser lido por um modelo e não por um navegador.