> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getmillwork.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Check a model feed

> Create a local sample, check its model-route metadata without a credential, and replace fixture identities before submission.

**Goal:** Check a feed, the model-route details you prepare for review, without
sending a request to Millwork or your model endpoint.

**You are done when:** the report says `validated`. This checks metadata only;
it does not submit the feed or enable customer access.

## Current tool access

Use Node.js 20 or newer and a package that includes the provider tools. Follow
[the SDK installation instructions](https://docs.getmillwork.dev/sdk/typescript.md#install) for the current
public package, or use the package supplied for your invited evaluation. Check
the installed commands before continuing:

```bash theme={null}
npx --no-install millwork offer --help
```

If `offer` is unknown, that installed version does not include provider tools.
Continue in the browser and ask [support](https://docs.getmillwork.dev/help/contact.md) which package to use
for your invitation. Every command on this page uses the already installed
package and will not download a different one.

No API key or API address is needed for these local steps. Online actions need
separately enabled [machine access](https://docs.getmillwork.dev/providers/machine-keys.md), or your browser
session in [Provider workspace](https://app.getmillwork.dev/provider).

## Create and check a sample

Run these commands in the directory where the provider package is installed:

```bash theme={null}
npx --no-install millwork supplier init --directory ./my-provider-feed
npx --no-install millwork offer check \
  --profile ./my-provider-feed/profile.json \
  --feed ./my-provider-feed/feed.json \
  --context ./my-provider-feed/context.json --json
```

The first command creates a new directory and refuses to overwrite one that
exists. The sample uses reserved example addresses and a fixture model identity.
Keep credentials out of all three files.

The check prints `"result": "validated"` and exits successfully when the metadata
conforms. A `nonconformant` report contains field pointers and exits with code
2\. Correct every finding and rerun the local check; a failed check must stop
any dependent submission.

## Check from JavaScript or TypeScript

Save this as `check-feed.mjs` beside the installed package, then run
`node check-feed.mjs`:

```javascript theme={null}
import { readFile } from "node:fs/promises";
import { checkProviderFeed } from "@millwork/solver/provider";

const read = async name => JSON.parse(
  await readFile(`./my-provider-feed/${name}.json`, "utf8")
);
const report = checkProviderFeed(await read("feed"), {
  ...await read("context"), profile: await read("profile")
});
console.log(report);
if (report.result !== "validated") process.exitCode = 2;
```

## Prepare your real draft

Replace the sample profile and route identity with your organization's actual
details and the complete current validation context issued by its workspace.
Keep all context fields, including any exact release or gateway facts. A
fixture context is suitable for local practice and cannot establish your
right to offer a model.

Check the edited draft again, then use **Submit model routes** in the browser.
Read the [route status and next action](https://docs.getmillwork.dev/providers/route-status.md) after
submission. A conflict or uncertain response needs a state read and comparison
before another submission.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.