> For the complete documentation index, see [llms.txt](https://docs.workersforlabview.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.workersforlabview.io/workers-tools/workers-tools-menu/public-api-builder.md).

# Public API Builder

The Public API Builder tool allows you to create *strictly typed* Public APIs for your Workers, allowing you to communicate with a Worker from an external source, such as a Worker's Caller, another LabVIEW application or from TestStand.

You can use the Public API builder tool to:

* Create and edit [Public API Requests](/workers-tools/workers-tools-menu/public-api-builder/public-requests.md)
* Create and edit [Public API Requests with Reply](/workers-tools/workers-tools-menu/public-api-builder/public-requests-w-reply.md)
* Create and edit [Public API Responses](/workers-tools/workers-tools-menu/public-api-builder/public-responses.md)
* [Override Public API MHL cases ](/workers-tools/workers-tools-menu/public-api-builder/override-mhl-cases.md)from a Worker base class into a Worker
* [Create Dynamically Load Worker VIs](#create-dynamically-load-worker-vi)

<figure><img src="/files/jGP10zobRfyvLCLquQxb" alt=""><figcaption><p>Workers Public API Builder tool</p></figcaption></figure>

## Create Dynamically Load Worker VI

Allows you to create a strictly typed Dynamically Load Worker VI that you can use to load an instance of a Worker at run-time from within another Worker's MHL.

Every Dynamically Load Worker VI filename takes the prefix: **dlw\_** (**d**ynamically **l**oad **w**orker), followed by the name of the Worker that owns the VI. An example of a Dynamically Load Worker Public API VI is shown below.

<figure><img src="/files/sKKOnxpYvgtty7Pfi10A" alt=""><figcaption><p>dlw_Worker D.vi</p></figcaption></figure>

A Dynamically Load Worker VI will dynamically load the Worker that owns the VI as a subWorker into the Worker that the VI is called from, and returns the loaded Worker's object containing the Worker's Public Properties. Initialization data that is to be received by the Dynamically Loaded Worker's \<Initialize> MHL case can be wired to the **Initialization Data** input. The Dynamically Loaded Worker requires an alias ( **Worker Alias** ) which must be unique to the Worker it is called from. If a Worker is already loaded with the same Alias, an error will be returned.

{% hint style="danger" %}
**Important**

This VI can only be called from within another Worker. To load a Worker from an external LabVIEW application or from TestStand, please use an [Asynchronous Launcher VI](/fundamental-concepts/launcher-vis.md#asynchronous-launcher-vis).
{% endhint %}

{% hint style="info" %}
**Good to know**

An example of how to use a Dynamically Load Worker VI can be found in the [Workers Fundamentals](/getting-started/example-projects.md) example project.
{% endhint %}
