execution):
- Model: the model you asked for.
- Provider: the company, cloud, or gateway that served it.
- Connection: the saved link to the provider account used for the request. The recorded billing owner shows who bills the model usage.
billed_by is customer when your provider account was used and millwork when
Millwork provided the model.
Requested and provider-reported models
You ask for a model by its catalog name. A cloud or gateway may answer with a dated version of it. Millwork keeps both names in the result and the receipt. The requested value is the model Millwork asked for. The provider-reported value is the model the provider or gateway says it ran; the API field isresolved. A dated or more specific name does not by itself mean Millwork fell back to
another model.
This diagram shows how one requested name becomes two names in your records.
When your administrator saved a model directly with a provider model ID, rather
than from your catalog, a run on it records the saved model and its usage but no
provider-reported model: the run’s model_provenance is null. The receipt
identifies the saved model and records its usage. Ask the administrator who
saved it which provider account pays for that usage; the receipt does not
identify that account.
OpenRouter is a gateway. It forwards your request to one of several providers,
so the provider and model it reports can be more specific than the route you
asked for.
Which models can your organization run now
UseGET /v1/model-catalog for the models your organization can save. Use
GET /v1/model-source-profiles for the providers your organization can
connect. A provider named in these docs is not an availability promise.
The current list of interfaces and their status is in
What you can use today.
What models can do today
Today a run takes text in and returns text out. Do not assume support for streaming, tools, images, audio, embeddings, fine-tuning, or provider-specific request options unless the catalog and API reference add them. Do not choose a model from a static list. Your organization’s catalog is the current answer.From provider route to customer use
A model provider is the organization supplying an inference API. Its Provider application is separate from a customer connecting a provider account to access and pay for that API. A provider model route identifies the exact model release and endpoint submitted for review. A saved model is the option a customer adds from its catalog; the API calls it anarm.
The handoff has several decisions. Finishing one does not finish the next.
Follow one available OpenRouter model
This example follows the customer side of an existing gateway integration. It does not establish that a new Provider application has reached customer use. Use an OpenRouter route actually returned to your organization; if it is absent, resolve access before continuing. If you need to connect OpenRouter first, CLI setup is a complete alternative: follow it through its saved model, approved paid run, answer and receipt. That finishes your first-run journey; do not return to the API steps below to save and run the same task again.- Use an existing tested connection. Read your organization’s saved
connections with
GET /v1/source-connections, or usemillwork provider list --json. These reads do not save a model or start a run. Choose the intended OpenRouter account: its connection should beactive, itstest_stateshould bepassed, andtested_binding_revisionshould matchbinding_revision. Keep itsconnection_idasCONNECTION_IDin the terminal. Your provider bills model usage. A model Millwork provides is a separate access choice and does not require you to connect your own provider account. - Find the exact route. In the customer dashboard, open Arms > Model
catalog. Compare the model release, provider, access, region and data rules.
Through the API,
GET /v1/model-catalog?source_id=openrouter&access_lane=byokreads models reached through your own OpenRouter account. The API valuebyokmeans your provider account is used. Keep the intended row’smodel_deployment_idand connection ID. Do not save the model yet. - Continue to the run guide before saving. Open
Run a model and complete Before you begin.
Keep the same
CONNECTION_ID. At Choose a model from your catalog, match.deployment.model_deployment_idand.connection.connection_idincatalog.jsonto the values you retained. SetMODEL_INDEXto that row’s number; use0only if row0is the match. If the row is missing, resolve access before continuing. - Save once and submit one approved task. Continue from Save the model
to your organization in that guide. It saves the returned template and
pins the task with
routing.required_arm_id, then shows status, result and receipt requests. Do not substitute a model name from the provider’s general list. Review current charges and any required price approval before submission. An assistant needs your approval for a paid run. - Read both records. After
completed, fetchGET /v1/executions/{id}/resultfor the answer andGET /v1/receipts/{id}for the selected model, route, usage and evaluation evidence. Compare the selected arm with the one you chose. Provider-reported model details may be absent; do not fill them in from the requested name.
Use the same route from your application or agent
These are alternative interfaces for the same catalog and save steps. If you already saved the model through one interface, keep itsarm_id for the run;
do not register it again through another.
Use the linked interface page for its current version and setup. The
documentation MCP helps an agent read these instructions;
it does not connect a provider or start a run.
Continue after an event
Your app can submit a task manually or in response to an event or schedule it already manages. That does not create a native Millwork scheduler. Existing customer webhooks includeexecution.completed, execution.failed, and
execution.needs_review. A webhook can notify your application to inspect the
current status and records before its next step. The receipt is evidence of the
run, not an executor for that next step.
Check the output
If you do not name an output check, the basic check confirms only that output is present. To judge your product’s requirements, connect a customer output check and read its recorded verdict. A failed check or missing verdict must not be treated as verified work.When the handoff stops
If you are supplying the API, start with Provider onboarding.
If you are ready to use a catalog model, continue with Run a model.