{"openapi":"3.0.3","info":{"title":"Deno API","description":"","contact":{"name":"Deno Land Inc.","email":"[email protected]"},"license":{"name":""},"version":"1.0.0"},"servers":[{"url":"https://api.deno.com/v1"}],"paths":{"/organizations/{organizationId}":{"get":{"tags":["organization"],"summary":"Get organization details","operationId":"get_organization","parameters":[{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/organizations/{organizationId}/analytics":{"get":{"tags":["organization"],"summary":"Retrieve organization analytics","description":"This API returns analytics for the specified organization.\nThe analytics are returned as time series data in 15 minute intervals, with\nthe `time` field representing the start of the interval.","operationId":"get_organization_analytics","parameters":[{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"since","in":"query","description":"\nStart of the time range in RFC3339 format.\n\nDefaults to 24 hours ago.\n\nNote that the maximum allowed time range is 24 hours.\n ","required":true,"schema":{"type":"string","format":"date-time"},"example":"2021-08-01T00:00:00Z"},{"name":"until","in":"query","description":"\nEnd of the time range in RFC3339 format.\n\nDefaults to the current time.\n\nNote that the maximum allowed time range is 24 hours.\n ","required":true,"schema":{"type":"string","format":"date-time"},"example":"2021-08-02T00:00:00Z"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Analytics"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/organizations/{organizationId}/projects":{"get":{"tags":["project"],"summary":"List projects of an organization","description":"This API returns a list of projects belonging to the specified organization\nin a pagenated manner.\nThe URLs for the next, previous, first, and last page are returned in the\n`Link` header of the response, if any.","operationId":"list_projects","parameters":[{"name":"page","in":"query","description":"The page number to return.","required":false,"schema":{"type":"integer","default":1,"nullable":true,"minimum":1}},{"name":"limit","in":"query","description":"The maximum number of items to return per page.","required":false,"schema":{"type":"integer","default":20,"nullable":true,"maximum":100,"minimum":1}},{"name":"q","in":"query","description":"Query by project name or project ID","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort","in":"query","description":"The field to sort by, either `name` or `updated_at`. Defaults to `updated_at`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"order","in":"query","description":"Sort order, either `asc` or `desc`. Defaults to `asc`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","headers":{"Link":{"schema":{"$ref":"#/components/schemas/PaginationLinkHeader"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["project"],"summary":"Create a project","description":"This API allows you to create a new project under the specified\norganization.\nThe project name is optional; if not provided, a random name will be\ngenerated.","operationId":"create_project","parameters":[{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/organizations/{organizationId}/databases":{"get":{"tags":["database"],"summary":"List KV databases of an organization","description":"This API returns a list of KV databases belonging to the specified organization\nin a pagenated manner.\nThe URLs for the next, previous, first, and last page are returned in the\n`Link` header of the response, if any.","operationId":"list_kv_databases","parameters":[{"name":"page","in":"query","description":"The page number to return.","required":false,"schema":{"type":"integer","default":1,"nullable":true,"minimum":1}},{"name":"limit","in":"query","description":"The maximum number of items to return per page.","required":false,"schema":{"type":"integer","default":20,"nullable":true,"maximum":100,"minimum":1}},{"name":"q","in":"query","description":"Query by KV database ID","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort","in":"query","description":"The field to sort by. Currently only `created_at` is supported.","required":false,"schema":{"type":"string","nullable":true}},{"name":"order","in":"query","description":"Sort order, either `asc` or `desc`. Defaults to `asc`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","headers":{"Link":{"schema":{"$ref":"#/components/schemas/PaginationLinkHeader"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KvDatabase"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["database"],"summary":"Create a KV database","description":"This API allows you to create a new KV database under the specified\norganization. You will then be able to associate the created KV database\nwith a new deployment by specifying the KV database ID in the \"Create a\ndeployment\" API call.","operationId":"create_kv_database","parameters":[{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKvDatabaseRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvDatabase"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/databases/{databaseId}":{"patch":{"tags":["database"],"summary":"Update KV database details","operationId":"update_kv_database","parameters":[{"name":"databaseId","in":"path","description":"KV database ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKvDatabaseRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvDatabase"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/databases/{databaseId}/database_backups":{"post":{"tags":["databaseBackup"],"summary":"Enable a database backup","description":"This API allows you to enable a backup for a KV database. The backup can be\nstored in your S3 bucket.\n\nCurrently, only one backup can be enabled per database. When a second backup\nis being configured, the API will return a `409 Conflict` error.","operationId":"enable_kv_backup","parameters":[{"name":"databaseId","in":"path","description":"KV database ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableKvDatabaseBackupRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableKvDatabaseBackupResponse"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"This can happen either when another backup configuration is in progress since multiple configurations can't be processed simultaneously, or when there is one backup already enabled for the database since currently only one backup is supported per database.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"500":{"description":"Failed to enable a database backup for some reason.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"get":{"tags":["databaseBackup"],"summary":"List database backups of a database","description":"This API returns a list of backups of the specified KV database.\n\nNote that currently more than one backups are not supported for a single\ndatabase. So this API will return either an empty list or a list with a\nsingle item.","operationId":"list_kv_backups","parameters":[{"name":"databaseId","in":"path","description":"KV database ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KvDatabaseBackup"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/database_backups/{databaseBackupId}":{"get":{"tags":["databaseBackup"],"summary":"Get database backup details","description":"This API returns the details of the specified database backup.","operationId":"get_kv_backup","parameters":[{"name":"databaseBackupId","in":"path","description":"KV Backup ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KvDatabaseBackup"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"delete":{"tags":["databaseBackup"],"summary":"Disable a database backup","description":"This API allows you to disable a backup for a KV database.","operationId":"disable_kv_backup","parameters":[{"name":"databaseBackupId","in":"path","description":"KV Backup ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisableKvDatabaseBackupResponse"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"409":{"description":"Another backup configuration is ongoing. Only one can be processed simultaneously.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/projects/{projectId}":{"get":{"tags":["project"],"summary":"Get project details","operationId":"get_project","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"patch":{"tags":["project"],"summary":"Update project details","operationId":"update_project","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProjectRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"delete":{"tags":["project"],"summary":"Delete a project","operationId":"delete_project","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/projects/{projectId}/analytics":{"get":{"tags":["project"],"summary":"Retrieve project analytics","description":"This API returns analytics for the specified project.\nThe analytics are returned as time series data in 15 minute intervals, with\nthe `time` field representing the start of the interval.","operationId":"get_project_analytics","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"since","in":"query","description":"\nStart of the time range in RFC3339 format.\n\nDefaults to 24 hours ago.\n ","required":true,"schema":{"type":"string","format":"date-time"},"example":"2021-08-01T00:00:00Z"},{"name":"until","in":"query","description":"\nEnd of the time range in RFC3339 format.\n\nDefaults to the current time.\n ","required":true,"schema":{"type":"string","format":"date-time"},"example":"2021-08-02T00:00:00Z"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Analytics"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/projects/{projectId}/deployments":{"get":{"tags":["deployment"],"summary":"List deployments of a project","description":"This API returns a list of deployments belonging to the specified project in\na pagenated manner.\n\nThe URLs for the next, previous, first, and last page are returned in the\n`Link` header of the response, if any.","operationId":"list_deployments","parameters":[{"name":"page","in":"query","description":"The page number to return.","required":false,"schema":{"type":"integer","default":1,"nullable":true,"minimum":1}},{"name":"limit","in":"query","description":"The maximum number of items to return per page.","required":false,"schema":{"type":"integer","default":20,"nullable":true,"maximum":100,"minimum":1}},{"name":"q","in":"query","description":"Query by deployment ID","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort","in":"query","description":"The field to sort by, either `id` or `created_at`. Defaults to `created_at`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"order","in":"query","description":"Sort order, either `asc` or `desc`. Defaults to `asc`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","headers":{"Link":{"schema":{"$ref":"#/components/schemas/PaginationLinkHeader"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["deployment"],"summary":"Create a deployment","description":"This API initiates a build process for a new deployment.\n\nNote that this process is asynchronous; the completion of this API doesn't\nmean the deployment is ready. In order to keep track of the progress of the\nbuild, call the \"Get build logs of a deployment\" API or the \"Get deployment\ndetails\" API.","operationId":"create_deployment","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeploymentRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/deployments/{deploymentId}/redeploy":{"post":{"tags":["deployment"],"summary":"Redeploy a deployment with different configuration","operationId":"redeploy_deployment","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"$ref":"#/components/schemas/DeploymentId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeployRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/deployments/{deploymentId}":{"get":{"tags":["deployment"],"summary":"Get deployment details","operationId":"get_deployment","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"$ref":"#/components/schemas/DeploymentId"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"delete":{"tags":["deployment"],"summary":"Delete a deployment","operationId":"delete_deployment","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"$ref":"#/components/schemas/DeploymentId"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/deployments/{deploymentId}/build_logs":{"get":{"tags":["deployment"],"summary":"Get build logs of a deployment","description":"This API returns build logs of the specified deployment. It's useful to watch\nthe build progress, figure out what went wrong in case of a build failure,\nand so on.\n\nThe response format can be controlled by the `Accept` header; if\n`application/x-ndjson` is specified, the response will be a stream of\nnewline-delimited JSON objects. Otherwise it will be a JSON array of\nobjects.","operationId":"get_build_logs","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/BuildLogsResponseEntry"}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BuildLogsResponseEntry"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/deployments/{deploymentId}/app_logs":{"get":{"tags":["deployment"],"summary":"Get execution logs of a deployment","description":"This API can return either past logs or real-time logs depending on the\npresence of the since and until query parameters; if at least one of them\nis provided, past logs are returned, otherwise real-time logs are returned.\n\nAlso, the response format can be controlled by the `Accept` header; if\n`application/x-ndjson` is specified, the response will be a stream of\nnewline-delimited JSON objects. Otherwise it will be a JSON array of\nobjects.","operationId":"get_app_logs","parameters":[{"name":"q","in":"query","description":"Text to search for in log message.","required":false,"schema":{"type":"string","nullable":true},"example":"foobar"},{"name":"level","in":"query","description":"Log level(s) to filter logs by.\n\nDefaults to all levels (i.e. no filter applied).\n\nMultiple levels can be specified using comma-separated format.","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/LogLevel"}],"nullable":true},"example":"error,warning"},{"name":"region","in":"query","description":"Region(s) to filter logs by.\n\nDefaults to all regions (i.e. no filter applied).\n\nMultiple regions can be specified using comma-separated format.","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/Region"}],"nullable":true},"example":"gcp-us-central1,gcp-us-east1"},{"name":"since","in":"query","description":"Start time of the time range to filter logs by.\n\nDefaults to the Unix Epoch (though the log retention period is 2 weeks as\nof now).\n\nIf neither `since` nor `until` is specified, real-time logs are returned.","required":false,"schema":{"type":"string","format":"date-time","nullable":true},"example":"2021-08-01T00:00:00Z"},{"name":"until","in":"query","description":"End time of the time range to filter logs by.\n\nDefaults to the current time.\n\nIf neither `since` nor `until` is specified, real-time logs are returned.","required":false,"schema":{"type":"string","format":"date-time","nullable":true},"example":"2021-08-01T00:00:00Z"},{"name":"limit","in":"query","description":"Maximum number of logs to return in one request.\n\nThis is only effective for the past log mode.","required":false,"schema":{"type":"integer","default":100,"nullable":true,"maximum":10000,"minimum":1}},{"name":"sort","in":"query","description":"The field to sort by. Currently only `time` is supported.\n\nThis is only effective for the past log mode.","required":false,"schema":{"type":"string","nullable":true}},{"name":"order","in":"query","description":"Sort order, either `asc` or `desc`. Defaults to `desc`.\n\nFor backward compatibility, `timeAsc` and `timeDesc` are also supported,\nbut deprecated.\n\nThis is only effective for the past log mode.","required":false,"schema":{"type":"string","nullable":true}},{"name":"cursor","in":"query","description":"Opaque value that represents the cursor of the last log returned in the\nprevious request.\n\nThis is only effective for the past log mode.","required":false,"schema":{"type":"string","nullable":true}},{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Link":{"schema":{"$ref":"#/components/schemas/CursorLinkHeader"},"description":"This header is present only in the past log mode."}},"content":{"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/AppLogsResponseEntry"}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppLogsResponseEntry"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/deployments/{deploymentId}/domains/{domain}":{"put":{"tags":["deployment"],"summary":"Attach a domain to a deployment","description":"This API allows you to attach a domain to an existing deployment. Once\nattached, the deployment will become accessible via that domain.\n\nIf the specified domain is already attached to another deployment, it will\nbe detached from the current deployment and attached to the new one.","operationId":"attach_domain_to_deployment","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"$ref":"#/components/schemas/DeploymentId"}},{"name":"domain","in":"path","description":"Domain name to attach to the deployment.\n\nTwo placeholders can be used in the domain name, which will be substituted\naccordingly:\n\n- `{project.name}`: The name of the project.\n- `{deployment.id}`: The ID of the deployment.\n\nThe domain name you specify here must be either equal to one of the custom\ndomains you have registered, or a subdomain of one of the wildcard domains\nyou have registered. Let's say you have registered `example.com` and\n`*.example.net` as custom domains via [add a domain](#post-/organizations/-organizationId-/domains)\nendpoint and set DNS records needed to verify you are the owner of these.\nIn this case, the following table shows what domains are attachable and why:\n\n| Domain | Attachable? | Comment |\n| ----------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------- |\n| `example.com` | ✅ | Exactly matches the registered custom domain `example.com` |\n| `foo.example.net` | ✅ | Covered by `*.example.net` |\n| `*.example.net` | ✅ | Exactly matches the registered custom domain `*.example.net` |\n| `{project.name}.example.net` | ✅ | Covered by `*.example.net`, and the placeholder is valid |\n| `my-{project.name}.example.net` | ✅ | Covered by `*.example.net`, and the placeholder is valid |\n| `my-{project.name}-{deployment.id}.example.net` | ✅ | Covered by `*.example.net`, and the placeholders are valid |\n| `foo.example.com` | ❌ | The custom domain `example.com` is registered, but not `foo.example.com` or `*.example.com` |\n| `example.net` | ❌ | Not a subdomain of `*.example.net` |\n| `foo.bar.example.net` | ❌ | Not a subdomain of `*.example.net` |\n| `{project.id}.example.net` | ❌ | The placeholder is not valid |\n\nBesides your custom domains, you can also use `deno.dev` domain without\nthe need to register it. In this case, though, only two formats are\nallowed as follows:\n\n| Domain | Attachable? |\n| ----------------------------------------- | ----------- |\n| `{project.name}.deno.dev` | ✅ |\n| `{project.name}-{deployment.id}.deno.dev` | ✅ |\n| `foo.deno.dev` | ❌ |\n| `my-{project.name}.deno.dev` | ❌ |\n| `{deployment.id}.deno.dev` | ❌ |\n| `{deployment.id}-{project.name}.deno.dev` | ❌ |\n\nLastly, keep in mind that in order for the attached domain to work\nproperly, you also need to set up TLS certificates, either by\n[provisioning a certificate](#post-/domains/-domainId-/certificates/provision)\nor by [uploading a certificate](#post-/domains/-domainId-/certificates).\nThis is not needed for `deno.dev` domains.","required":true,"schema":{"type":"string"},"example":"{project.name}-{deployment.id}.deno.dev"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachDomainResponse"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"delete":{"tags":["deployment"],"summary":"Detach a domain from a deployment","description":"This API disassociates a domain from a deployment. Once this operation is\ncompleted, the deployment will no longer be accessible via that domain.","operationId":"detach_domain_from_deployment","parameters":[{"name":"deploymentId","in":"path","description":"Deployment ID","required":true,"schema":{"$ref":"#/components/schemas/DeploymentId"}},{"name":"domain","in":"path","description":"Domain to detach","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/organizations/{organizationId}/domains":{"get":{"tags":["domain"],"summary":"List domains of an organization","description":"This API returns a list of domains belonging to the specified organization\nin a pagenated manner.\n\nThe URLs for the next, previous, first, and last page are returned in the\n`Link` header of the response, if any.","operationId":"list_domains","parameters":[{"name":"page","in":"query","description":"The page number to return.","required":false,"schema":{"type":"integer","default":1,"nullable":true,"minimum":1}},{"name":"limit","in":"query","description":"The maximum number of items to return per page.","required":false,"schema":{"type":"integer","default":20,"nullable":true,"maximum":100,"minimum":1}},{"name":"q","in":"query","description":"Query by domain","required":false,"schema":{"type":"string","nullable":true}},{"name":"sort","in":"query","description":"The field to sort by, `domain`, `created_at`, or `updated_at`. Defaults to `updated_at`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"order","in":"query","description":"Sort order, either `asc` or `desc`. Defaults to `asc`.","required":false,"schema":{"type":"string","nullable":true}},{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","headers":{"Link":{"schema":{"$ref":"#/components/schemas/PaginationLinkHeader"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"post":{"tags":["domain"],"summary":"Add a domain to an organization","description":"This API allows you to add a new domain to the specified organization.\n\n### Steps to make the added domain available for actual use\n\nIn order to make the added domain available for actual use, you first need\nto verify that you are the owner of the domain by calling\n[the verify ownership of a domain endpoint](#post-/domains/-domainId-/verify)\nafter properly setting up the DNS records for the domain as specified in the\n`dnsRecords` field of the response of this API.\n\nYou then also need to have TLS certificates ready for the domain, either by\n[enabling auto-provision](#post-/domains/-domainId-/certificates/provision)\nor by [uploading them manually](#post-/domains/-domainId-/certificates).","operationId":"create_domain","parameters":[{"name":"organizationId","in":"path","description":"Organization ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/domains/{domainId}":{"get":{"tags":["domain"],"summary":"Get domain details","operationId":"get_domain","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}},"patch":{"tags":["domain"],"summary":"Associate a domain with a deployment","description":"This API allows you to either:\n\n1. associate a domain with a deployment, or\n2. disassociate a domain from a deployment\n\nDomain association is required in order to serve the deployment on the\ndomain.\n\nIf the ownership of the domain is not verified yet, this API will trigger\nthe verification process before associating the domain with the deployment.\n\nThe same functionality is provided by [Attach a domain to a deployment] with\nmore flexibility. Consider using that API instead.\n\n[Attach a domain to a deployment]: #put-/deployments/-deploymentId-/domains/-domain-","operationId":"update_domain_association","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDomainAssociationRequest"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}},"deprecated":true},"delete":{"tags":["domain"],"summary":"Delete a domain","operationId":"delete_domain","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/domains/{domainId}/verify":{"post":{"tags":["domain"],"summary":"Verify ownership of a domain","description":"This API triggers the ownership verification of a domain. It should be\ncalled after necessary DNS records that appear in the `dnsRecords` field\nof the response of [add a domain](#post-/organizations/-organizationId-/domains)\nare set up.\n\n### Domain reactivation\n\nIf a previously vefified domain, owned by the same organization, was deleted\nand then re-added, deployments associated with the domain will become\naccessible via the domain once the verification is successfully completed.\n\nFor example, if the domain `*.example.com` was owned and verified by\n`example-org` and `foo.example.com` was attached to `example-deployment`,\nthe deployment was accessible via `foo.example.com`. However, if the domain\nis deleted from the organization, access to the deployment via\n`foo.example.com` is lost, which we refer to as domain deactivation.\n\nSubsequently, if `*.example.com` (or even `foo.example.com`) is re-added to\nthe organization and verified, the deployment becomes accessible via\n`foo.example.com` again without any further steps, i.e. the domain is\nreactivated.","operationId":"verify_domain","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/domains/{domainId}/certificates":{"post":{"tags":["domain"],"summary":"Upload TLS certificate for a domain","description":"This API allows you to upload a TLS certificate for a domain.\n\nIf the ownership of the domain is not verified yet, this API will trigger\nthe verification process before storing the certificate.","operationId":"add_domain_certificate","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddDomainCertificateRequest"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/domains/{domainId}/certificates/provision":{"post":{"tags":["domain"],"summary":"Provision TLS certificates for a domain","description":"This API begins the provisioning of TLS certificates for a domain.\n\nNote that a call to this API may take a while, up to a minute or so.\n\nIf the ownership of the domain is not verified yet, this API will trigger\nthe verification process before provisioning the certificate.","operationId":"provision_domain_certificates","parameters":[{"name":"domainId","in":"path","description":"Domain ID","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}}},"components":{"schemas":{"AddDomainCertificateRequest":{"type":"object","required":["privateKey","certificateChain"],"properties":{"privateKey":{"type":"string","description":"The PEM encoded private key for the TLS certificate","example":"-----BEGIN EC PRIVATE KEY-----\nfoobar\n-----END EC PRIVATE KEY-----\n"},"certificateChain":{"type":"string","description":"The PRM encoded certificate chain for the TLS certificate","example":"-----BEGIN CERTIFICATE-----\nfoobar\n-----END CERTIFICATE-----\n"}},"additionalProperties":false},"Analytics":{"type":"object","description":"Project analytics data","required":["fields","values"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsFieldSchema"}},"values":{"type":"array","items":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsDataValue"}}}},"additionalProperties":false,"example":{"fields":[{"name":"time","type":"time"},{"name":"requestCount","type":"number"},{"name":"cpuSeconds","type":"number"},{"name":"uptimeSeconds","type":"number"},{"name":"maxRssMemoryBytes","type":"number"},{"name":"networkIngressBytes","type":"number"},{"name":"networkEgressBytes","type":"number"},{"name":"kvReadCount","type":"number"},{"name":"kvWriteCount","type":"number"},{"name":"kvReadUnits","type":"number"},{"name":"kvWriteUnits","type":"number"},{"name":"kvStorageBytes","type":"number"}],"values":[["2023-08-01T00:00:00Z",111,111,111,111,111,111,111,111,111,111,111],["2023-08-01T00:15:00Z",222,222,222,222,222,222,222,222,222,222,222],["2023-08-01T00:30:00Z",333,333,333,333,333,333,333,333,333,333,333],["2023-08-01T00:45:00Z",444,444,444,444,444,444,444,444,444,444,444],["2023-08-01T01:00:00Z",555,555,555,555,555,555,555,555,555,555,555]]}},"AnalyticsDataValue":{"oneOf":[{"type":"string","format":"date-time"},{"type":"number","format":"double"},{"type":"string"},{"type":"boolean"},{}]},"AnalyticsFieldSchema":{"type":"object","required":["name","type"],"properties":{"name":{"type":"string"},"type":{"$ref":"#/components/schemas/AnalyticsFieldType"}},"additionalProperties":false},"AnalyticsFieldType":{"type":"string","description":"A data type that analytic data can be represented in.\n\nInspired by Grafana's data types defined at:\nhttps://github.com/grafana/grafana/blob/e3288834b37b9aac10c1f43f0e621b35874c1f8a/packages/grafana-data/src/types/dataFrame.ts#L11-L23","enum":["time","number","string","boolean","other"]},"AppLogsResponseEntry":{"type":"object","required":["time","level","message","region"],"properties":{"time":{"type":"string","format":"date-time","description":"Log timestamp","example":"2021-08-01T00:00:00Z"},"level":{"$ref":"#/components/schemas/LogLevel"},"message":{"type":"string","example":"log message"},"region":{"$ref":"#/components/schemas/Region"}},"additionalProperties":false},"Asset":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/File"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["file"]}}}]},{"allOf":[{"$ref":"#/components/schemas/Symlink"},{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["symlink"]}}}]}],"discriminator":{"propertyName":"kind"}},"Assets":{"type":"object","description":"A map whose key represents a file path, and the value is an asset that\ncomposes the deployment.\n\nEach asset is one of the following three kinds:\n\n1. A file with content data (which is UTF-8 for text, or base64 for binary)\n2. A file with a hash\n3. A symbolic link to another asset\n\nAssets that were uploaded in some of the previous deployments don't need to\nbe uploaded again. In this case, in order to identify the asset, just\nprovide the SHA-1 hash of the content.","additionalProperties":{"$ref":"#/components/schemas/Asset"}},"AttachDomainResponse":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"The domain that was attached to the deployment with placeholders resolved.","example":"myproject-mydeployment.deno.dev"}}},"AttachableDomain":{"type":"string","description":"Domain name to attach to the deployment.\n\nTwo placeholders can be used in the domain name, which will be substituted\naccordingly:\n\n- `{project.name}`: The name of the project.\n- `{deployment.id}`: The ID of the deployment.\n\nThe domain name you specify here must be either equal to one of the custom\ndomains you have registered, or a subdomain of one of the wildcard domains\nyou have registered. Let's say you have registered `example.com` and\n`*.example.net` as custom domains via [add a domain](#post-/organizations/-organizationId-/domains)\nendpoint and set DNS records needed to verify you are the owner of these. In\nthis case, the following table shows what domains are attachable and why:\n\n| Domain | Attachable? | Comment |\n| ----------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------- |\n| `example.com` | ✅ | Exactly matches the registered custom domain `example.com` |\n| `foo.example.net` | ✅ | Covered by `*.example.net` |\n| `*.example.net` | ✅ | Exactly matches the registered custom domain `*.example.net` |\n| `{project.name}.example.net` | ✅ | Covered by `*.example.net`, and the placeholder is valid |\n| `my-{project.name}.example.net` | ✅ | Covered by `*.example.net`, and the placeholder is valid |\n| `my-{project.name}-{deployment.id}.example.net` | ✅ | Covered by `*.example.net`, and the placeholders are valid |\n| `foo.example.com` | ❌ | The custom domain `example.com` is registered, but not `foo.example.com` or `*.example.com` |\n| `example.net` | ❌ | Not a subdomain of `*.example.net` |\n| `foo.bar.example.net` | ❌ | Not a subdomain of `*.example.net` |\n| `{project.id}.example.net` | ❌ | The placeholder is not valid |\n\nBesides your custom domains, you can also use `deno.dev` domain without\nthe need to register it. In this case, though, only two formats are\nallowed as follows:\n\n| Domain | Attachable? |\n| ----------------------------------------- | ----------- |\n| `{project.name}.deno.dev` | ✅ |\n| `{project.name}-{deployment.id}.deno.dev` | ✅ |\n| `foo.deno.dev` | ❌ |\n| `my-{project.name}.deno.dev` | ❌ |\n| `{deployment.id}.deno.dev` | ❌ |\n| `{deployment.id}-{project.name}.deno.dev` | ❌ |\n\nLastly, keep in mind that in order for the attached domain to work\nproperly, you also need to set up TLS certificates, either by\n[provisioning a certificate](#post-/domains/-domainId-/certificates/provision)\nor by [uploading a certificate](#post-/domains/-domainId-/certificates).\nThis is not needed for `deno.dev` domains."},"BuildLogsResponseEntry":{"type":"object","required":["level","message"],"properties":{"level":{"type":"string","example":"info"},"message":{"type":"string","example":"Downloaded https://deno.land/[email protected]/testing/asserts.ts (2/3)"}},"additionalProperties":false},"CompilerOptions":{"type":"object","description":"Compiler options to be used when building the deployment.\n\nIf `null` is given, Deno's config file (i.e. `deno.json` or `deno.jsonc`)\nwill be auto-discovered, which may contain a `compilerOptions` field. If\nfound, that compiler options will be applied.\n\nIf an empty object `{}` is given, [the default compiler options](https://docs.deno.com/runtime/manual/advanced/typescript/configuration#how-deno-uses-a-configuration-file)\nwill be applied.","properties":{"experimentalDecorators":{"type":"boolean","description":"Whether to enable TypeScript's experimental decorators. If set to `false`,\nECMAScript decorators will be enabled instead.\n\nIf omitted, this field will be interpreted as `false`.\n\nIf the code being deployed uses any kind of decorators, this field must be\nset. Otherwise, the build process will fail.","nullable":true},"emitDecoratorMetadata":{"type":"boolean","description":"Whether to emit experimental decorator meta data when emitting a\nTypeScript's experimental decorator.\n\nThis is effective only when `experimentalDecorators` is set to `true`.\n\nIf omitted, this field will be interpreted as `false`.","nullable":true},"jsx":{"type":"string","nullable":true},"jsxFactory":{"type":"string","nullable":true},"jsxFragmentFactory":{"type":"string","nullable":true},"jsxImportSource":{"type":"string","nullable":true},"jsxPrecompileSkipElements":{"type":"array","items":{"type":"string"},"nullable":true}},"additionalProperties":false},"CreateDeploymentRequest":{"type":"object","required":["entryPointUrl","assets","envVars"],"properties":{"entryPointUrl":{"type":"string","description":"An URL of the entry point of the application.\nThis is the file that will be executed when the deployment is invoked."},"importMapUrl":{"type":"string","description":"An URL of the import map file.\n\nIf `null` is given, import map auto-discovery logic will be performed,\nwhere it looks for Deno's config file (i.e. `deno.json` or `deno.jsonc`)\nwhich may contain an embedded import map or a path to an import map file.\nIf found, that import map will be used.\n\nIf an empty string is given, no import map will be used.","nullable":true},"lockFileUrl":{"type":"string","description":"An URL of the lock file.\n\nIf `null` is given, lock file auto-discovery logic will be performed,\nwhere it looks for Deno's config file (i.e. `deno.json` or `deno.jsonc`)\nwhich may contain a path to a lock file or boolean value, such as `\"lock\":\nfalse` or `\"lock\": \"my-lock.lock\"`. If a config file is found, the\nsemantics of the lock field is the same as the Deno CLI, so refer to [the\nCLI doc page](https://docs.deno.com/runtime/manual/basics/modules/integrity_checking#auto-generated-lockfile).\n\nIf an empty string is given, no lock file will be used.","nullable":true},"compilerOptions":{"allOf":[{"$ref":"#/components/schemas/CompilerOptions"}],"nullable":true},"assets":{"$ref":"#/components/schemas/Assets"},"domains":{"type":"array","items":{"$ref":"#/components/schemas/AttachableDomain"},"description":"A list of domains that will be attached to the deployment once it's\nsuccessfully deployed.\n\nIf this field is omitted or `null` is provided, the default domain will be\nattached to the deployment, which looks like `projectname-deploymentid.deno.dev`.\n\nIf an empty list is provided, no domain will be attached to the deployment.\nIn this case, the default one will not get attached either.\n\nIf a list is provided, only the domains in the list will be attached, but\nthe default domain will not.","nullable":true},"envVars":{"type":"object","description":"A dictionary of environment variables to be set in the runtime environment\nof the deployment.","additionalProperties":{"type":"string"}},"databases":{"type":"object","description":"KV database ID mappings to associate with the deployment.\n\nA key represents a KV database name (e.g. `\"default\"`), and a value is a\nKV database ID.\n\nCurrently, only `\"default\"` database is supported. If any other database\nname is specified, that will be rejected.\n\nIf not provided, the deployment will be created with no KV database\nattached.","additionalProperties":{"type":"string","format":"uuid"},"nullable":true},"requestTimeout":{"type":"integer","format":"int32","description":"The wall-clock timeout in milliseconds for requests to the deployment.\n\nIf not provided, the system default value will be used.","example":10000,"nullable":true,"minimum":1},"permissions":{"allOf":[{"$ref":"#/components/schemas/DeploymentPermissions"}],"nullable":true},"description":{"type":"string","description":"A description of the created deployment. If not provided, an empty string\nwill be set.","nullable":true,"maxLength":1000}},"additionalProperties":false,"example":{"entryPointUrl":"main.ts","importMapUrl":null,"lockFileUrl":null,"compilerOptions":null,"assets":{"main.ts":{"kind":"file","content":"Deno.serve((req: Request) => new Response(\"Hello World\"));\n","encoding":"utf-8"},"images/cat1.png":{"kind":"file","content":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk","encoding":"base64"},"images/cat2.png":{"kind":"file","gitSha1":"5c4f8729e5c30a91a890e24d7285e89f418c637b"},"symlink.png":{"kind":"symlink","target":"images/cat1.png"}},"domains":["{project.name}-{deployment.id}.deno.dev","{project.name}.deno.dev","foo.example.com"],"envVars":{"MY_ENV":"hey"},"databases":{"default":"5b484959-cba2-482d-95ab-ba592784af80"},"requestTimeout":10000,"permissions":{"net":["example.com","34.120.54.55","[2600:1901:0:6d85::]","*"]},"description":"My first deployment"}},"CreateDomainRequest":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"foo.example.com"}},"additionalProperties":false},"CreateKvDatabaseRequest":{"type":"object","properties":{"description":{"type":"string","description":"The description of the KV database. If this is `null`, an empty string\nwill be set.","example":"My KV database","nullable":true,"maxLength":1000}},"additionalProperties":false},"CreateProjectRequest":{"type":"object","properties":{"name":{"type":"string","description":"The name of the project. This must be globally unique. If this is `null`,\na random unique name will be generated.","example":"my-project","nullable":true},"description":{"type":"string","description":"The description of the project. If this is `null`, an empty string will be\nset.","example":"This is my project.","nullable":true,"maxLength":1000}},"additionalProperties":false},"CursorLinkHeader":{"type":"string","description":"Pagination links.\nThis header provides a URL for the `next` page.\nThe format conforms to [RFC 8288](https://tools.ietf.org/html/rfc8288).","example":"; rel=\"next\""},"Deployment":{"type":"object","required":["id","projectId","status","databases","createdAt","updatedAt"],"properties":{"id":{"$ref":"#/components/schemas/DeploymentId"},"projectId":{"type":"string","format":"uuid","example":"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"},"description":{"type":"string","description":"The description of this deployment. This is present only when the `status`\nis `success`.","example":"My deployment","nullable":true},"status":{"$ref":"#/components/schemas/DeploymentStatus"},"domains":{"type":"array","items":{"type":"string"},"example":["example.com"],"nullable":true},"databases":{"type":"object","description":"The KV databases that this deployment has access to.\nCurrently, only `\"default\"` database is supported.","additionalProperties":{"type":"string","format":"uuid"},"example":{"default":"5b484959-cba2-482d-95ab-ba592784af80"}},"requestTimeout":{"type":"integer","format":"int32","description":"The wall-clock timeout in milliseconds for requests to the deployment.\n\nThis becomes `null` when no timeout is set, or the deployment has not been\ndone successfully yet.","example":10000,"nullable":true,"minimum":1},"permissions":{"allOf":[{"$ref":"#/components/schemas/DeploymentPermissions"}],"nullable":true},"createdAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"updatedAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"}},"additionalProperties":false},"DeploymentId":{"type":"string","description":"A deployment ID\n\nNote that this is not UUID v4, as opposed to organization ID and project ID.","example":"abcde12vwxyz"},"DeploymentPermissions":{"type":"object","description":"Permissions to be set for the deployment.\n\nCurrently only `net` is supported, where you can specify a list of IP\naddresses and/or hostnames that the deployment is allowed to make outbound\nnetwork requests to.","properties":{"net":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses that the deployment is allowed to make outbound\nnetwork requests to.\n\nEach element must be a valid IPv4, IPv6, or a hostname like `example.com`\nalthough outbound network requests using IPv6 are not supported yet in\nDeno Deploy regardless.\nIn addition to these, a special value `*` can be used, which means all\naccesses are allowed. Also note the following:\n\n- If omitted, all accesses will be allowed.\n- If an empty list is provided, all accesses will be **denied**.","example":["example.com","34.120.54.55","[2600:1901:0:6d85::]","*"],"nullable":true}},"additionalProperties":false},"DeploymentPermissionsOverwrite":{"type":"object","description":"Permissions to be overwritten for the deployment's existing permissions.\n\nCurrently only `net` is supported, where you can specify a list of IP\naddresses and/or hostnames that the deployment is allowed to make outbound\nnetwork requests to.","properties":{"net":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses that the deployment is allowed to make outbound\nnetwork requests to.\n\nEach element must be a valid IPv4, IPv6, or a hostname like `example.com`\nalthough outbound network requests using IPv6 are not supported yet in\nDeno Deploy regardless.\nIn addition to these, a special value `*` can be used, which means all\naccesses are allowed. Also note the following:\n\n- If omitted, no update will happen to the existing permissions.\n- If an empty list is provided, all accesses will be **denied**.","example":["example.com","34.120.54.55","[2600:1901:0:6d85::]","*"],"nullable":true}},"additionalProperties":false},"DeploymentStatus":{"type":"string","description":"The status of a deployment.","enum":["failed","pending","success"],"example":"success"},"DisableKvDatabaseBackupResponse":{"type":"object"},"DnsRecord":{"type":"object","required":["type","name","content"],"properties":{"type":{"type":"string","example":"A"},"name":{"type":"string","example":"deploy-sample"},"content":{"type":"string","example":"127.0.0.1"}},"additionalProperties":false},"Domain":{"type":"object","required":["id","organizationId","domain","token","isValidated","certificates","provisioningStatus","createdAt","updatedAt","dnsRecords"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID of the domain."},"organizationId":{"type":"string","format":"uuid","description":"The ID of the organization that the domain is associated with."},"domain":{"type":"string","description":"The domain value.","example":"example.com"},"token":{"type":"string","example":"b7e28147130005f5593d09e6"},"isValidated":{"type":"boolean","description":"Whether the domain's ownership is validated or not."},"certificates":{"type":"array","items":{"$ref":"#/components/schemas/DomainCertificate"},"description":"TLS certificates for the domain."},"provisioningStatus":{"$ref":"#/components/schemas/ProvisioningStatus"},"projectId":{"type":"string","format":"uuid","description":"The ID of the project that the domain is associated with.\n\nIf the domain is not associated with any project, this field is omitted.","nullable":true},"deploymentId":{"allOf":[{"$ref":"#/components/schemas/DeploymentId"}],"nullable":true},"createdAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"updatedAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"dnsRecords":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"},"description":"These records are used to verify the ownership of the domain."}},"additionalProperties":false},"DomainCertificate":{"type":"object","required":["cipher","expiresAt","createdAt","updatedAt"],"properties":{"cipher":{"$ref":"#/components/schemas/TlsCipher"},"expiresAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"createdAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"updatedAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"}},"additionalProperties":false},"EnableKvDatabaseBackupRequest":{"oneOf":[{"type":"object","required":["endpoint","bucketName","bucketRegion","accessKeyId","secretAccessKey","kind"],"properties":{"endpoint":{"type":"string","description":"S3 endpoint URL\n\nAllowed endpoints as of now are:\n- https://s3.us-east-1.amazonaws.com\n- https://s3.us-east-2.amazonaws.com\n- https://s3.us-west-1.amazonaws.com\n- https://s3.us-west-2.amazonaws.com\n- https://s3.us-gov-west-1.amazonaws.com\n- https://s3.us-gov-east-1.amazonaws.com\n- https://s3.ca-central-1.amazonaws.com\n- https://s3.eu-north-1.amazonaws.com\n- https://s3.eu-west-1.amazonaws.com\n- https://s3.eu-west-2.amazonaws.com\n- https://s3.eu-west-3.amazonaws.com\n- https://s3.eu-central-1.amazonaws.com\n- https://s3.eu-south-1.amazonaws.com\n- https://s3.af-south-1.amazonaws.com\n- https://s3.ap-northeast-1.amazonaws.com\n- https://s3.ap-northeast-2.amazonaws.com\n- https://s3.ap-northeast-3.amazonaws.com\n- https://s3.ap-southeast-1.amazonaws.com\n- https://s3.ap-southeast-2.amazonaws.com\n- https://s3.ap-southeast-3.amazonaws.com\n- https://s3.ap-east-1.amazonaws.com\n- https://s3.ap-south-1.amazonaws.com\n- https://s3.sa-east-1.amazonaws.com\n- https://s3.me-south-1.amazonaws.com\n- https://s3.cn-north-1.amazonaws.com\n- https://s3.cn-northwest-1.amazonaws.com\n- https://storage.googleapis.com\n\nIf you want to use a different endpoint, please contact us.","example":"https://s3.us-east-1.amazonaws.com"},"bucketName":{"type":"string","description":"S3 bucket name","example":"my-bucket"},"bucketRegion":{"type":"string","description":"S3 bucket region","example":"us-east-1"},"accessKeyId":{"type":"string","description":"Access key ID","example":"AKIAIOSFODNN7EXAMPLE"},"secretAccessKey":{"type":"string","description":"Secret access key","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"prefix":{"type":"string","description":"Prefix to prepend to all keys when accessing the S3 bucket","example":"backup/"},"kind":{"type":"string","enum":["s3"]}}}],"discriminator":{"propertyName":"kind"}},"EnableKvDatabaseBackupResponse":{"type":"object","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}}},"Encoding":{"type":"string","enum":["utf-8","base64"]},"ErrorBody":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"The error code"},"message":{"type":"string","description":"The error message"}}},"File":{"oneOf":[{"type":"object","required":["content"],"properties":{"content":{"type":"string"},"encoding":{"$ref":"#/components/schemas/Encoding"}}},{"type":"object","required":["gitSha1"],"properties":{"gitSha1":{"type":"string"}}}]},"KvDatabase":{"type":"object","required":["id","organizationId","description","updatedAt","createdAt"],"properties":{"id":{"type":"string","format":"uuid","description":"A KV database ID"},"organizationId":{"type":"string","format":"uuid","description":"An organization ID that this KV database belongs to"},"description":{"type":"string","description":"A description of this KV database"},"updatedAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"createdAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"}},"additionalProperties":false},"KvDatabaseBackup":{"allOf":[{"$ref":"#/components/schemas/KvDatabaseBackupTarget"},{"type":"object","required":["id","status"],"properties":{"id":{"type":"string","format":"uuid","description":"The ID of the backup"},"status":{"$ref":"#/components/schemas/KvDatabaseBackupStatus"}}}]},"KvDatabaseBackupStatus":{"oneOf":[{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["pending"]}}},{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["active"]}}},{"type":"object","description":"An error occurred during the backup operation. One example is when the\nprovided S3 credentials are not correct.\n\nIf this status is set, the backup has failed permanently and needs to be\nreconfigured by deleting and creating a new one using [disable a database backup](#delete-/database_backups/-databaseBackupId-)\nand [enable a database backup](#post-/databases/-databaseId-/database_backups).","required":["message","code"],"properties":{"message":{"type":"string","description":"The detailed error message","example":"this is an error message."},"code":{"type":"string","enum":["failed"]}}}],"description":"The status of a KV database backup.","example":{"code":"active"},"discriminator":{"propertyName":"code"}},"KvDatabaseBackupTarget":{"oneOf":[{"type":"object","required":["endpoint","bucketName","bucketRegion","accessKeyId","prefix","kind"],"properties":{"endpoint":{"type":"string","description":"S3 endpoint URL","example":"https://s3.us-east-1.amazonaws.com"},"bucketName":{"type":"string","description":"S3 bucket name","example":"my-bucket"},"bucketRegion":{"type":"string","description":"S3 bucket region","example":"us-east-1"},"accessKeyId":{"type":"string","description":"Access key ID","example":"AKIAIOSFODNN7EXAMPLE"},"prefix":{"type":"string","description":"Prefix to prepend to all keys when accessing the S3 bucket","example":"backup/"},"kind":{"type":"string","enum":["s3"]}}}],"discriminator":{"propertyName":"kind"}},"LogLevel":{"type":"string","enum":["error","warning","info","debug"]},"Organization":{"type":"object","required":["id","name","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"additionalProperties":false,"example":{"id":"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11","name":"my-org","createdAt":"2021-08-01T00:00:00Z","updatedAt":"2021-08-01T00:00:00Z"}},"PaginationLinkHeader":{"type":"string","description":"Pagination links.\nThis header provides URLS for the `prev`, `next`, `first`, and `last` pages.\nThe format conforms to [RFC 8288](https://tools.ietf.org/html/rfc8288).","example":"; rel=\"next\", ; rel=\"prev\", ; rel=\"first\", ; rel=\"last\""},"Project":{"type":"object","required":["id","name","description","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid","example":"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"},"name":{"type":"string","example":"my-project"},"description":{"type":"string","example":"this is my project.","maxLength":1000},"createdAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"},"updatedAt":{"type":"string","format":"date-time","example":"2021-08-01T00:00:00Z"}},"additionalProperties":false},"ProvisioningStatus":{"oneOf":[{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["success"]}}},{"type":"object","required":["message","code"],"properties":{"message":{"type":"string"},"code":{"type":"string","enum":["failed"]}}},{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["pending"]}}},{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["manual"]}}}],"discriminator":{"propertyName":"code"}},"RedeployRequest":{"type":"object","properties":{"envVars":{"type":"object","description":"A dictionary of environment variables to be set in the runtime environment\nof the deployment.\n\nThe provided environment variables will be _merged_ with the existing one.\nFor example, if the existing environment variables are:\n\n```json\n{\n\"a\": \"alice\",\n\"b\": \"bob\"\n\"c\": \"charlie\"\n}\n```\n\nand you pass the following environment variables in your redeploy request:\n\n```json\n{\n\"a\": \"alice2\",\n\"b\": null,\n\"d\": \"david\"\n}\n```\n\nthen the result will be:\n\n```json\n{\n\"a\": \"alice2\",\n\"c\": \"charlie\",\n\"d\": \"david\"\n}\n```\n\nIf `envVars` itself is not provided, no update will happen to the\nexisting environment variables.\n\nFor a historical reason, `env_vars` is also accepted as well as `envVars`,\nalthough `env_vars` is deprecated.","additionalProperties":{"type":"string","nullable":true},"example":{"MY_ENV":"hey","ENV_TO_BE_DELETED":null},"nullable":true},"databases":{"type":"object","description":"KV database ID mappings to associate with the deployment.\n\nA key represents a KV database name (e.g. `\"default\"`), and a value is a\nKV database ID.\n\nCurrently, only `\"default\"` database is supported. If any other database\nname is specified, that will be rejected.\n\nThe provided KV database mappings will be _merged_ with the existing one,\njust like `env_vars`.\n\nIf `databases` itself is not provided, no update will happen to the\nexisting KV database mappings.","additionalProperties":{"type":"string","format":"uuid","nullable":true},"example":{"default":"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"},"nullable":true},"requestTimeout":{"type":"integer","format":"int32","description":"The wall-clock timeout in milliseconds for requests to the deployment.\n\nIf not provided, no update will happen to the existing request timeout.","example":10000,"nullable":true,"minimum":1},"permissions":{"allOf":[{"$ref":"#/components/schemas/DeploymentPermissionsOverwrite"}],"nullable":true},"description":{"type":"string","description":"A description of the created deployment. If not provided, no update will\nhappen to the description.","example":"Updated description","nullable":true}},"additionalProperties":false},"Region":{"type":"string","enum":["gcp-asia-east1","gcp-asia-east2","gcp-asia-northeast1","gcp-asia-northeast2","gcp-asia-northeast3","gcp-asia-south1","gcp-asia-south2","gcp-asia-southeast1","gcp-asia-southeast2","gcp-australia-southeast1","gcp-australia-southeast2","gcp-europe-central2","gcp-europe-north1","gcp-europe-southwest1","gcp-europe-west1","gcp-europe-west2","gcp-europe-west3","gcp-europe-west4","gcp-europe-west6","gcp-europe-west8","gcp-me-west1","gcp-northamerica-northeast1","gcp-northamerica-northeast2","gcp-southamerica-east1","gcp-southamerica-west1","gcp-us-central1","gcp-us-east1","gcp-us-east4","gcp-us-east5","gcp-us-south1","gcp-us-west1","gcp-us-west2","gcp-us-west3","gcp-us-west4"]},"Symlink":{"type":"object","required":["target"],"properties":{"target":{"type":"string"}},"additionalProperties":false},"TlsCipher":{"type":"string","enum":["rsa","ec"]},"UpdateDomainAssociationRequest":{"type":"object","properties":{"deploymentId":{"allOf":[{"$ref":"#/components/schemas/DeploymentId"}],"nullable":true}},"additionalProperties":false},"UpdateKvDatabaseRequest":{"type":"object","properties":{"description":{"type":"string","description":"The description of the KV database to be updated to. If this is `null`, no\nupdate will be made to the KV database description.","example":"My KV database","nullable":true,"maxLength":1000}},"additionalProperties":false},"UpdateProjectRequest":{"type":"object","properties":{"name":{"type":"string","description":"The name of the project to be updated to. This must be globally unique.\nIf this is `null`, no update will be made to the project name.","example":"my-project2","nullable":true},"description":{"type":"string","description":"The description of the project to be updated to. If this is `null`, no\nupdate will be made to the project description.","example":"This is my project2.","nullable":true,"maxLength":1000}},"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"The request is authorized by a token issued to the user or organization.\nThe token is sent in a header that looks like this: `Authorization:\nBearer {token}`, for example: `Authorization: Bearer\nddw_AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrS`."}}},"security":[{"bearerAuth":[]}],"tags":[{"name":"database","description":"Operations about databases"},{"name":"databaseBackup","description":"Operations about database backups"},{"name":"deployment","description":"Operations about deployments"},{"name":"domain","description":"Operations about domains"},{"name":"organization","description":"Operations about organizations"},{"name":"project","description":"Operations about projects"}]}