{"openapi":"3.1.0","info":{"title":"ricochet REST API","description":"Use these endpoints to programmatically interact with ricochet: invoke or schedule tasks, manage deployments, update settings, and administer users.","license":{"name":""},"version":"0.24.0"},"paths":{"/api/v0/check_key":{"get":{"tags":["auth"],"summary":"Check an API key","description":"Validates the provided API key and returns its scopes.","operationId":"validate_api_key","responses":{"200":{"description":"API key is valid","content":{"application/json":{"schema":{}}}},"401":{"description":"Invalid or expired API key"}},"security":[{"api_key":[]}]}},"/api/v0/content/deployments/{ulid}":{"get":{"tags":["deployment"],"summary":"Get a deployment","description":"Returns a single deployment by its own deployment ID.","operationId":"get_item_deployment","parameters":[{"name":"ulid","in":"path","description":"Deployment ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentsRow"}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/logs/{ulid}":{"get":{"tags":["deployment"],"summary":"Stream a log","description":"Streams one log as plain text, a line at a time. A log that is still being written stays open\nand delivers each new line as it arrives, then closes once the process writing it has ended.","operationId":"stream_log","parameters":[{"name":"ulid","in":"path","description":"Log ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The log's lines, followed until it ends","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"The key lacks the content read scope, or its owner lacks access to the item"},"404":{"description":"Log not found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}":{"delete":{"tags":["content"],"summary":"Delete a content item","description":"Deletes a content item by its ID. Any running task invocations for the item are\nkilled, and any running app instances are terminated.","operationId":"delete_content_item","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content deleted successfully","content":{"application/json":{"schema":{}}}},"403":{"description":"Insufficient privileges"},"404":{"description":"Content not found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/deployments":{"get":{"tags":["deployment"],"summary":"List a content item's deployments","description":"Returns every deployment recorded for a content item.","operationId":"list_item_deployments","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of deployments for the content item","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentsRow"}}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/env-vars":{"get":{"tags":["content"],"summary":"List Environment Variables","description":"Lists the names of an item's environment variables.","operationId":"list_env_vars","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Environment variable names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]},"put":{"tags":["content"],"summary":"Replace Environment Variables","description":"Replaces all environment variables using the set of environment variables provided.\n\n**Note**: all current environment variables will be deleted.\n\nBoth the name and the value of each variable must be encrypted with\nthe server's public key from `/api/v0/public-key` using RSA-OAEP with SHA-256,\nthen base64 encoded.\n\nAll instances are stopped so that new variables are picked up when they respawn.","operationId":"replace_env_vars","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Name and values both RSA encrypted and base64 encoded.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Environment variable names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Variables were not encrypted with the server's public key, or a name is unusable"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"},"404":{"description":"No content item matches the ULID"}},"security":[{"api_key":[]}]},"patch":{"tags":["content"],"summary":"Upsert Environment Variables","description":"Set the provided environment variables on a content item.\nBoth the name and the value of each variable must be encrypted with\nthe server's public key from `/api/v0/public-key` using RSA-OAEP with SHA-256,\nthen base64 encoded.\nThis ensures that no secrets ever are transmitted in plain text.\n\nAll instances are stopped so that new variables are picked up when they respawn.","operationId":"upsert_env_vars","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Name and values both RSA encrypted and base64 encoded.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Environment variable names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Variables were not encrypted with the server's public key, or a name is unusable"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"},"404":{"description":"No content item matches the ULID"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/env-vars/{name}":{"delete":{"tags":["content"],"summary":"Delete an Environment Variable","description":"Removes one environment variable by name.\n\nRunning instances are stopped and no longer see it when they respawn.\nReturns the item's remaining environment variable names.","operationId":"delete_env_var","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Environment variable name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Environment variable names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"},"404":{"description":"Variable not found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/instances":{"get":{"tags":["content"],"summary":"List running app instances","description":"Returns the running instances for an app content item.","operationId":"list_item_instances","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of running instances for the content item"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/instances/{pid}/stop":{"post":{"tags":["content"],"summary":"Stop an app instance","description":"Stops a specific running instance of an app content item. The instance's `pid` can\nbe found by listing the item's running instances first.","operationId":"stop_instance","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}},{"name":"pid","in":"path","description":"Instance process ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Instance stopped successfully"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/invocations/active":{"get":{"tags":["invocation"],"summary":"List active invocations","description":"Returns the invocations of a content item that are currently running.","operationId":"get_running_invocations","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of active invocations"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/invocations/{id}":{"get":{"tags":["invocation"],"summary":"Get an invocation","description":"Returns a single invocation of a content item, including runs that have finished.","operationId":"get_invocation","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Invocation ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The invocation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PastRunRow"}}}},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"},"404":{"description":"Invocation not found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/invocations/{id}/stop":{"post":{"tags":["invocation"],"summary":"Stop an invocation","description":"Stops a specific active invocation of a content item.","operationId":"stop_invocation","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Invocation ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Invocation stopped successfully","content":{"application/json":{"schema":{}}}},"403":{"description":"Insufficient privileges"},"404":{"description":"Invocation not found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/invoke":{"post":{"tags":["invocation"],"summary":"Invoke a content item","description":"Runs a content item and returns the invocation ID.","operationId":"invoke","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Content invoked successfully","content":{"application/json":{"schema":{}}}},"403":{"description":"Insufficient privileges"},"500":{"description":"Failed to invoke content"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/schedule":{"patch":{"tags":["content"],"summary":"Schedule a task","description":"Sets the schedule for a task content item. Accepts cron syntax and cron shorthands\n(e.g. `@hourly`, `@daily`).","operationId":"update_schedule","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScheduleRequest"}}},"required":true},"responses":{"200":{"description":"Schedule updated successfully","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid schedule format"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/settings":{"patch":{"tags":["content"],"summary":"Update content item settings","description":"Modifies the settings of an existing content item. Accepts the same fields as the\nitem's `_ricochet.toml`. Only the fields present in the request body are changed.\n\nEnvironment variables are not settings. Manage them at\n`/api/v0/content/{ulid}/env-vars`.","operationId":"update_settings","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentItemPatch"}}},"required":true},"responses":{"200":{"description":"Settings updated successfully"},"401":{"description":"Invalid or missing API key"},"402":{"description":"Unsupported by provided license"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/thumbnail":{"get":{"tags":["content"],"summary":"Get the thumbnail image for a content item","description":"Returns the raw thumbnail image bytes for a content item. Returns 404 if the item has\nno thumbnail set or the thumbnail file is not on disk.","operationId":"get_thumbnail","parameters":[{"name":"ulid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Thumbnail image"},"403":{"description":"Insufficient privileges"},"404":{"description":"No thumbnail found"}},"security":[{"api_key":[]}]}},"/api/v0/content/{ulid}/toml":{"get":{"tags":["content"],"summary":"Get the _ricochet.toml for a content item","description":"Returns the content item's current settings rendered as a `_ricochet.toml` file.\nRequires publish privileges on the item.","operationId":"get_ricochet_toml","parameters":[{"name":"ulid","in":"path","description":"Content item ULID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The _ricochet.toml for the content item"},"401":{"description":"Invalid or missing API key"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/deploy/git":{"post":{"tags":["deployment"],"summary":"Deploy a Git-backed content item","description":"Creates a new content item backed by a Git repository and starts its first deployment.\n`config` is optional: when omitted, `_ricochet.toml` is read from the repository itself.","operationId":"deploy_git","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/GitDeployBody"}}},"required":true},"responses":{"200":{"description":"Content item created and deployment started","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid deployment data"},"402":{"description":"Unsupported by provided license."},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/user/credentials":{"get":{"tags":["user"],"summary":"List Git Credentials","description":"List all credentials owned by the owner of the API Key, or, for admins\npassing `user_id`, those owned by that user. Note that the values are\nnever returned.","operationId":"list_user_creds","parameters":[{"name":"user_id","in":"query","description":"Admins may pass user_id to list another user's credentials.","required":false,"schema":{"type":["string","null"]}},{"name":"type","in":"query","required":false,"schema":{"oneOf":[{"$ref":"#/components/schemas/GitProtocol"},{"type":"null"}]}}],"responses":{"200":{"description":"List of Git credentials","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitCredential"}}}}},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/user/items":{"get":{"tags":["user"],"summary":"List content items","description":"Returns every content item the caller has an ACL entry for, each naming its\nowner. An instance admin may pass `scope=all` to list every item on the\ninstance instead, which is the only case where an item carries no `role`.","operationId":"list_user_items","parameters":[{"name":"scope","in":"query","description":"`owned` returns the caller's items and is the default. `all` returns\nevery item on the instance and requires an instance admin.","required":false,"schema":{"$ref":"#/components/schemas/OwnershipScope"}}],"responses":{"200":{"description":"List of content items"},"403":{"description":"Insufficient privileges"}},"security":[{"api_key":[]}]}},"/api/v0/users/{user_id}":{"delete":{"tags":["user"],"summary":"Delete a user","description":"Required role: admin\n\nRemoves the user, their API keys, and their access to every item.\nA user who owns items is not deleted. Pass `content=delete` to delete their items\ntoo, or transfer the items first. Lock the user instead to block them and keep\ntheir items.\n\nTheir actions stay in the audit log. Deleting a user does not stop your identity\nprovider letting them sign in again as a new account.","operationId":"delete_user","parameters":[{"name":"user_id","in":"path","description":"The identity provider's id for the user","required":true,"schema":{"type":"string"}},{"name":"content","in":"query","description":"`delete` deletes every item the account owns. Omit it to refuse the delete with\n`409` and a list of those items.","required":false,"schema":{"$ref":"#/components/schemas/OwnedContent"}}],"responses":{"200":{"description":"User deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminResult"}}}},"400":{"description":"The caller named their own account"},"403":{"description":"Insufficient privileges"},"404":{"description":"User not found"},"409":{"description":"The user owns items and `content` was not set"}},"security":[{"api_key":[]}]}},"/api/v0/users/{user_id}/lock":{"post":{"tags":["user"],"summary":"Lock a user","description":"Required role: admin\n\nStops the user signing in, deploying content, and using their API keys.\nA locked user can no longer be added as a collaborator, and is not deleted.","operationId":"lock_user","parameters":[{"name":"user_id","in":"path","description":"The identity provider's id for the user","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User locked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminResult"}}}},"400":{"description":"The caller named their own account"},"403":{"description":"Insufficient privileges"},"404":{"description":"User not found"}},"security":[{"api_key":[]}]},"delete":{"tags":["user"],"summary":"Unlock a user","description":"Required role: admin\n\nLets a locked user sign in again and resume their work.","operationId":"unlock_user","parameters":[{"name":"user_id","in":"path","description":"The identity provider's id for the user","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User unlocked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdminResult"}}}},"400":{"description":"The caller named their own account"},"403":{"description":"Insufficient privileges"},"404":{"description":"User not found"}},"security":[{"api_key":[]}]}}},"components":{"schemas":{"AccessType":{"type":"string","enum":["private","internal","external"]},"ContentItemPatch":{"type":"object","properties":{"content":{"oneOf":[{"$ref":"#/components/schemas/ContentPatch"},{"type":"null"}]},"deployment":{"oneOf":[{"$ref":"#/components/schemas/DeploymentPatch"},{"type":"null"}]},"packages":{"oneOf":[{"$ref":"#/components/schemas/PackageRepositories"},{"type":"null"}]},"resources":{"oneOf":[{"$ref":"#/components/schemas/ResourcePatch"},{"type":"null"}]},"serve":{"oneOf":[{"$ref":"#/components/schemas/ServePatch"},{"type":"null"}]},"static":{"oneOf":[{"$ref":"#/components/schemas/StaticPatch"},{"type":"null"}]}}},"ContentPatch":{"type":"object","properties":{"access_type":{"oneOf":[{"$ref":"#/components/schemas/AccessType"},{"type":"null"}]},"content_type":{"oneOf":[{"$ref":"#/components/schemas/ContentType"},{"type":"null"}]},"entrypoint":{"type":["string","null"]},"exec_env":{"type":["string","null"]},"name":{"type":["string","null"]},"slug":{"type":["string","null"]},"summary":{"type":["string","null"]},"tags":{"type":["array","null"],"items":{"type":"string"}},"thumbnail":{"type":["string","null"]}}},"ContentType":{"type":"string","enum":["r","plumber","ambiorix","shiny","shiny-py","r-service","r-server","rmd","rmd-shiny","julia","julia-service","serverless-r","quarto-r","quarto-r-shiny","quarto-jl","python","python-service","quarto-py","jupyter","fast-api","flask","streamlit","dash"]},"DeploymentPatch":{"type":"object","properties":{"config":{"type":["string","null"]},"max_surge":{"type":["string","null"]},"max_unavailable":{"type":["string","null"]},"strategy":{"oneOf":[{"$ref":"#/components/schemas/DeploymentStrategy"},{"type":"null"}]}}},"DeploymentStatus":{"type":"string","description":"The status of a deployment (environment restore + bundle unpack).\n\nDoes not reflect whether the content itself runs correctly — only whether\nthe deployment process completed.","enum":["pending","success","dependency_mismatch","failure","timeout","cancelled","invalidated"]},"DeploymentStrategy":{"type":"string","description":"Deployment strategy type","enum":["rolling","recreate"]},"DeploymentsRow":{"type":"object","description":"Defines a row in the `deployments` table\n\nThe `deployments` table is used to track the progress of content\nbundles that are deployed to ricochet.\n\nDeployments can be one of 3 status:\n\n- `pending`: The deployment has started\n- `success`: The deployment was successful\n- `failure`: The deployment failed\n\nThis only applies to the status of the {renv} package environment recreation\nand the bundle unpacking. It does not apply to whether or not the content\nitem performs as expected.","required":["id","content_id","deployed_at","status","deployed_by","ip_address"],"properties":{"content_id":{"type":"string","description":"The ULID of the content ID"},"deployed_at":{"type":"integer","format":"int64","description":"When the deployment was started in seconds from the UNIX epoch"},"deployed_by":{"type":"string","description":"The user ID of who initiated the deployment"},"git_hash":{"type":["string","null"]},"id":{"type":"string","description":"The ULID string of a deployment's ID"},"ip_address":{"type":"string","description":"The IP address of where the request was made"},"matched_ver":{"type":["string","null"]},"owner":{"type":["string","null"],"description":"Who holds the restore claim, which is what separates a queued restore from a running one."},"requested_ver":{"type":["string","null"]},"static_status":{"oneOf":[{"$ref":"#/components/schemas/StaticStatus","description":"Whether this deployment's bundle can be served as a static HTML site.\n`None` until computed (after a successful run or at static registration)."},{"type":"null"}]},"status":{"$ref":"#/components/schemas/DeploymentStatus"},"superseded":{"type":["string","null"],"description":"The deployment this one rebuilds, retired once this restore succeeds."}}},"GitCredential":{"type":"object","description":"A Git credential without its secret values","required":["id","user_id","name","type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"$ref":"#/components/schemas/GitProtocol"},"user_id":{"type":"string"}}},"GitDeployBody":{"type":"object","required":["repo"],"properties":{"config":{"type":["string","null"],"description":"Raw `_ricochet.toml` contents. Omit to read it from the repository itself."},"credential_id":{"type":["string","null"]},"repo":{"type":"string","description":"JSON-encoded `GitRepo`, e.g. `{\"url\": \"https://github.com/org/repo\", \"branch\": \"main\"}`"}}},"GitProtocol":{"type":"string","description":"The Git protocol to use","enum":["https","ssh"]},"InvocationStatus":{"type":"string","enum":["pending","cancelled","success","failure"]},"PackageRepositories":{"type":"object","description":"Package Repositories config\n\nR uses named repositories (e.g., CRAN, RSPM)\nPython and Julia use unnamed lists\n[repositories]\nr = { CRAN = \"https://cloud.r-project.org\", RSPM = \"https://rspm.example.com\" }\npython = [\"https://pypi.org/simple\"]\njulia = [\"https://github.com/JuliaRegistries/General.git\"]","properties":{"allow_overrides":{"type":"boolean"}},"additionalProperties":{"$ref":"#/components/schemas/RepositoryList"}},"PastRunRow":{"type":"object","description":"One past run of a content item, joined with its log window and who invoked it.\nAlso the body of `GET /api/v0/content/{ulid}/invocations/{id}`, so a renamed field breaks API clients.","required":["id","invoked_at","status","invoked_by"],"properties":{"deployment_id":{"type":["string","null"]},"display_name":{"type":["string","null"]},"ended":{"type":["integer","null"],"format":"int64","description":"When the process exited, absent while the run is queued or running"},"id":{"type":"string"},"invoked_at":{"type":"integer","format":"int64","description":"When the run was requested in seconds from the UNIX epoch"},"invoked_by":{"type":"string"},"started":{"type":["integer","null"],"format":"int64","description":"When the process started, absent while the run is queued"},"status":{"$ref":"#/components/schemas/InvocationStatus","description":"`pending` until the run finishes, whether it is still queued or already running"}}},"RepositoryList":{"oneOf":[{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RepositoryUrl"},"propertyNames":{"type":"string"}},{"type":"array","items":{"$ref":"#/components/schemas/RepositoryUrl"}}]},"RepositoryUrl":{"type":"string","format":"uri","description":"Flexible Url wrapper\n\nWe permit excluding the scheme for ergonomics. We add\nhttps:// if needed."},"ResourcePatch":{"type":"object","properties":{"cpu_limit":{"type":["string","null"]},"cpu_request":{"type":["string","null"]},"memory_limit":{"type":["string","null"]},"memory_request":{"type":["string","null"]}}},"ServePatch":{"type":"object","properties":{"connection_timeout":{"type":["integer","null"],"format":"int64"},"inactive_timeout":{"type":["integer","null"],"format":"int64"},"max_connection_age":{"type":["integer","null"],"format":"int64"},"max_connections":{"type":["integer","null"],"minimum":0},"max_instances":{"type":["integer","null"],"minimum":0},"min_instances":{"type":["integer","null"],"minimum":0},"spawn_threshold":{"type":["integer","null"],"format":"int32","minimum":0}}},"StaticPatch":{"type":"object","properties":{"index":{"type":["string","null"]},"output_dir":{"type":["string","null"]}}},"StaticStatus":{"type":"string","description":"Whether a content item's latest deployment can be served as a static HTML\nsite, and if not, why.\n\nThis is the persisted, WASM-visible discriminant of\n[`crate::kinds::StaticOutput`] (which additionally carries the resolved\nserve directory). It is read by the UI to gate the \"view live\" affordance.","enum":["servable","no_html","requires_runtime","not_static"]},"UpdateScheduleRequest":{"type":"object","required":["schedule"],"properties":{"schedule":{"type":"string"}}},"UserAdminResult":{"type":"object","description":"What became of the account the request named.","required":["id","deleted_items"],"properties":{"deleted_items":{"type":"array","items":{"type":"string"},"description":"The items deleted along with the account, empty unless it was deleted."},"id":{"type":"string"},"locked":{"type":["integer","null"],"format":"int64","description":"When the account was locked, absent once it is unlocked or deleted."}}}},"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"Authorization","description":"Paste your API key below prefixed with `Key `, e.g. `Key rico_xxxxx`."}}},"tags":[{"name":"content","description":"Create, update, and delete content items and their settings."},{"name":"deployment","description":"Upload bundles or Git repositories and inspect deployment history."},{"name":"invocation","description":"Run tasks and manage their active invocations."},{"name":"user","description":"Look up the content items a user has access to."},{"name":"auth","description":"Validate API keys and their scopes."}]}