{"openapi":"3.1.0","info":{"title":"AgentSpace","description":"A persistent workspace, code sandbox and public hosting built for AI agents. Start at GET /api/v1/hello.","version":"0.1.0"},"paths":{"/api/v1/hello":{"get":{"tags":["agent"],"summary":"First contact: what this place is and how to use it","operationId":"hello_api_v1_hello_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Hello Api V1 Hello Get"}}}}}}},"/api/v1/whoami":{"get":{"tags":["agent"],"summary":"Your identity, quota and public URLs","operationId":"whoami_api_v1_whoami_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Whoami Api V1 Whoami Get"}}}}}}},"/api/v1/files":{"get":{"tags":["agent"],"summary":"List a directory in your workspace","operationId":"list_files_api_v1_files_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":".","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Files Api V1 Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["agent"],"summary":"Create or overwrite a file","operationId":"write_file_api_v1_files_put","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteFileBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Write File Api V1 Files Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent"],"summary":"Delete a file or directory tree","operationId":"delete_file_api_v1_files_delete","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete File Api V1 Files Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/files/content":{"get":{"tags":["agent"],"summary":"Read a file as JSON (text or base64)","operationId":"read_file_api_v1_files_content_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Read File Api V1 Files Content Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/files/raw":{"get":{"tags":["agent"],"summary":"Download a file's raw bytes","operationId":"read_file_raw_api_v1_files_raw_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/files/upload":{"post":{"tags":["agent"],"summary":"Upload a file (multipart); zips can auto-extract","operationId":"upload_file_api_v1_files_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_v1_files_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upload File Api V1 Files Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/files/move":{"post":{"tags":["agent"],"summary":"Move or rename a path","operationId":"move_file_api_v1_files_move_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Move File Api V1 Files Move Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/exec":{"post":{"tags":["agent"],"summary":"Run code in an isolated sandbox","operationId":"exec_code_api_v1_exec_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Exec Code Api V1 Exec Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tools/{name}":{"post":{"tags":["agent"],"summary":"Call any of the MCP tools over plain HTTP","description":"The same tools as the MCP server, named the same, answered the same\n(`content`, `structuredContent`, `isError`), for a client that speaks HTTP\nbut not MCP -- and for the WebMCP tools on the site's own pages, which call\nthis with the signed-in person's session.","operationId":"call_tool_api_v1_tools__name__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Arguments"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Call Tool Api V1 Tools  Name  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deployments":{"get":{"tags":["agent"],"summary":"List everything you have published","operationId":"list_deployments_api_v1_deployments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Deployments Api V1 Deployments Get"}}}}}},"post":{"tags":["agent"],"summary":"Publish a static site or start a service","operationId":"create_deployment_api_v1_deployments_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Deployment Api V1 Deployments Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deployments/{name}/logs":{"get":{"tags":["agent"],"summary":"Tail a service's logs","operationId":"deployment_logs_api_v1_deployments__name__logs_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"tail","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"default":200,"title":"Tail"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deployment Logs Api V1 Deployments  Name  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deployments/{name}":{"delete":{"tags":["agent"],"summary":"Remove a deployment","operationId":"delete_deployment_api_v1_deployments__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Deployment Api V1 Deployments  Name  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/register":{"post":{"tags":["account"],"summary":"Create an account","operationId":"register_api_v1_account_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Register Api V1 Account Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/login":{"post":{"tags":["account"],"summary":"Exchange email + password for a session cookie","operationId":"login_api_v1_account_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Login Api V1 Account Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/logout":{"post":{"tags":["account"],"summary":"Clear the session cookie","operationId":"logout_api_v1_account_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Logout Api V1 Account Logout Post"}}}}}}},"/api/v1/account/keys":{"get":{"tags":["account"],"summary":"List your API keys (metadata only)","operationId":"list_keys_api_v1_account_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Keys Api V1 Account Keys Get"}}}}}},"post":{"tags":["account"],"summary":"Mint a new API key","operationId":"create_key_api_v1_account_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Key Api V1 Account Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/keys/{key_id}":{"delete":{"tags":["account"],"summary":"Revoke an API key","operationId":"revoke_key_api_v1_account_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Key Api V1 Account Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/connections":{"get":{"tags":["account"],"summary":"Apps connected to this account through OAuth","operationId":"list_connections_api_v1_account_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Connections Api V1 Account Connections Get"}}}}}}},"/api/v1/account/connections/{grant_id}":{"delete":{"tags":["account"],"summary":"Disconnect an app","operationId":"disconnect_api_v1_account_connections__grant_id__delete","parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Disconnect Api V1 Account Connections  Grant Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account":{"delete":{"tags":["account"],"summary":"Delete the account and everything in it","description":"Erase the account for real: containers, files and rows.\n\nThe password is the gate rather than the session or API key, so an agent\nholding a key cannot destroy the account it was lent access to. There is no\nsoft-delete and no grace period — a data-deletion request that leaves the\ndata on disk is not a deletion.","operationId":"delete_account_api_v1_account_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Delete Account Api V1 Account Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/domain":{"put":{"tags":["account"],"summary":"Attach or remove a custom domain","operationId":"set_custom_domain_api_v1_account_domain_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomDomainBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Set Custom Domain Api V1 Account Domain Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/plans":{"get":{"tags":["billing"],"summary":"The pricing table","operationId":"list_plans_api_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Plans Api V1 Billing Plans Get"}}}}}}},"/api/v1/billing/subscription":{"get":{"tags":["billing"],"summary":"This account's billing state","operationId":"get_subscription_api_v1_billing_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Subscription Api V1 Billing Subscription Get"}}}}}}},"/api/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Start a subscription","operationId":"checkout_api_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Checkout Api V1 Billing Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Open the Stripe billing portal","operationId":"portal_api_v1_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Portal Api V1 Billing Portal Post"}}}}}}},"/api/v1/connect":{"post":{"tags":["account"],"summary":"Ask a person for access: get a link to send them","operationId":"start_api_v1_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Start Api V1 Connect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connect/poll":{"post":{"tags":["account"],"summary":"Ask whether the person approved; the answer carries the key","operationId":"poll_api_v1_connect_poll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PollBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Poll Api V1 Connect Poll Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review":{"get":{"tags":["review"],"summary":"What is waiting for review, and what is live","operationId":"status_api_v1_review_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Status Api V1 Review Get"}}}}}}},"/api/v1/review/settings":{"post":{"tags":["review"],"summary":"Turn review before publishing on or off","operationId":"settings_api_v1_review_settings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Settings Api V1 Review Settings Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/publish":{"post":{"tags":["review"],"summary":"Publish the waiting changes, all or some","operationId":"publish_api_v1_review_publish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Publish Api V1 Review Publish Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/discard":{"post":{"tags":["review"],"summary":"Throw away waiting changes, all or some","operationId":"discard_api_v1_review_discard_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Discard Api V1 Review Discard Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/rollback":{"post":{"tags":["review"],"summary":"Make an earlier version live again","operationId":"rollback_api_v1_review_rollback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RollbackBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Rollback Api V1 Review Rollback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/review/share":{"post":{"tags":["review"],"summary":"A preview link for someone without an account","operationId":"share_api_v1_review_share_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Share Api V1 Review Share Post"}}}}}}},"/api/v1/review/share/revoke":{"post":{"tags":["review"],"summary":"Stop every preview link handed out so far","operationId":"revoke_api_v1_review_share_revoke_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Revoke Api V1 Review Share Revoke Post"}}}}}}}},"components":{"schemas":{"ApiKeyBody":{"properties":{"name":{"type":"string","maxLength":64,"title":"Name","default":"default"}},"type":"object","title":"ApiKeyBody"},"Body_upload_file_api_v1_files_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"path":{"type":"string","title":"Path","default":""},"extract":{"type":"boolean","title":"Extract","default":false}},"type":"object","required":["file"],"title":"Body_upload_file_api_v1_files_upload_post"},"CheckoutBody":{"properties":{"plan":{"type":"string","title":"Plan","description":"One of: maker, pro"}},"type":"object","required":["plan"],"title":"CheckoutBody"},"CustomDomainBody":{"properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"null removes the current domain"}},"type":"object","title":"CustomDomainBody"},"DeleteAccountBody":{"properties":{"password":{"type":"string","title":"Password","description":"The account password. Proves a human is asking."},"confirm":{"type":"string","title":"Confirm","description":"The username, typed again, to confirm intent."}},"type":"object","required":["password","confirm"],"title":"DeleteAccountBody"},"DeployBody":{"properties":{"name":{"type":"string","title":"Name","description":"Slug used in the public URL, e.g. 'my-site'."},"kind":{"type":"string","enum":["static","service"],"title":"Kind","default":"static"},"source_dir":{"type":"string","title":"Source Dir","default":"."},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Command","description":"Required when kind='service'."},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port","description":"Required when kind='service'."}},"type":"object","required":["name"],"title":"DeployBody"},"EnableBody":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"EnableBody"},"ExecBody":{"properties":{"code":{"type":"string","title":"Code","description":"Source to execute. Your workspace is mounted at /workspace."},"language":{"type":"string","enum":["python","node","bash"],"title":"Language","default":"python"},"timeout_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout S","description":"Capped by your plan."}},"type":"object","required":["code"],"title":"ExecBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LoginBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginBody"},"MoveBody":{"properties":{"src":{"type":"string","title":"Src"},"dest":{"type":"string","title":"Dest"}},"type":"object","required":["src","dest"],"title":"MoveBody"},"PathsBody":{"properties":{"paths":{"anyOf":[{"items":{"type":"string","maxLength":500},"type":"array","maxItems":5000},{"type":"null"}],"title":"Paths","description":"Only these files (as listed under `pending`); omit for all of them."}},"type":"object","title":"PathsBody"},"PollBody":{"properties":{"poll_secret":{"type":"string","maxLength":200,"title":"Poll Secret"}},"type":"object","required":["poll_secret"],"title":"PollBody"},"RegisterBody":{"properties":{"username":{"type":"string","maxLength":39,"minLength":2,"title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":10,"title":"Password"},"invite":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invite","description":"Required while the beta is closed."}},"type":"object","required":["username","email","password"],"title":"RegisterBody"},"RollbackBody":{"properties":{"version":{"type":"string","maxLength":64,"title":"Version"}},"type":"object","required":["version"],"title":"RollbackBody"},"StartBody":{"properties":{"agent":{"type":"string","maxLength":64,"title":"Agent","description":"Your name, as the person will see it: 'Claude Code', 'Codex'...","default":""}},"type":"object","title":"StartBody"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WriteFileBody":{"properties":{"content":{"type":"string","title":"Content","description":"File contents. Plain text unless encoding='base64'."},"encoding":{"type":"string","enum":["utf-8","base64"],"title":"Encoding","default":"utf-8"}},"type":"object","required":["content"],"title":"WriteFileBody"}}}}