API Reference
Base URL: https://mpp-createos.nodeops.network
POST /agent/deploy
Deploy a project to CreateOS. Returns 402 if payment is required, 200 if deploying.
Auth required: Yes
Request Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Payment-Tx | No | - | ERC20 transfer transaction hash |
X-Payment-Chain | No | arbitrum | Chain the payment was made on |
X-Payment-Token | No | usdc | Token used for payment |
X-Use-Existing-Credits | No | false | Opt in to share credits with active projects |
Request Body
JSON1{2 "uniqueName": "my-app",3 "displayName": "My App",4 "description": "Optional description",5 "months": 1,6 "settings": {7 "port": 3000,8 "runtime": "build-ai",9 "useBuildAI": true,10 "buildCommand": null,11 "runCommand": null,12 "installCommand": null,13 "framework": null,14 "hasDockerfile": false15 },16 "upload": {17 "type": "files",18 "files": [{ "path": "index.js", "content": "base64" }]19 }20}
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
uniqueName | string | Yes | - | URL-safe project identifier |
displayName | string | Yes | - | Human-readable project name |
description | string | No | - | Project description |
months | number | No | 1 | Number of months to deploy for |
settings | object | No | See below | Build and runtime settings |
upload | object | Yes | - | Files or zip to deploy |
Responses
200 - Deploying (credits available or payment verified):
JSON1{2 "projectId": "uuid",3 "deploymentId": "uuid",4 "status": "deploying",5 "message": "Deployment started. Poll status for updates."6}
402 - Payment required:
JSON1{2 "error": "Payment required",3 "amount_usd": 0.5,4 "amount_token": "500000",5 "current_credit_balance_usd": 0,6 "active_projects": 0,7 "pay_to": "0x7EA5...",8 "payment_chain": "arbitrum",9 "token": "usdc",10 "decimals": 6,11 "supported_chains": [12 { "chain": "arbitrum", "chain_id": 42161, "tokens": ["usdc", "usdt"] },13 { "chain": "base", "chain_id": 8453, "tokens": ["usdc", "usdt"] }14 ]15}
GET /agent/deploy/:projectId/:deploymentId/status
Check deployment status. Only the deployer wallet can access.
Auth required: Yes
Responses
JSON1{ "status": "deploying", "deployment_id": "uuid", "deployment_status": "building" }
JSON1{ "status": "ready", "deployment_id": "uuid", "endpoint": "https://my-app.nodeops.network" }
JSON1{ "status": "failed", "deployment_id": "uuid", "reason": "build error" }
GET /agent/projects
List all projects deployed by the authenticated wallet, with the live URL of the latest deployment.
Auth required: Yes
Response
JSON1{2 "wallet": "0x5B6C...",3 "count": 2,4 "projects": [5 {6 "id": "uuid",7 "name": "my-app",8 "displayName": "My App",9 "status": "active",10 "url": "https://my-app.nodeops.network",11 "createdAt": "2026-04-07T10:00:00.000Z"12 }13 ]14}
url is null if the project has no successful deployment. Status values: active, building, deploying, pending, queued, promoting, deleting, failed.
DELETE /agent/projects/:projectId
Permanently delete a project. Only the deployer wallet can delete.
Auth required: Yes
Response
JSON1{ "projectId": "uuid", "status": "deleted" }
403 - Wrong wallet (not the deployer).
GET /agent/balance/:address
Check token balances for an address on a chain. No auth required.
Query Parameters
| Param | Default | Description |
|---|---|---|
chain | arbitrum | Chain name |
Response
JSON1{2 "address": "0x5B6C...",3 "chain": "arbitrum",4 "chain_id": 42161,5 "balances": [6 {7 "token": "usdc",8 "symbol": "USDC",9 "address": "0xaf88d065...",10 "balance": "18.000000",11 "balance_raw": "18000000",12 "decimals": 613 }14 ]15}
GET /agent/chains
List all supported chains and accepted tokens. No auth required.
Response
JSON1{2 "chains": [3 { "chain": "arbitrum", "chain_id": 42161, "tokens": ["usdc", "usdt"] },4 { "chain": "base", "chain_id": 8453, "tokens": ["usdc", "usdt"] }5 ]6}
Error Codes
| Code | Meaning |
|---|---|
| 400 | Invalid request body |
| 401 | Bad signature, expired, or nonce reuse |
| 402 | Payment required or verification failed |
| 403 | Wrong wallet (not authorized) |
| 409 | Transaction hash already used |
| 429 | Rate limited (30 requests/minute) |