---
title: Create a dynamic dispatch Worker · Cloudflare for Platforms docs
description: After you have created a dispatch namespace, you can fetch any user Workers in the namespace using a dynamic dispatch Worker. The dynamic dispatch Worker has a namespace binding.
lastUpdated: 2024-09-11T13:38:54.000Z
source_url:
  html: https://a74404c8.preview.developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/get-started/dynamic-dispatch/index.md
  md: https://a74404c8.preview.developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/get-started/dynamic-dispatch/
---

After you have created a dispatch namespace, you can fetch any user Workers in the namespace using a dynamic dispatch Worker. The dynamic dispatch Worker has a namespace binding.

Use any method of routing to a namespaced Worker (reading the subdomain, request header, or lookup in a database). Ultimately you need the name of the user Worker.

In the following example, routing to a user Worker is done through reading the subdomain `<USER_WORKER_NAME>.example.com/*`. For example, `my-customer.example.com` will run the script uploaded to `PUT accounts/<ACCOUNT_ID>/workers/dispatch/namespaces/my-dispatch-namespace/scripts/my-customer`.

```js
export default {
  async fetch(request, env) {
    try {
      // parse the URL, read the subdomain
      let workerName = new URL(request.url).host.split('.')[0];
      let userWorker = env.dispatcher.get(workerName);
      return await userWorker.fetch(request);
    } catch (e) {
      if (e.message.startsWith('Worker not found')) {
        // we tried to get a worker that doesn't exist in our dispatch namespace
        return new Response('', { status: 404 });
      }


      // this could be any other exception from `fetch()` *or* an exception
      // thrown by the called worker (e.g. if the dispatched worker has
      // `throw MyException()`, you could check for that here).
      return new Response(e.message, { status: 500 });
    }
  },
};
```
