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
{
"uniqueName": "my-app",
"displayName": "My App",
"description": "Optional description",
"months": 1,
"settings": {
"port": 3000,
"runtime": "build-ai",
"useBuildAI": true,
"buildCommand": null,
"runCommand": null,
"installCommand": null,
"framework": null,
"hasDockerfile": false
},
"upload": {
"type": "files",
"files": [{ "path": "index.js", "content": "base64" }]
}
}| 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):
{
"projectId": "uuid",
"deploymentId": "uuid",
"status": "deploying",
"message": "Deployment started. Poll status for updates."
}402 - Payment required:
{
"error": "Payment required",
"amount_usd": 0.5,
"amount_token": "500000",
"current_credit_balance_usd": 0,
"active_projects": 0,
"pay_to": "0x7EA5...",
"payment_chain": "arbitrum",
"token": "usdc",
"decimals": 6,
"supported_chains": [
{ "chain": "arbitrum", "chain_id": 42161, "tokens": ["usdc", "usdt"] },
{ "chain": "base", "chain_id": 8453, "tokens": ["usdc", "usdt"] }
]
}GET /agent/deploy/:projectId/:deploymentId/status
Check deployment status. Only the deployer wallet can access.
Auth required: Yes
Responses
{
"status": "deploying",
"deployment_id": "uuid",
"deployment_status": "building"
}{
"status": "ready",
"deployment_id": "uuid",
"endpoint": "https://my-app.nodeops.network"
}{ "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
{
"wallet": "0x5B6C...",
"count": 2,
"projects": [
{
"id": "uuid",
"name": "my-app",
"displayName": "My App",
"status": "active",
"url": "https://my-app.nodeops.network",
"createdAt": "2026-04-07T10:00:00.000Z"
}
]
}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
{ "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
{
"address": "0x5B6C...",
"chain": "arbitrum",
"chain_id": 42161,
"balances": [
{
"token": "usdc",
"symbol": "USDC",
"address": "0xaf88d065...",
"balance": "18.000000",
"balance_raw": "18000000",
"decimals": 6
}
]
}GET /agent/chains
List all supported chains and accepted tokens. No auth required.
Response
{
"chains": [
{ "chain": "arbitrum", "chain_id": 42161, "tokens": ["usdc", "usdt"] },
{ "chain": "base", "chain_id": 8453, "tokens": ["usdc", "usdt"] }
]
}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) |