{"name":"Verified Deploy","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. Failed checks neither publish nor settle payment. Successful releases are versioned for rollback.","price":{"amount":"0.09","currency":"USDC","network":"Base","unit":"verified deployment","status":"active"},"endpoint":"https://verified-deploy.road-me-band.chatgpt.site/api/deploy","rollback_endpoint":"https://verified-deploy.road-me-band.chatgpt.site/api/rollback","limits":{"archive_mb":5,"uncompressed_mb":12,"files":100},"input":{"content_type":"application/json","schema":{"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"]}}]},"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"}]}},"output":{"schema":{"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."}}},"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."}},"errors":{"schema":{"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"}}}}}},"statuses":{"400":"Invalid request. Nothing is published and payment is not settled.","402":"Payment required. Nothing is published.","422":"Verification checks failed. Nothing is published and payment is not settled.","500":"Internal error. Nothing is published and payment is not settled."}}}