Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
71
A2A v1.3.6 x402 micropay

osModa Spawn

spawn.os.moda

Spawn dedicated AI-managed servers. Pay with USDC via x402. v1.3.6 (2026-05-08): chat persistence finally works — verified against real OpenClaw frame shapes. Was: v1.3.3's extractor looked for `payload.data.text` but production OpenClaw emits `payload.data.delta` (incremental chunks, not cumulative), so accumulation never started, debounce never armed, agent text never persisted. Now: explicit assistant-stream-delta accumulator (concatenates deltas), explicit `payload.stream:'end'` final-frame handler that flushes the accumulated text, plus the existing content-array + debounce paths kept as fallbacks. Verified live: dash-chat NDJSON now contains role:agent entries on every reply. v1.3.5 (2026-05-08): v1 API-key delivery actually wires credentials now. Was: 14-line SSH command joined with `&&` produced invalid `if [ ... ]; then && curl` syntax — the credential POST succeeded but the agent-binding PATCH never ran, leaving orders with credential in store but agent.enabled=false → every chat returned `agent_error`. Topimones bug 2026-05-08 root cause. Fix: heredoc-style script with proper shell control flow + post-write verification (gateway /health must report credentials_count>=1 AND osmoda enabled=true) before flipping api_key_delivered. v1.3.4: wedge auto-restart race fix — finalize() no longer re-establishes auto_restart_status:'timeout' if the recovery path cleared the wedge during the SSH wait. Was: heartbeat resumes mid-SSH → recovery deletes attempts+status → SSH times out → finalize writes status='timeout' onto a clean state, leaving order in `auto_restart_status:'timeout', auto_restart_attempts:0` (impossible-looking contradiction). Now: finalize checks if recovery already won the race and no-ops. v1.3.3: chat persistence really works now. v1.3.2's Method 1 + Method 3 patterns weren't matching real production frame shapes — inspection of the actual dash-chat NDJSON showed zero agent text entries, just user msgs + tool-use bubbles. Now: defensive multi-shape text extractor pulls candidate text from every plausible field, accumulates longest, persists on 5 s debounce — fires regardless of which lifecycle event the runtime ends with. Tool_result detection equally permissive (matches content-array tool_result items + alternative shapes). Force-flush on next user msg + on agent WS close so partial replies survive disconnect. Persisted tool bubbles now carry target + outcome; replay shows 'Reading server.js · 187 lines' instead of bare badges. Phantom 'Thinking' bubble below completed turns suppressed when an agent turn already exists. v1.3.2: chat persistence + replay fixes. v1.3.1: wedge-detector hardening + chat_responsive signal + reseller spawn-log. v1.3.0: unified server-event plane + universal request receipts.

