After registering your provider and bid (and a new model only if you had to mint one), you want to know before any consumer hits you that everything works. There is no built-in setup wizard yet. This page walks the same five checks the support team uses to verify a provider when someone posts in Discord asking “can you check if my setup is OK?”. If you used MyProvider, confirm Model Configuration Sync already wrote the on-chain modelId into models-config.json / MODELS_CONFIG_CONTENT before Step 1.

Step 1 — Local health

Your proxy-router is up and listening:
Expected:
On provider nodes the response also includes a models array — the periodic model health self-report covering your whole ecosystem of configured models and active bids. For every model in models-config.json that has an active bid from your wallet, the proxy-router sends a small test prompt on a schedule (default hourly, see MODEL_HEALTH_CHECK_INTERVAL in env-proxy-router) and caches the result. Probes are paced a few seconds apart (MODEL_HEALTH_CHECK_PROBE_DELAY, default 2s) so a provider with many models doesn’t burst its own backend into a rate limit. Active bids whose model is missing from models-config.json are also listed, so a bid you’re selling but cannot serve doesn’t go unnoticed:
modelName is the model’s public name as registered on-chain (not the private backend model string from models-config.json, which is never exposed). status is one of:
StatusMeaningAction
healthyProbe succeeded (LLM answer graded via promptCorrect)
unhealthyProbe failed — see errorKind and httpStatus belowFix the backend; consumers opening a session hit the same failure
no_bidConfigured model has no active bid; not probedPost a bid if you want to sell it
no_model_configuredActive bid exists but the model is missing from models-config.jsonAdd the model entry or delete the bid — consumers can open sessions against this bid and get errors
skippedModel type other than LLM/embedding; not probed
The self-report has its own operational reference — schedule, tuning, backend impact, and diagnosis recipes — at Model health self-report. For unhealthy models, errorKind narrows the failure and, when the backend answered with an HTTP error, httpStatus carries the exact upstream status code:
errorKindMeaningTypical httpStatus
timeoutProbe hit the per-model timeout
connectionCould not reach the backend apiUrl at all
rate_limitedBackend is up and configured, but throttled the probe429
bad_responseBackend answered with an error or empty completion402 (billing), 400/404 (bad model config), 5xx
Logs should show:
If anything here is wrong, stop and fix it before the next steps — see troubleshooting.

Step 2 — Public TCP reachable

Consumers connect to your :3333 over the public internet. From a machine outside your network:
Expected: Connection succeeded. If it times out, your firewall / security group / NAT is blocking; consumers will see your bid but never get inference.

Step 3 — On-chain provider record

Confirm the marketplace recognises your registration:
You should see your Address, Endpoint (the host:port you registered, no protocol), Stake, and IsDeleted: false. Same trick for your model:
And your bid:
If any of these doesn’t return your record, the on-chain transaction either failed or is still pending. Check the explorer with your provider wallet address (base.blockscout.com).

Step 4 — Network discovery

Two cron-driven dashboards aggregate the marketplace into JSON snapshots. Your provider only shows up here if the cron has reached you successfully after your registration:
If your bid is on chain (Step 3) but not in active_bids.json, it means the verifier could reach the chain but could not reach your :3333. Re-check Step 2. The dashboards refresh on a schedule (a few minutes); give it time before concluding it failed.

Step 5 — End-to-end prompt via the Inference API

The hosted Morpheus Inference API serves as the easiest end-to-end consumer. If a real prompt against your model name returns text, you’ve proven the full chain (consumer → API Gateway → discovery → your P-Node → your backend → response).
  1. Sign in at app.mor.org, grab an API key.
  2. In the dashboard’s API Test page (or any OpenAI-compatible client) pick your model name from the dropdown.
  3. Send any short prompt.
If it streams back a response — you’re done. If the model isn’t in the dropdown, go back to Step 4. If it’s there but errors out, check your proxy-router logs for the incoming request and your backend’s logs for the forwarded request. You can also do this directly from a separate consumer-side proxy-router; see API direct.

When in doubt

The Discord #tech-support channel is the fastest path. Include:
  • Your provider wallet address (lowercase 0x…).
  • Your model ID and bid ID.
  • The output of Steps 1, 3, and 4.
The first thing support does is exactly the above checks; arriving with the answers shortcuts the conversation.

Common gotchas surfaced by the chat history

SymptomCauseFix
Provider on chain but missing from active_bids.jsonPublic :3333 not reachableOpen firewall / security group; verify with nc -vz from outside
:3333 reachable, model still missing from active_models.jsonThe verifier couldn’t ping the model’s apiUrlConfirm models-config.json apiUrl is reachable from inside the proxy-router host
Healthcheck fails with connection refused to BASEDefault round-robin RPC rate-limited / unavailableSet your own ETH_NODE_ADDRESS (Alchemy / Infura) — see env-proxy-router
Lost ~MOR during setupEach postModelBid charges a non-refundable marketplaceBidFee (0.3 MOR); reposting bids during configuration adds upSee Pricing and the “What can cost you MOR during setup” section in Quickstart