Aggregate requests

Send two GET request to two urls and aggregates the responses into one response.

Last updated Apr 23, 2026 If you want to get started quickly, click on the button below.

Deploy to Cloudflare

This creates a repository in your GitHub account and deploys the application to Cloudflare Workers.

export default {
    async fetch(request) {
        // someHost is set up to return JSON responses
        const someHost = "https://jsonplaceholder.typicode.com";
        const url1 = someHost + "/todos/1";
        const url2 = someHost + "/todos/2";

        const responses = await Promise.all([fetch(url1), fetch(url2)]);
        const results = await Promise.all(responses.map((r) => r.json()));

        const options = {
            headers: { "content-type": "application/json;charset=UTF-8" },
        };
        return new Response(JSON.stringify(results), options);
    },
};
export default {
    async fetch(request) {
        // someHost is set up to return JSON responses
        const someHost = "https://jsonplaceholder.typicode.com";
        const url1 = someHost + "/todos/1";
        const url2 = someHost + "/todos/2";

        const responses = await Promise.all([fetch(url1), fetch(url2)]);
        const results = await Promise.all(responses.map((r) => r.json()));

        const options = {
            headers: { "content-type": "application/json;charset=UTF-8" },
        };
        return new Response(JSON.stringify(results), options);
    },
} satisfies ExportedHandler;
import { Hono } from "hono";

const app = new Hono();

app.get("*", async (c) => {
    // someHost is set up to return JSON responses
    const someHost = "https://jsonplaceholder.typicode.com";
    const url1 = someHost + "/todos/1";
    const url2 = someHost + "/todos/2";

    // Fetch both URLs concurrently
    const responses = await Promise.all([fetch(url1), fetch(url2)]);

    // Parse JSON responses concurrently
    const results = await Promise.all(responses.map((r) => r.json()));

    // Return aggregated results
    return c.json(results);
});

export default app;
from workers import Response, fetch, WorkerEntrypoint
import asyncio
import json

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        # some_host is set up to return JSON responses
        some_host = "https://jsonplaceholder.typicode.com"
        url1 = some_host + "/todos/1"
        url2 = some_host + "/todos/2"

        responses = await asyncio.gather(fetch(url1), fetch(url2))
        results = await asyncio.gather(*(r.json() for r in responses))

        headers = {"content-type": "application/json;charset=UTF-8"}
        return Response.json(results, headers=headers)

Was this helpful?

YesNo

On this page

Aggregate requests - 图2Docs

{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/workers/examples/aggregate-requests/#page","headline":"Aggregate requests","description":"Send two GET request to two urls and aggregates the responses into one response.","url":"https://developers.cloudflare.com/workers/examples/aggregate-requests/","inLanguage":"en","image":"https://developers.cloudflare.com/workers/examples/aggregate-requests/og.png?v=4310735eb0ce216b","dateModified":"2026-04-23","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"},"keywords":["JavaScript","TypeScript","Python"]}


description: Example of how to add, change, or delete headers sent in a request or returned in a response. title: Alter headers image: https://developers.cloudflare.com/workers/examples/alter-headers/og.png?v=d39783579ea7a60c


Skip to content

Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/workers/llms.txt
Use this file to discover all available pages before exploring further.