Skip to main content
Goal: Send one test run with curl and read its receipt. A test run (the API calls it Echo, mode: "echo") checks your API key, the submit request, the status read, and the receipt read. It does not call a model, so it has no platform fee and no model cost. A live run has a platform fee when Millwork accepts it, plus model usage. Read Model access and billing before your first live run. You are done when: the run’s status is completed, the receipt’s mode is echo, and selected_arm is null. A receipt is the record of a run without its prompt or output. This diagram shows the three requests your app sends and what Millwork returns for each.

Before you begin

  • Your organization is approved for the private preview.
  • Your organization API key is configured in this terminal.
  • You have curl and jq.
  • Your organization has room in its run quota. Test runs are free, but count toward the monthly run quota and have a daily limit.
1

Submit the test run

Choose one request key and keep it for this run:
The Idempotency-Key header carries this request key. If the response is lost, repeat only the request below with the same key and body.
Millwork answers 202 with the new run. The API calls a run an execution. A test run finishes inside the submit request, so its status is already completed. The response, shortened:
Save execution_id. The last command stores it in EXECUTION_ID; the next two steps send it.
2

Read the status

Expected result: "completed". For any other value, read the error code before you retry.
3

Read the receipt

Print the fields that show this was a test run:
Expected result: the last command prints Test run check passed.The receipt does not contain the prompt or any model output, and a test run has no result to fetch.

If a step fails

  • The submit request returns an error: read the error code in type and fix what it names before you retry. A rejected API key returns 401.
  • quota_exceeded: check Usage. Wait for the stated reset or for a running task to finish before trying again.
  • The status is not completed: read the run’s events and its receipt to see what stopped it.
Errors and retries lists each error code and the next step.

Run a model

Send a live task, get model output, and confirm which model and provider answered.