Deploy to CreateOS
Use the gateway's wallet-authenticated HTTP flow. No browser session or OAuth is required.
Default gateway: https://mpp-createos.nodeops.network
Prefer the bundled script because it preserves the exact deployment body across the payment retry, filters secrets from uploads, uses fresh auth nonces, and verifies the final endpoint.
cd path/to/createos-deploy
bun install
# Inspect the 402 and stop before signing a payment.
bun run deploy -- --dir /path/to/project --name my-app --port 3000
# Pay the selected native MPP offer and deploy.
bun run deploy -- --dir /path/to/project --name my-app --port 3000 --chain arbitrum --yes
# Select x402 instead. It must be advertised by the gateway for that chain.
bun run deploy -- --dir /path/to/project --name my-app --port 3000 --chain bsc --protocol x402 --yes
Provide PRIVATE_KEY in the process environment or in a .env beside this skill. Never place it in the project being uploaded. Set CREATEOS_GATEWAY to test another gateway.
Safety boundaries
- Inspect the application source and determine its actual listening port before deploying. Do not trust stale deployment metadata.
- The first
POST /agent/deploymay immediately deploy when the wallet has enough unused credits. Quote-only mode prevents a new payment, but it cannot prevent this credit-funded behavior because the API has no separate quote endpoint. - Without
--yes, stop after presenting the selected protocol, network, recipient, and USDC amount. - Treat the runtime
402headers as authoritative. Do not hard-code a default payment chain from discovery metadata. - Never submit both
Authorization: Payment ...andPAYMENT-SIGNATURE. - After submitting a payment credential, never create and submit a second credential merely to recover from an error. Surface the receipt or challenge and transaction reference when available. A retry without payment headers is safe when credits may already exist.
- Confirm with the user immediately before deleting a project. Deletion is irreversible.
Payment behavior
Native MPP is the default protocol:
- Base, Arbitrum, and Arbitrum Sepolia use EIP-3009 USDC authorization. The agent signs an authorization; the gateway's settler broadcasts it and pays gas.
- BSC uses Binance B402 Permit2 Exact. The payment is gasless after the wallet has approved USDC to canonical Permit2. The script uses a bounded approval equal to the current payment amount; approval itself requires BNB gas.
x402 is optional:
- A chain is payable through x402 only when it appears in
PAYMENT-REQUIRED.accepts. - Base and Arbitrum-family x402 offers use EIP-3009.
- BSC x402 uses Binance B402 Permit2 Exact.
- x402
amountvalues are atomic token units. The wire schema does not carrydecimals; use trusted local asset metadata.
The gateway currently models USDC on all supported chains. Always accept only a known chain ID and exact known token contract.
Deployment workflow
- Inspect the project, determine
port, and validate the project name before any deploy request. - Use
GET /agent/projectsto detect an existing name and show active projects whose runtime could be affected by shared credits. - Send
POST /agent/deploywith fresh wallet-auth headers and no payment credential. - If it returns
200, deployment has already started using credits. - If it returns
402, inspectWWW-Authenticatefor native MPP andPAYMENT-REQUIREDfor x402. Select only the user-approved protocol and an advertised chain with sufficient USDC. - Create one credential and retry the identical body with either
AuthorizationorPAYMENT-SIGNATURE. - Preserve
Payment-ReceiptandPAYMENT-RESPONSEvalues in error reporting. - Poll the owned deployment every five seconds until
readyorfailed, with a fresh auth nonce each time. - Fetch the endpoint once.
readyis not proof that the configured port serves traffic.
Read references/api.md when implementing the flow without the bundled script or diagnosing a gateway response.