Skip to content

Configuration

Plain settings live in each worker’s wrangler.jsonc; secrets are set with wrangler secret put and never appear in the repository. .env.example at the repository root lists every name.

Setting Kind Staging What it does
ZYROPAY_MODE var development development serves test networks only, production mainnets only
ZYROPAY_USE_MOCK_ADAPTERS var false Mock chain and Turnkey adapters (labelled simulated); refused in production
BLOCKFROST_PROJECT_ID_PREPROD / _MAINNET secret preprod set Turns Cardano on for that network; a project of the wrong network refuses to start
CARDANO_CONFIRMATIONS var default 3 Confirmations before a Cardano request is CONFIRMED
X402_CAPS var {"cardano-preprod:native":"5000000"} Highest x402 amount per asset, in base units; an asset without a cap is refused
X402_MAX_TIMEOUT_SECONDS var default 600 Highest maxTimeoutSeconds accepted from a 402
PRICE_MAX_AGE_SECONDS var 120 Older price quotes are dropped (no valuation, fail closed)
VALUE_TESTNETS_AT_MAINNET_PRICES var true Value test-network assets at mainnet prices, labelled mainnet_proxy; refused in production
AGENT_CONNECTION_CODE_TTL_SECONDS var 600 Lifetime of the code you enter to connect an agent
SESSION_ACCESS_TOKEN_TTL_SECONDS / _REFRESH_… var 900 / 2592000 App session lifetimes
CORS_ALLOWED_ORIGINS var the app and landing origins Exact browser origins allowed
TURNKEY_ORGANIZATION_ID, TURNKEY_API_PUBLIC_KEY, TURNKEY_API_PRIVATE_KEY secret set The parent organization and its key, used read-only towards sub-orgs
INTERNAL_SERVICE_TOKEN secret set Shared with the MCP worker; authenticates /internal/*
DELEGATED_KEY_ENCRYPTION_KEY secret set Encrypts delegated-signer keys (Autonomous); changing it makes existing keys unreadable
DATABASE_URL secret Neon pooled URL The database
Setting Kind What it does
MCP_PUBLIC_URL var Bare origin; the issuer is the origin and the resource is origin + /mcp
MCP_OAUTH_ACCESS_TOKEN_TTL_SECONDS var 60 to 3600, default 900
MCP_ALLOWED_ORIGINS var Extra browser origins for /mcp beyond its own, Claude, ChatGPT and Grok
MCP_AUDIT_SINK var log (default) or api
INTERNAL_SERVICE_TOKEN (+ _PREVIOUS) secret The API’s value; _PREVIOUS allows rotation without downtime
MCP_OAUTH_COOKIE_SECRET secret HMAC for the consent page’s poll tickets
OAUTH_KV, rate-limit bindings bindings Grants and hashed tokens; per-token and per-IP limits
Setting Default What it does
SELLER_ADDRESS required The payTo preprod key-hash address
PRICE_LOVELACE 2000000 Direct route price
FACILITATOR_MODE embedded Run the @x402/cardano facilitator in the worker, or hosted
SELLER_SIGNING_KEY (secret) unset Payment key of SELLER_ADDRESS; turns on receipts and the escrow route
ESCROW_PRICE_LOVELACE 5000000 Escrow route price; at least 4 tADA
ESCROW_MAX_TIMEOUT_SECONDS 300 payBy = 402 time + this
ESCROW_SUBMIT_AFTER_PAYBY_MIN, ESCROW_UNLOCK_AFTER_SUBMIT_MIN, ESCROW_DISPUTE_AFTER_UNLOCK_MIN 10, 15, 15 Escrow deadlines
AUTO_AUTHORIZE_REFUNDS true Preprod demo policy: authorize every refund request
DEMO_DISHONEST_MODE off enabled allows ?demo=tamper and ?demo=nodelivery on the escrow route
SUBHIRE_ENABLED, SPECIALIST_URL, SPECIALIST_PAY_TO, SUBHIRE_MAX_LOVELACE off, —, —, 3000000 Sub-hiring Token Intelligence

Every seller setting, with its rule, is in apps/seller/README.md.