Fetch JSON
Send a GET request and read in JSON from the response. Use to fetch external data.
export default {  async fetch(request, env, ctx) {    const url = "https://jsonplaceholder.typicode.com/todos/1";
    // gatherResponse returns both content-type & response body as a string    async function gatherResponse(response) {      const { headers } = response;      const contentType = headers.get("content-type") || "";      if (contentType.includes("application/json")) {        return { contentType, result: JSON.stringify(await response.json()) };      }      return { contentType, result: await response.text() };    }
    const response = await fetch(url);    const { contentType, result } = await gatherResponse(response);
    const options = { headers: { "content-type": contentType } };    return new Response(result, options);  },};interface Env {}export default {  async fetch(request, env, ctx): Promise<Response> {    const url = "https://jsonplaceholder.typicode.com/todos/1";
    // gatherResponse returns both content-type & response body as a string    async function gatherResponse(response) {      const { headers } = response;      const contentType = headers.get("content-type") || "";      if (contentType.includes("application/json")) {        return { contentType, result: JSON.stringify(await response.json()) };      }      return { contentType, result: await response.text() };    }
    const response = await fetch(url);    const { contentType, result } = await gatherResponse(response);
    const options = { headers: { "content-type": contentType } };    return new Response(result, options);  },} satisfies ExportedHandler<Env>;from workers import Response, fetchimport json
async def on_fetch(request):    url = "https://jsonplaceholder.typicode.com/todos/1"
    # gather_response returns both content-type & response body as a string    async def gather_response(response):        headers = response.headers        content_type = headers["content-type"] or ""
        if "application/json" in content_type:            return (content_type, json.dumps(await response.json()))        return (content_type, await response.text())
    response = await fetch(url)    content_type, result = await gather_response(response)
    headers = {"content-type": content_type}    return Response(result, headers=headers)Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark