Use the form above. Parameters, code examples and FAQ are grouped in the documentation section below.
"/v1/proxy?quest=URL"
GET /v1/proxy?quest=URL
/v1/proxy?quest=https://api.github.com/zen
/v1/proxy?quest=https://httpbin.org/image/png
Fetch a cross-origin URL from the browser by proxying the request server-side, with SSRF protection and a 5 MB cap.
| Endpoint | Returns | Example |
|---|---|---|
/v1/proxy | proxied body | quest=https://example.com |
| Name | Type | Default | Description |
|---|---|---|---|
quest | string | required | Full URL to fetch. A bare domain is upgraded to https automatically. |
curl 'https://freetools.one/v1/proxy?quest=https://example.com'// same request works from a browser despite CORS
const res = await fetch('https://freetools.one/v1/proxy?quest=https://example.com');
console.log(await res.text());import requests
body = requests.get('https://freetools.one/v1/proxy',
params={'quest': 'https://example.com'}).text
print(body[:200])HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<!-- the upstream body, unmodified -->
Send your request to /v1/proxy?quest=<encoded URL> instead of the target host. FreeTools fetches it server-side and returns the body with CORS enabled, so the browser accepts it.
Every request is checked against an SSRF guard that resolves the hostname and rejects loopback, link-local, private and cloud metadata ranges on every redirect hop.
Up to 5 MB. Anything larger is rejected with HTTP 413 rather than being buffered indefinitely.
Yes, up to 5 hops, and each destination is re-validated so a public URL cannot bounce to an internal address.