EUrouter only allows its own site via CORS, so the browser can't call it directly and requests go through the /api/eurouter/v1 proxy in serve.js. That means the user's API key, prompts and generated questions pass through the formulaid host. Nothing is stored there, but every request path is logged.
Checked 2026-09-25 with Origin: https://formulaid.example.org:
OPTIONS /api/v1/chat/completions → 204, but access-control-allow-origin: https://www.eurouter.ai
POST and GET /api/v1/models → same, with only https://www.eurouter.ai allowed
Options:
- Ask EUrouter to allow formulaid's production origin (or
* for /api/v1, as OpenRouter does). Then switch baseUrl to https://api.eurouter.ai/api/v1 and remove the proxy. Together with the OpenRouter change, serve.js could go entirely and the static build could be hosted on any static host.
- Keep the proxy and make it explicit: say in the provider selection / privacy text that EUrouter requests are relayed through the formulaid server without being stored, stop logging proxied paths, and don't forward cookies.
Option 1 is preferred; option 2 applies until EUrouter responds.
EUrouter only allows its own site via CORS, so the browser can't call it directly and requests go through the
/api/eurouter/v1proxy inserve.js. That means the user's API key, prompts and generated questions pass through the formulaid host. Nothing is stored there, but every request path is logged.Checked 2026-09-25 with
Origin: https://formulaid.example.org:OPTIONS /api/v1/chat/completions→204, butaccess-control-allow-origin: https://www.eurouter.aiPOSTandGET /api/v1/models→ same, with onlyhttps://www.eurouter.aiallowedOptions:
*for/api/v1, as OpenRouter does). Then switchbaseUrltohttps://api.eurouter.ai/api/v1and remove the proxy. Together with the OpenRouter change,serve.jscould go entirely and the static build could be hosted on any static host.Option 1 is preferred; option 2 applies until EUrouter responds.