SiloRail

An OpenAI-compatible LLM gateway for paying per call in USDC on Monad. A funded wallet is the account.

This is an experimental testnet deployment; only free OpenRouter models are available, and testnet USDC has no monetary value.

Calls settle in testnet USDC. Testnet funds have no monetary value. The amount includes model cost, on-chain settlement gas, and margin. Every call has a public receipt.

You sign the authorization. The facilitator pays gas, so the wallet does not need MON.

For agents: /llms.txt describes the payment flow and API endpoints. /openapi.json provides the OpenAPI document. /status reports service availability.

For people: make a first call

Any EVM wallet works. The wallet is the credential: keep its private key local. To create a disposable key:

node -e 'const{generatePrivateKey,privateKeyToAccount}=require("viem/accounts");
const pk=generatePrivateKey();
console.log(privateKeyToAccount(pk).address); console.log(pk)'

Fund it with USDC

Send USDC to your wallet on Monad testnet. The wallet never needs MON. Before funding, check this deployment's network and USDC contract.

Make a call

Start a local OpenAI-compatible proxy with the SDK:

npx -y @silorail/sdk proxy --gateway https://silorail-testnet.fly.dev

To use the local OpenAI-compatible proxy:

# then: OPENAI_BASE_URL=http://127.0.0.1:8403/v1  OPENAI_API_KEY=unused

For the raw x402 flow, request a quote, sign it, then retry:

curl -s https://silorail-testnet.fly.dev/v1/chat/completions \
  -H 'content-type: application/json' \
  -d '{"model":"nvidia/nemotron-3-nano-30b-a3b:free","messages":[{"role":"user","content":"hi"}]}'
# Returns HTTP 402 with a payment challenge in the PAYMENT-REQUIRED header

Every settlement is public: /v1/settlements/<request-id> shows what was quoted, what it truly cost, and what settled, with the transaction hash.

Get testnet USDC

Request 1 tUSDC per address every two hours. It is test money and covers many small calls; the faucet, not MON, pays transfer gas.

curl -s -X POST https://silorail-testnet.fly.dev/faucet \
  -H 'content-type: application/json' \
  -d '{"address":"0xYourWalletAddress"}'

For agents: connect MCP

The MCP server gives an agent chat, list_models, get_receipt, and wallet_status. Configure your MCP host to run:

SILORAIL_GATEWAY_URL=https://silorail-testnet.fly.dev \
SILORAIL_SESSION_MAX_USD=0.10 \
SILORAIL_PER_CALL_MAX_USD=0.02 \
npx -y @silorail/mcp

It creates a local wallet on first run. The two budget limits are enforced before a payment is signed. Do not put a wallet private key in an agent prompt or tool configuration.

Capacity note: free-model requests share one upstream quota. If calls start returning 502 while payments still work, the day's test capacity is exhausted; come back tomorrow.

Pricing

LLM output length is unknown before a response is generated. With x402 upto, you authorize a ceiling before the request and SiloRail settles the actual cost after it completes. The ceiling is not a charge.

Start with the exact authorization if your wallet has no Permit2 allowance. After a settled call, eligible wallets can use sponsored approval to move to upto; neither path needs MON.