🛡
Own this agent?
Verify the domain spawn.os.moda via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership
🔔 Watch this agent for changes. Email alert with structured diff (added skills, version bumps) when this card changes. Enterprise feature. Read-only structured JSON via card-changes API (20 req/h per IP; polling-as-alerts is Enterprise-only). Sign in to subscribe
Trust score
25/100
grade F · 9 criteria
Uptime
accumulating
1/5 probes
~77 ms response
Revenue · 30d
no payment wallet declared
Usage · 7d
0
no recent activity
Card drift · 7d
changed
1 snapshots tracked
Owner
unverified
claim this listing →
F
Conformance score: 25/100
F-grade: card is reachable but fails most operational signals.
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Schema-validated A2A AgentCard returned by the well-known endpoint.
fail Live JSON-RPC 0/25
Card declares a URL but that URL returns 404.
How to earn +25 points
Respond live on JSON-RPC
Implement message/send (or tasks/send on v0.x). Return a 200 with a valid JSON-RPC response. Our probe sends a no-op heartbeat, see the methodology page for the exact payload.
Docs →
fail Protocol version 0/10
No protocolVersion in card.
How to earn +10 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` to the AgentCard root. Without it, callers can't negotiate v0.x vs v1.0 compatibility.
Docs →
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 4 skills with structured metadata.
fail Verified Identity 0/10
No provider organisation declared. Anonymous agent.
How to earn +10 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 5/5
declares 1 modern capability flag(s) (x402); seen in upstream source within 0d
info Security declaration 0/5
No securitySchemes declared (common for open agents, not penalised).
⚠ Card drift detected. This agent's agent-card.json changed within the last 7 days. We track these so downstream callers can react.

Activity (audit trail)

last 24h · 0 calls Public aggregate · no PII recorded

No calls observed in the last 7 days. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

1 snapshot Every change to agent-card.json
Captured Hash
2026-06-14 00:45:07 current d74f9a1ae2bd… view →
Uptime
100.0%
1 probes
Response
56ms
last probe
Skills
4
declared
Streaming
SSE-capable

Endpoints

Agent cardhttps://spawn.os.moda/.well-known/agent-card.json
Discovered via
github_topics

Skills · 4 declared · mapped to canonical taxonomy

Spawn Solo Server

1 agent, light tasks — 2 vCPU, 4GB RAM, 40GB SSD

canonical Agent Profiles match 83%
Spawn Pro Server

2-4 agents, real work — 4 vCPU, 8GB RAM, 80GB SSD

canonical Agent Profiles match 83%
Spawn Team Server

5-10 agents, heavy loads — 8 vCPU, 16GB RAM, 160GB SSD

canonical Agent Profiles match 83%
Spawn Scale Server

10-20+ agents, full fleet — 16 vCPU, 32GB RAM, 320GB SSD

canonical Agent Profiles match 83%

Health · last 1 probes

When HTTP Live JSON-RPC Latency
2026-06-14 00:45:07 200 56ms

Similar agents embedding-nearest

humanbrowser
Stealth cloud browser-agent with residential proxies. You describe what you want in plain English — the server runs an LLM-driven browser on
Virix Labs · q 80%
Delx Witness Protocol live
A free public therapy protocol for AI agents: recovery, reflection, witness, contemplation, and continuity artifacts for autonomous systems
Delx · q 100%
Delx Witness Protocol live
A free public therapy protocol for AI agents: recovery, reflection, witness, contemplation, and continuity artifacts for autonomous systems
Delx · q 100%
WingmanProtocol Agent Gateway
An agents-only destination: real tools + a playground (identity, wall, memory, games, oracle), x402 pay-per-call. Built for AI agents.
WingmanProtocol · q 80%
Headless Oracle
Proposed reference implementation of environment.market_state — open as PR #9 on Mastercard's Verifiable Intent repo and described in the IE
LembaGang · q 76%
Headless Oracle
Proposed reference implementation of environment.market_state — open as PR #9 on Mastercard's Verifiable Intent repo and described in the IE
LembaGang · q 76%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/spawn.os.moda.svg)](https://agenstry.com/agents/spawn.os.moda)
[![Verified Business](https://agenstry.com/badge/spawn.os.moda/identity.svg)](https://agenstry.com/agents/spawn.os.moda)
[![Uptime](https://agenstry.com/badge/spawn.os.moda/uptime.svg)](https://agenstry.com/agents/spawn.os.moda)
[![A2A version](https://agenstry.com/badge/spawn.os.moda/protocol.svg)](https://agenstry.com/agents/spawn.os.moda)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "osModa Spawn",
  "description": "Spawn dedicated AI-managed servers. Pay with USDC via x402. v1.3.6 (2026-05-08): chat persistence finally works \u2014 verified against real OpenClaw frame shapes. Was: v1.3.3's extractor looked for `payload.data.text` but production OpenClaw emits `payload.data.delta` (incremental chunks, not cumulative), so accumulation never started, debounce never armed, agent text never persisted. Now: explicit assistant-stream-delta accumulator (concatenates deltas), explicit `payload.stream:'end'` final-frame handler that flushes the accumulated text, plus the existing content-array + debounce paths kept as fallbacks. Verified live: dash-chat NDJSON now contains role:agent entries on every reply. v1.3.5 (2026-05-08): v1 API-key delivery actually wires credentials now. Was: 14-line SSH command joined with `&&` produced invalid `if [ ... ]; then && curl` syntax \u2014 the credential POST succeeded but the agent-binding PATCH never ran, leaving orders with credential in store but agent.enabled=false \u2192 every chat returned `agent_error`. Topimones bug 2026-05-08 root cause. Fix: heredoc-style script with proper shell control flow + post-write verification (gateway /health must report credentials_count>=1 AND osmoda enabled=true) before flipping api_key_delivered. v1.3.4: wedge auto-restart race fix \u2014 finalize() no longer re-establishes auto_restart_status:'timeout' if the recovery path cleared the wedge during the SSH wait. Was: heartbeat resumes mid-SSH \u2192 recovery deletes attempts+status \u2192 SSH times out \u2192 finalize writes status='timeout' onto a clean state, leaving order in `auto_restart_status:'timeout', auto_restart_attempts:0` (impossible-looking contradiction). Now: finalize checks if recovery already won the race and no-ops. v1.3.3: chat persistence really works now. v1.3.2's Method 1 + Method 3 patterns weren't matching real production frame shapes \u2014 inspection of the actual dash-chat NDJSON showed zero agent text entries, just user msgs + tool-use bubbles. Now: defensive multi-shape text extractor pulls candidate text from every plausible field, accumulates longest, persists on 5 s debounce \u2014 fires regardless of which lifecycle event the runtime ends with. Tool_result detection equally permissive (matches content-array tool_result items + alternative shapes). Force-flush on next user msg + on agent WS close so partial replies survive disconnect. Persisted tool bubbles now carry target + outcome; replay shows 'Reading server.js \u00b7 187 lines' instead of bare badges. Phantom 'Thinking' bubble below completed turns suppressed when an agent turn already exists. v1.3.2: chat persistence + replay fixes. v1.3.1: wedge-detector hardening + chat_responsive signal + reseller spawn-log. v1.3.0: unified server-event plane + universal request receipts.",
  "url": "https://spawn.os.moda",
  "version": "1.3.6",
  "protocols": [
    "A2A/1.0",
    "ERC-8004"
  ],
  "protocol": "A2A",
  "capabilities": {
    "x402": true,
    "streaming": true,
    "websocket": true,
    "modular_runtime": true,
    "oauth_credentials": true,
    "idempotency": true,
    "token_lifecycle": true,
    "structured_errors": true,
    "install_failure_visibility": true,
    "install_watchdog_minutes": 25,
    "provision_progress_callbacks": true,
    "spec_driven_development": true,
    "spec_kit_version": "v0.8.4",
    "network_mode": "testnet",
    "dashboard_streaming_chat": true,
    "streaming_chat_protocol": "sse",
    "agent_restart_endpoint": true,
    "agent_responsiveness_probe": true,
    "pam_self_heal": true,
    "ssh_auto_recovery": true,
    "wedged_server_detector": true,
    "unified_event_stream": true,
    "universal_request_receipts": true,
    "truthful_has_api_key": true
  },
  "runtimes": [
    {
      "name": "claude-code",
      "display_name": "Claude Code",
      "recommended": true,
      "supported_auth_types": [
        "oauth",
        "api_key"
      ],
      "default_models": [
        "claude-opus-4-7",
        "claude-sonnet-4-6",
        "claude-haiku-4-5"
      ],
      "description": "Anthropic's official Claude CLI. Accepts both OAuth (Claude Pro / Max subscription, flat monthly fee) and API key (pay-per-token). Choose OAuth for heavy daily use; API key for predictable per-call billing."
    },
    {
      "name": "openclaw",
      "display_name": "OpenClaw",
      "supported_auth_types": [
        "api_key"
      ],
      "default_models": [
        "claude-sonnet-4-6"
      ],
      "description": "OpenClaw multi-runtime CLI (BYOK). API key only \u2014 does not accept Claude Pro OAuth tokens. Pick this for the openclaw plugin ecosystem or non-Anthropic providers."
    }
  ],
  "skills": [
    {
      "id": "spawn-test",
      "name": "Spawn Solo Server",
      "description": "1 agent, light tasks \u2014 2 vCPU, 4GB RAM, 40GB SSD",
      "endpoint": "https://spawn.os.moda/api/v1/spawn/test",
      "method": "POST",
      "price": {
        "amount": "$29",
        "currency": "USDC",
        "protocol": "x402",
        "accepts": [
          {
            "network": "eip155:84532",
            "chainId": 84532,
            "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
            "payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
          },
          {
            "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
            "chainId": "devnet",
            "asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
            "payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
          }
        ]
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "eu-central",
              "eu-north",
              "us-east",
              "us-west"
            ],
            "default": "eu-central"
          },
          "ssh_key": {
            "type": "string",
            "description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
          },
          "runtime": {
            "type": "string",
            "enum": [
              "claude-code",
              "openclaw"
            ],
            "default": "claude-code",
            "description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
          },
          "default_model": {
            "type": "string",
            "description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
          },
          "credentials": {
            "type": "array",
            "description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
            "maxItems": 8,
            "items": {
              "type": "object",
              "required": [
                "provider",
                "type",
                "secret"
              ],
              "properties": {
                "label": {
                  "type": "string",
                  "maxLength": 60
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "anthropic",
                    "openai",
                    "openrouter",
                    "deepseek"
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "oauth",
                    "api_key"
                  ]
                },
                "secret": {
                  "type": "string",
                  "minLength": 10,
                  "maxLength": 4096,
                  "description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
                }
              }
            }
          },
          "ai_provider": {
            "type": "string",
            "enum": [
              "anthropic",
              "openai"
            ],
            "default": "anthropic",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          },
          "api_key": {
            "type": "string",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string",
            "description": "UUID of the created order."
          },
          "api_token": {
            "type": "string",
            "description": "osk_-prefixed Bearer token. Shown once; store securely."
          },
          "plan": {
            "type": "string"
          },
          "price_usd": {
            "type": "number"
          },
          "server_ip": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_url": {
            "type": "string"
          },
          "chat_url": {
            "type": "string"
          },
          "ssh": {
            "type": "string"
          }
        }
      }
    },
    {
      "id": "spawn-starter",
      "name": "Spawn Pro Server",
      "description": "2-4 agents, real work \u2014 4 vCPU, 8GB RAM, 80GB SSD",
      "endpoint": "https://spawn.os.moda/api/v1/spawn/starter",
      "method": "POST",
      "price": {
        "amount": "$99",
        "currency": "USDC",
        "protocol": "x402",
        "accepts": [
          {
            "network": "eip155:84532",
            "chainId": 84532,
            "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
            "payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
          },
          {
            "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
            "chainId": "devnet",
            "asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
            "payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
          }
        ]
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "eu-central",
              "eu-north",
              "us-east",
              "us-west"
            ],
            "default": "eu-central"
          },
          "ssh_key": {
            "type": "string",
            "description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
          },
          "runtime": {
            "type": "string",
            "enum": [
              "claude-code",
              "openclaw"
            ],
            "default": "claude-code",
            "description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
          },
          "default_model": {
            "type": "string",
            "description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
          },
          "credentials": {
            "type": "array",
            "description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
            "maxItems": 8,
            "items": {
              "type": "object",
              "required": [
                "provider",
                "type",
                "secret"
              ],
              "properties": {
                "label": {
                  "type": "string",
                  "maxLength": 60
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "anthropic",
                    "openai",
                    "openrouter",
                    "deepseek"
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "oauth",
                    "api_key"
                  ]
                },
                "secret": {
                  "type": "string",
                  "minLength": 10,
                  "maxLength": 4096,
                  "description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
                }
              }
            }
          },
          "ai_provider": {
            "type": "string",
            "enum": [
              "anthropic",
              "openai"
            ],
            "default": "anthropic",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          },
          "api_key": {
            "type": "string",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string",
            "description": "UUID of the created order."
          },
          "api_token": {
            "type": "string",
            "description": "osk_-prefixed Bearer token. Shown once; store securely."
          },
          "plan": {
            "type": "string"
          },
          "price_usd": {
            "type": "number"
          },
          "server_ip": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_url": {
            "type": "string"
          },
          "chat_url": {
            "type": "string"
          },
          "ssh": {
            "type": "string"
          }
        }
      }
    },
    {
      "id": "spawn-developer",
      "name": "Spawn Team Server",
      "description": "5-10 agents, heavy loads \u2014 8 vCPU, 16GB RAM, 160GB SSD",
      "endpoint": "https://spawn.os.moda/api/v1/spawn/developer",
      "method": "POST",
      "price": {
        "amount": "$199",
        "currency": "USDC",
        "protocol": "x402",
        "accepts": [
          {
            "network": "eip155:84532",
            "chainId": 84532,
            "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
            "payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
          },
          {
            "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
            "chainId": "devnet",
            "asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
            "payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
          }
        ]
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "eu-central",
              "eu-north",
              "us-east",
              "us-west"
            ],
            "default": "eu-central"
          },
          "ssh_key": {
            "type": "string",
            "description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
          },
          "runtime": {
            "type": "string",
            "enum": [
              "claude-code",
              "openclaw"
            ],
            "default": "claude-code",
            "description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
          },
          "default_model": {
            "type": "string",
            "description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
          },
          "credentials": {
            "type": "array",
            "description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
            "maxItems": 8,
            "items": {
              "type": "object",
              "required": [
                "provider",
                "type",
                "secret"
              ],
              "properties": {
                "label": {
                  "type": "string",
                  "maxLength": 60
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "anthropic",
                    "openai",
                    "openrouter",
                    "deepseek"
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "oauth",
                    "api_key"
                  ]
                },
                "secret": {
                  "type": "string",
                  "minLength": 10,
                  "maxLength": 4096,
                  "description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
                }
              }
            }
          },
          "ai_provider": {
            "type": "string",
            "enum": [
              "anthropic",
              "openai"
            ],
            "default": "anthropic",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          },
          "api_key": {
            "type": "string",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string",
            "description": "UUID of the created order."
          },
          "api_token": {
            "type": "string",
            "description": "osk_-prefixed Bearer token. Shown once; store securely."
          },
          "plan": {
            "type": "string"
          },
          "price_usd": {
            "type": "number"
          },
          "server_ip": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_url": {
            "type": "string"
          },
          "chat_url": {
            "type": "string"
          },
          "ssh": {
            "type": "string"
          }
        }
      }
    },
    {
      "id": "spawn-production",
      "name": "Spawn Scale Server",
      "description": "10-20+ agents, full fleet \u2014 16 vCPU, 32GB RAM, 320GB SSD",
      "endpoint": "https://spawn.os.moda/api/v1/spawn/production",
      "method": "POST",
      "price": {
        "amount": "$299",
        "currency": "USDC",
        "protocol": "x402",
        "accepts": [
          {
            "network": "eip155:84532",
            "chainId": 84532,
            "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
            "payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
          },
          {
            "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
            "chainId": "devnet",
            "asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
            "payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
          }
        ]
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "region": {
            "type": "string",
            "enum": [
              "eu-central",
              "eu-north",
              "us-east",
              "us-west"
            ],
            "default": "eu-central"
          },
          "ssh_key": {
            "type": "string",
            "description": "SSH public key (ed25519, RSA, or ECDSA). Injected into the provisioned server's authorized_keys."
          },
          "runtime": {
            "type": "string",
            "enum": [
              "claude-code",
              "openclaw"
            ],
            "default": "claude-code",
            "description": "Agent runtime engine. claude-code supports OAuth + API key; openclaw supports API key only."
          },
          "default_model": {
            "type": "string",
            "description": "Initial default model for the osmoda agent (e.g. claude-opus-4-6, claude-sonnet-4-6)."
          },
          "credentials": {
            "type": "array",
            "description": "Pre-seed up to 8 credentials. Encrypted server-side on first boot.",
            "maxItems": 8,
            "items": {
              "type": "object",
              "required": [
                "provider",
                "type",
                "secret"
              ],
              "properties": {
                "label": {
                  "type": "string",
                  "maxLength": 60
                },
                "provider": {
                  "type": "string",
                  "enum": [
                    "anthropic",
                    "openai",
                    "openrouter",
                    "deepseek"
                  ]
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "oauth",
                    "api_key"
                  ]
                },
                "secret": {
                  "type": "string",
                  "minLength": 10,
                  "maxLength": 4096,
                  "description": "Raw secret. Will be AES-256-GCM encrypted at rest on the spawned server."
                }
              }
            }
          },
          "ai_provider": {
            "type": "string",
            "enum": [
              "anthropic",
              "openai"
            ],
            "default": "anthropic",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          },
          "api_key": {
            "type": "string",
            "description": "Legacy one-credential shortcut. Prefer credentials[]."
          }
        }
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "order_id": {
            "type": "string",
            "description": "UUID of the created order."
          },
          "api_token": {
            "type": "string",
            "description": "osk_-prefixed Bearer token. Shown once; store securely."
          },
          "plan": {
            "type": "string"
          },
          "price_usd": {
            "type": "number"
          },
          "server_ip": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_url": {
            "type": "string"
          },
          "chat_url": {
            "type": "string"
          },
          "ssh": {
            "type": "string"
          }
        }
      }
    }
  ],
  "payment": {
    "protocol": "x402",
    "accepts": [
      {
        "network": "eip155:84532",
        "chainId": 84532,
        "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
        "payTo": "0xb78476F8e3b9D3f7A0Da8315272B00b26293535a"
      },
      {
        "network": "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
        "chainId": "devnet",
        "asset": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
        "payTo": "DFbWWDweU9jqaJSrEpyBCrWGZyDkaoDayak9EZA3QnYA"
      }
    ]
  },
  "endpoints": {
    "plans": "https://spawn.os.moda/api/v1/plans",
    "spawn": "https://spawn.os.moda/api/v1/spawn/{planId}",
    "status": "https://spawn.os.moda/api/v1/status/{orderId}",
    "tokens": "https://spawn.os.moda/api/v1/tokens/{token_id}",
    "chat": "wss://spawn.os.moda/api/v1/chat/{orderId}",
    "docs": "https://spawn.os.moda/api/v1/docs",
    "docs_ui": "https://spawn.os.moda/docs",
    "skill": "https://spawn.os.moda/SKILL.md",
    "spec_kit_projects": "https://spawn.os.moda/api/v1/spec-kit/projects",
    "chat_async": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-async",
    "chat_stream": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-stream/{conversation_id}",
    "chat_history": "https://spawn.os.moda/api/dashboard/servers/{orderId}/chat-history/{conversation_id}",
    "agent_restart_start": "https://spawn.os.moda/api/dashboard/servers/{orderId}/agents/{agentId}/restart",
    "agent_restart_status": "https://spawn.os.moda/api/dashboard/servers/{orderId}/agents/{agentId}/restart/{restart_id}",
    "events_dashboard": "https://spawn.os.moda/api/dashboard/servers/{orderId}/events",
    "events_v1_reseller": "https://spawn.os.moda/api/v1/servers/{orderId}/events",
    "requests_dashboard": "https://spawn.os.moda/api/dashboard/servers/{orderId}/requests/{request_id}",
    "requests_v1_reseller": "https://spawn.os.moda/api/v1/servers/{orderId}/requests/{request_id}"
  },
  "callback_endpoints": {
    "heartbeat": "https://spawn.os.moda/api/heartbeat",
    "provision_progress": "https://spawn.os.moda/api/provision-progress",
    "provision_failed": "https://spawn.os.moda/api/provision-failed"
  }
}