Skip to main content
Goal: Submit one public test task using a model available to your organization. You are done when: the run completes, the result contains model output, and the receipt names the model and provider that answered. At the end, you will have three records:
  • a run showing final status;
  • a result containing model output; and
  • a receipt showing what ran.
Millwork is not a drop-in chat endpoint. You send a task and limits. Millwork selects from the registered models that match them.

Before you begin

  • Your Millwork organization is approved.
  • You created an organization API key in the dashboard.
  • You have curl and jq.
  • Your account has enough credit and quota for a live run.
Not ready for a provider call? Complete the first API call first.
Use only public information or test data created for this run. Read Data and credentials before sending a live task.
Never paste a provider key into a model registration, run request, support message, or documentation playground. Provider credentials use a separate secure connection flow.

1. Choose an available model

Expected result: models contains the models your organization can use now. Choose the number shown at the start of one row:
If the catalog is empty, connect a provider or email support to ask whether a model provided by Millwork is available.

2. Add the model to Millwork

Add the selected catalog model to your organization before running it. The /arms endpoint performs this step; arm is the API field name for the saved model. Send the selected model’s registration template without changing it.
Expected result: the response contains an arm_id and a ready registered model. If it does not, read status_reason and choose another catalog row. Registering a model makes it available to routing. It does not force Millwork to choose it when other registered models also match the task. The receipt confirms what answered.

3. Submit a live task

If you do not provide verifier_id, Millwork uses its built-in basic output check. A live run also needs available credit and quota. If the API returns insufficient_credit, add credit in Usage & spend before retrying.
max_cost_usd can stop Millwork from starting another provider call after recorded spend reaches the limit. It cannot cancel a call already in progress or reverse its cost.

4. Wait for a final status

Final statuses are completed, failed, cancelled, and expired.

5. Read the result and receipt

Fetch the result only when the status is completed:
If the run failed, read the events before retrying:

Check your work

  • the registered model is ready;
  • the run reaches completed;
  • the result contains model output and may include an expiry time; and
  • the receipt records provider, route, attempts, usage, and checks without the prompt or output.
Compare the requested and provider-reported model:

What this confirmed

Your application submitted one task format without a provider credential. Millwork selected an eligible registered model. The result contains the useful output. The receipt records the model, provider, attempts, usage, and checks without copying the task or output.

Next steps

Connect a provider

Use an account your organization owns.

Retry safely

Recover from a network failure without creating duplicate work.

Read the run record

Store the output and receipt separately.

Review data limits

Confirm what the private preview may process.

Common fixes

For retry rules and common errors, read Errors and retries.