Reference guide · cloudflare · Published 2026-08-16 · 3 min read

Workers fetch subrequests and their limits

Cloudflare Workers subrequest limits: what counts as a subrequest, Free 50, Paid 10,000, raising it in wrangler, and how redirect chains add to the total.

What counts as a subrequest

In a Cloudflare Worker, the incoming request that the worker handles is a single request. Any further call the worker code makes counts as a subrequest. The most common one is fetch() to another URL, but subrequests also include calls to Cloudflare services such as R2, KV and D1, and any subrequest that a Durable Object or Workflow triggers. Every one of these consumes space in the per-invocation subrequest budget.

The name is a trap for two reasons. First, a redirect chain inflates the count even though it is one fetch() call in your code: each hop in the chain is its own subrequest, so a URL that 301s twice counts as three subrequests. Second, a subrequest made in a Durable Object still counts against the budget of that object's invocation. The practical effect: long workers that fan out to many origins, or workers that call other Cloudflare services repeatedly, are the ones that hit the wall, not the simple single-fetch worker.

The Free plan default

On the Workers Free plan the default is 50 subrequests per invocation, split into two buckets:

These are separate pools, so a worker doing 40 external fetches and 500 KV reads is within budget. But a worker that loops fetch() over 60 external URLs hits the 50 external cap and the invocation fails.

Free plan does not allow a raise

The Free plan caps do not have a configuring escape hatch: you cannot raise the 50 free external subrequests with a wrangler setting. The way past the Free limit is either to restructure the worker (bundle parallel fetches into one origin call, cache repeated lookups in KV, or move the fan-out to a queue or scheduled handler) or to move the worker to a Paid plan.

On a Paid plan the default is 10,000 subrequests per invocation, covering both external and Cloudflare-service subrequests. That default was raised on 2026-02-11, when the historical 1,000 ceiling for paid workers became a default that can be increased. You can lower or raise it per worker in the Wrangler configuration:

{
  "limits": {
    "subrequests": 50000
  }
}

The maximum you can set is 10 million. The configuration names the budget bound; anything the worker does beyond it makes the invocation error rather than run uncontrolled. To protect against runaway code or unexpected costs you can set a lower figure, which also makes the cap the ceiling rather than relying on the default.

Practical guidance

The subrequest budget is one of the few limits a worker encounters at runtime rather than at deploy time, so knowing which plan you are on and what your fan-out really costs prevents a wall that only appears under load.

Need a website built, fixed, optimised, migrated or replaced?

This technical resource is written by CSMBAC, a small design and development studio. If you would rather hand the problem to a professional, the website service page explains how we build enquiry-ready websites.

Explore website services