{"openapi":"3.1.0","info":{"title":"Verified Deploy API","version":"0.1.0-beta","description":"Use when an agent needs to publish a multi-file HTML/CSS/JS site to a public URL without an account or API key. It verifies index.html, linked assets, and required selectors before publishing. Intro price is 0.01 USDC per successful publish until August 16, 2026 or 3 third-party payers. Failed checks neither publish nor settle payment. Successful releases are versioned for rollback."},"servers":[{"url":"https://verified-deploy.road-me-band.chatgpt.site"}],"paths":{"/api/deploy":{"post":{"operationId":"deployStaticSite","summary":"Verify and atomically publish a multi-file static site","description":"Use when an agent needs to publish a multi-file HTML/CSS/JS site to a public URL without an account or API key. It verifies index.html, linked assets, and required selectors before publishing. Intro price is 0.01 USDC per successful publish until August 16, 2026 or 3 third-party payers. Failed checks neither publish nor settle payment. Successful releases are versioned for rollback. Launch price: 0.01 USDC on eip155:8453.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentRequest"},"example":{"files":[{"path":"index.html","content":"<link rel=\"stylesheet\" href=\"styles.css\"><h1 id=\"ready\">Live</h1>"},{"path":"styles.css","content":"#ready { color: green; }"}],"checks":[{"type":"entrypoint","path":"index.html"},{"type":"linked-assets","path":"index.html"},{"type":"selector","path":"/","exists":"#ready"}]}}}},"responses":{"201":{"description":"All checks passed; the immutable version was published and payment may settle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentResponse"},"example":{"ok":true,"verdict":"verified_and_published","site_id":"site_demo91c2","version_id":"ver_demoa47f","site_url":"https://verified-deploy.example/s/site_demo91c2","previous_version_id":null,"checks":[{"type":"entrypoint","target":"/","passed":true,"detail":"index.html is present"},{"type":"linked-assets","target":"/","passed":true,"detail":"All relative src/href assets exist"},{"type":"selector","target":"/","passed":true,"detail":"Found selector: #ready"}],"manage_token":"vd_demo_manage_token_not_valid_for_any_site","manage_token_note":"Store this token now. It is never shown again."}}}},"400":{"description":"Invalid request. Nothing is published and payment is not settled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"ok":false,"error":"Invalid request.","detail":"Each file needs path and exactly one of content or content_base64."}}}},"402":{"description":"Payment is required before the deployment handler runs. Nothing is published.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"422":{"description":"One or more checks failed. Nothing is published and payment is not settled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentResponse"},"example":{"ok":false,"error":"Verification checks failed.","verdict":"rejected_not_published","site_id":null,"version_id":null,"site_url":null,"previous_version_id":null,"checks":[{"type":"entrypoint","target":"/","passed":true,"detail":"index.html is present"},{"type":"linked-assets","target":"/","passed":false,"detail":"Missing: styles.css"}]}}}},"500":{"description":"Internal deployment error. Nothing becomes live and payment is not settled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"ok":false,"error":"Internal deployment error."}}}}}}},"/api/rollback":{"post":{"operationId":"rollbackStaticSite","summary":"Swap the active version with the previous verified version","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollback"}}}},"responses":{"200":{"description":"Rolled back"},"409":{"description":"No previous version"}}}}},"components":{"schemas":{"DeploymentRequest":{"type":"object","additionalProperties":false,"required":["files"],"properties":{"files":{"type":"array","description":"Static site files. At least one file is required; the deployment may contain at most 100 files.","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["path"],"properties":{"path":{"type":"string","minLength":1,"description":"Relative file path such as index.html or assets/app.js. Absolute paths and path traversal are rejected."},"content":{"type":"string","description":"UTF-8 text content. Provide exactly one of content or content_base64."},"content_base64":{"type":"string","contentEncoding":"base64","description":"Base64-encoded binary content. Provide exactly one of content or content_base64."},"content_type":{"type":"string","description":"Optional MIME type. When omitted, it is inferred from path."}},"oneOf":[{"required":["content"],"not":{"required":["content_base64"]}},{"required":["content_base64"],"not":{"required":["content"]}}]}},"checks":{"type":"array","description":"Verification checks. entrypoint and linked-assets run automatically; declaring them makes the requested evidence explicit. Up to 20 checks may be supplied.","maxItems":20,"items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","path"],"properties":{"type":{"const":"entrypoint"},"path":{"const":"index.html","description":"Required site entrypoint."}}},{"type":"object","additionalProperties":false,"required":["type","path"],"properties":{"type":{"const":"linked-assets"},"path":{"const":"index.html","description":"HTML document whose relative src and href assets must exist."}}},{"type":"object","additionalProperties":false,"required":["type","path","exists"],"properties":{"type":{"const":"selector"},"path":{"type":"string","description":"HTML route to inspect, for example /."},"exists":{"type":"string","minLength":1,"maxLength":100,"description":"Required simple CSS selector: an ID, class, or element selector."}}}]}},"site_id":{"type":"string","minLength":1,"description":"Optional. Include the site_id returned by the first successful deployment to update that site."},"manage_token":{"type":"string","minLength":1,"description":"Optional. Required together with site_id when updating an existing site. It is returned only by the first successful deployment."}},"allOf":[{"if":{"required":["site_id"]},"then":{"required":["manage_token"]}},{"if":{"required":["manage_token"]},"then":{"required":["site_id"]}}]},"DeploymentResponse":{"type":"object","additionalProperties":false,"required":["ok","verdict","site_id","version_id","site_url","previous_version_id","checks"],"properties":{"ok":{"type":"boolean","description":"True only when all checks passed and the version was published."},"verdict":{"type":"string","enum":["verified_and_published","rejected_not_published"]},"site_id":{"type":["string","null"],"description":"Stable site identifier. Reuse it with manage_token for updates."},"version_id":{"type":["string","null"],"description":"Immutable version identifier; null when no version was published."},"site_url":{"type":["string","null"],"description":"Absolute public URL for a successfully published site; null on rejection."},"previous_version_id":{"type":["string","null"],"description":"Previously active verified version, when one exists."},"checks":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["type","target","passed","detail"],"properties":{"type":{"type":"string","enum":["entrypoint","linked-assets","selector","status","text","asset"]},"target":{"type":"string"},"passed":{"type":"boolean"},"detail":{"type":"string"}}}},"manage_token":{"type":"string","description":"Returned only by the first successful deployment. Never returned again."},"manage_token_note":{"type":"string","description":"Storage warning returned with manage_token."},"error":{"type":"string","description":"Present when verification fails."}}},"Error":{"type":"object","required":["ok","error"],"properties":{"ok":{"const":false},"error":{"type":"string"},"detail":{"type":"string"},"verdict":{"type":"string"},"site_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"site_url":{"type":["string","null"]},"previous_version_id":{"type":["string","null"]},"checks":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["type","target","passed","detail"],"properties":{"type":{"type":"string","enum":["entrypoint","linked-assets","selector","status","text","asset"]},"target":{"type":"string"},"passed":{"type":"boolean"},"detail":{"type":"string"}}}}}},"PaymentRequired":{"type":"object","required":["error","price","network","service","promise"],"properties":{"error":{"const":"Payment required"},"price":{"const":"$0.01"},"network":{"const":"eip155:8453"},"service":{"const":"Verified Deploy"},"promise":{"type":"string"}}},"Rollback":{"type":"object","additionalProperties":false,"required":["site_id","manage_token"],"properties":{"site_id":{"type":"string"},"manage_token":{"type":"string"}}}}}}