openapi: 3.1.0
info:
title: Deno Deploy REST API
description: >-
The Deno Deploy REST API (v1) provides programmatic access to manage projects
and deployments on the Deno Deploy serverless edge platform. It exposes endpoints
for creating and managing organizations, projects, deployments, domains, and KV
databases, as well as retrieving analytics and usage metrics. Authentication uses
HTTP Bearer tokens generated from the Deno Deploy dashboard. This v1 API is
scheduled for sunset on July 20, 2026; users should migrate to the v2 API.
version: '1.0'
contact:
name: Deno Deploy Support
url: https://deno.com/deploy
termsOfService: https://deno.com/deploy/terms
externalDocs:
description: Deno Deploy REST API Documentation
url: https://docs.deno.com/deploy/api/rest/
servers:
- url: https://api.deno.com/v1
description: Deno Deploy Production API
tags:
- name: Deployments
description: Create, list, retrieve, redeploy, and delete deployments; access build and app logs
- name: Domains
description: Register and manage custom domains with TLS certificate support
- name: KV Databases
description: Create and manage Deno KV databases and backups
- name: Organizations
description: Retrieve organization details and analytics
- name: Projects
description: Create, list, update, and delete Deploy projects
security:
- bearerAuth: []
paths:
/organizations/{organizationId}:
get:
operationId: getOrganization
summary: Get organization
description: >-
Retrieves the details of an organization by its UUID. Organizations are
the top-level billing and access-control containers on Deno Deploy.
tags:
- Organizations
parameters:
- $ref: '#/components/parameters/organizationId'
responses:
'200':
description: Organization retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Organization'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations/{organizationId}/analytics:
get:
operationId: getOrganizationAnalytics
summary: Get organization analytics
description: >-
Returns time-series analytics data for an organization in 15-minute
intervals. The time range is limited to a maximum of 24 hours and must
be specified using RFC 3339 timestamps.
tags:
- Organizations
parameters:
- $ref: '#/components/parameters/organizationId'
- name: since
in: query
required: true
description: Start of the analytics time range in RFC 3339 format
schema:
type: string
format: date-time
- name: until
in: query
required: true
description: End of the analytics time range in RFC 3339 format
schema:
type: string
format: date-time
responses:
'200':
description: Analytics data retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Analytics'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations/{organizationId}/projects:
get:
operationId: listProjects
summary: List projects
description: >-
Returns a paginated list of all projects belonging to the specified
organization. Supports filtering by name and sorting by various fields.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/q'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/order'
responses:
'200':
description: Projects listed successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createProject
summary: Create project
description: >-
Creates a new project within the specified organization. Projects are
containers for deployments on Deno Deploy, and each project can have
multiple deployments across its lifecycle.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/organizationId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProjectRequest'
responses:
'200':
description: Project created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/projects/{projectId}:
get:
operationId: getProject
summary: Get project
description: >-
Retrieves the details of a specific project by its UUID, including its
name, associated organization, and current configuration.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/projectId'
responses:
'200':
description: Project retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateProject
summary: Update project
description: >-
Updates mutable fields of an existing project such as its name.
Only the fields present in the request body are modified.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/projectId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProjectRequest'
responses:
'200':
description: Project updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteProject
summary: Delete project
description: >-
Permanently deletes a project and all of its deployments. This
operation cannot be undone.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/projectId'
responses:
'200':
description: Project deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/projects/{projectId}/analytics:
get:
operationId: getProjectAnalytics
summary: Get project analytics
description: >-
Returns time-series analytics data for a specific project in 15-minute
intervals. The time range is limited to a maximum of 24 hours and must
be specified using RFC 3339 timestamps.
tags:
- Projects
parameters:
- $ref: '#/components/parameters/projectId'
- name: since
in: query
required: true
description: Start of the analytics time range in RFC 3339 format
schema:
type: string
format: date-time
- name: until
in: query
required: true
description: End of the analytics time range in RFC 3339 format
schema:
type: string
format: date-time
responses:
'200':
description: Analytics data retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Analytics'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/projects/{projectId}/deployments:
get:
operationId: listDeployments
summary: List deployments
description: >-
Returns a paginated list of all deployments for a project. Supports
filtering by deployment ID prefix and sorting by creation date.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/projectId'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/q'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/order'
responses:
'200':
description: Deployments listed successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Deployment'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createDeployment
summary: Create deployment
description: >-
Creates a new deployment for the specified project. A deployment
consists of assets (code and static files), environment variables,
compiler options, and optional KV database associations. Assets support
UTF-8 text, base64-encoded binary, git SHA-1 references, and symlinks.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/projectId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDeploymentRequest'
responses:
'200':
description: Deployment created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/deployments/{deploymentId}:
get:
operationId: getDeployment
summary: Get deployment
description: >-
Retrieves the details of a specific deployment by its ID, including
its status, associated project, domains, environment variables, and
configuration.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/deploymentId'
responses:
'200':
description: Deployment retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteDeployment
summary: Delete deployment
description: >-
Permanently deletes a specific deployment. Active deployments serving
traffic cannot be deleted until domains are detached.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/deploymentId'
responses:
'200':
description: Deployment deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/deployments/{deploymentId}/redeploy:
post:
operationId: redeployDeployment
summary: Redeploy deployment
description: >-
Creates a new deployment based on an existing one, optionally overriding
environment variables and KV database associations. Environment variables
support merge semantics so only specified keys are modified.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/deploymentId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/RedeployRequest'
responses:
'200':
description: Redeployment created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/deployments/{deploymentId}/build_logs:
get:
operationId: getBuildLogs
summary: Get build logs
description: >-
Retrieves the build logs for a deployment. Logs are returned as either
a JSON array or newline-delimited JSON (NDJSON) depending on the Accept
header. Build logs capture output from the deployment build process.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/deploymentId'
responses:
'200':
description: Build logs retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BuildLogEntry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/deployments/{deploymentId}/app_logs:
get:
operationId: getAppLogs
summary: Get application logs
description: >-
Retrieves or streams runtime application logs for a deployment. Supports
filtering by log level, region, time range, and full-text search query.
Cursor-based pagination is supported for large result sets. When no
until parameter is specified, the endpoint streams logs in real time.
tags:
- Deployments
parameters:
- $ref: '#/components/parameters/deploymentId'
- name: q
in: query
description: Full-text search query to filter log messages
schema:
type: string
- name: level
in: query
description: Filter logs by severity level
schema:
type: string
enum: [debug, info, warning, error]
- name: region
in: query
description: Filter logs by the deployment region that emitted them
schema:
type: string
- name: since
in: query
description: Return logs after this RFC 3339 timestamp
schema:
type: string
format: date-time
- name: until
in: query
description: Return logs before this RFC 3339 timestamp; omit to stream
schema:
type: string
format: date-time
- name: limit
in: query
description: Maximum number of log entries to return
schema:
type: integer
minimum: 1
maximum: 300
- name: sort
in: query
description: Field to sort results by
schema:
type: string
- name: order
in: query
description: Sort direction
schema:
type: string
enum: [asc, desc]
- name: cursor
in: query
description: Pagination cursor from a previous response Link header
schema:
type: string
responses:
'200':
description: Application logs retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AppLogEntry'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/deployments/{deploymentId}/domains/{domain}:
put:
operationId: attachDomainToDeployment
summary: Attach domain to deployment
description: >-
Associates a custom domain with a specific deployment, routing all
traffic for that domain to the deployment. The domain must already
be registered and verified in the organization.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/deploymentId'
- name: domain
in: path
required: true
description: The custom domain name to attach
schema:
type: string
responses:
'200':
description: Domain attached successfully
content:
application/json:
schema:
$ref: '#/components/schemas/AttachDomainResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: detachDomainFromDeployment
summary: Detach domain from deployment
description: >-
Removes the association between a custom domain and a deployment.
After detachment, the domain no longer routes traffic to this
deployment and can be attached to a different deployment.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/deploymentId'
- name: domain
in: path
required: true
description: The custom domain name to detach
schema:
type: string
responses:
'200':
description: Domain detached successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations/{organizationId}/domains:
get:
operationId: listDomains
summary: List domains
description: >-
Returns a paginated list of all custom domains registered within
an organization. Includes verification status and TLS certificate
information for each domain.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/q'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/order'
responses:
'200':
description: Domains listed successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Domain'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createDomain
summary: Create domain
description: >-
Registers a new custom domain within the organization. After creation,
the domain must be verified via DNS before it can be attached to
deployments. TLS certificates can be uploaded or automatically
provisioned after verification.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/organizationId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDomainRequest'
responses:
'200':
description: Domain created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/domains/{domainId}:
get:
operationId: getDomain
summary: Get domain
description: >-
Retrieves the details of a specific custom domain by its UUID,
including its verification status, TLS certificate state, and
current deployment association.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/domainId'
responses:
'200':
description: Domain retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Domain'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteDomain
summary: Delete domain
description: >-
Permanently removes a custom domain from the organization. Any
active deployment associations must be detached before the domain
can be deleted.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/domainId'
responses:
'200':
description: Domain deleted successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/domains/{domainId}/verify:
post:
operationId: verifyDomain
summary: Verify domain ownership
description: >-
Triggers DNS-based verification for a custom domain. Deno Deploy checks
for the presence of a DNS TXT record to confirm domain ownership before
allowing the domain to serve traffic.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/domainId'
responses:
'200':
description: Domain verification initiated successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/domains/{domainId}/certificates:
post:
operationId: addDomainCertificate
summary: Upload TLS certificate
description: >-
Uploads a custom TLS certificate and private key for a domain.
The certificate must be valid for the domain and signed by a
trusted certificate authority. Alternatively, certificates can
be automatically provisioned via Let's Encrypt.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/domainId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddDomainCertificateRequest'
responses:
'200':
description: Certificate uploaded successfully
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/domains/{domainId}/certificates/provision:
post:
operationId: provisionDomainCertificates
summary: Provision TLS certificate
description: >-
Automatically provisions a TLS certificate for a verified domain
using Let's Encrypt. The domain must be verified before this
endpoint can be called.
tags:
- Domains
parameters:
- $ref: '#/components/parameters/domainId'
responses:
'200':
description: Certificate provisioning initiated successfully
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/organizations/{organizationId}/databases:
get:
operationId: listKvDatabases
summary: List KV databases
description: >-
Returns a paginated list of all Deno KV databases belonging to the
organization. Each database can be associated with one or more
deployments and supports optional S3 backup configuration.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/organizationId'
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/q'
- $ref: '#/components/parameters/sort'
- $ref: '#/components/parameters/order'
responses:
'200':
description: KV databases listed successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/KvDatabase'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: createKvDatabase
summary: Create KV database
description: >-
Creates a new Deno KV database within the organization. The database
can be given a descriptive name and subsequently associated with
deployments to provide persistent, globally distributed key-value
storage.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/organizationId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateKvDatabaseRequest'
responses:
'200':
description: KV database created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KvDatabase'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/databases/{databaseId}:
patch:
operationId: updateKvDatabase
summary: Update KV database
description: >-
Updates the name or description of an existing Deno KV database.
Only the fields present in the request body are modified.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/databaseId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateKvDatabaseRequest'
responses:
'200':
description: KV database updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KvDatabase'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/databases/{databaseId}/database_backups:
get:
operationId: listKvBackups
summary: List KV database backups
description: >-
Returns a list of all backup configurations for a Deno KV database.
Each backup entry includes the S3 destination, schedule, and current
status of the backup job.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/databaseId'
responses:
'200':
description: KV database backups listed successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/KvDatabaseBackup'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
operationId: enableKvBackup
summary: Enable KV database backup
description: >-
Enables automatic backups for a Deno KV database to an S3-compatible
storage bucket. Backups are taken on a configurable schedule and stored
in the specified S3 bucket using the provided credentials.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/databaseId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnableKvBackupRequest'
responses:
'200':
description: KV database backup enabled successfully
content:
application/json:
schema:
$ref: '#/components/schemas/EnableKvBackupResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/database_backups/{databaseBackupId}:
get:
operationId: getKvBackup
summary: Get KV database backup
description: >-
Retrieves the details of a specific KV database backup configuration
by its UUID, including current status and S3 destination.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/databaseBackupId'
responses:
'200':
description: KV database backup retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/KvDatabaseBackup'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: disableKvBackup
summary: Disable KV database backup
description: >-
Disables automatic backups for a specific KV database backup
configuration. Existing backup files in S3 are not removed.
tags:
- KV Databases
parameters:
- $ref: '#/components/parameters/databaseBackupId'
responses:
'200':
description: KV database backup disabled successfully
content:
application/json:
schema:
$ref: '#/components/schemas/DisableKvBackupResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Bearer token authentication. Generate tokens from the Deno Deploy
dashboard under Settings > Access Tokens.
parameters:
organizationId:
name: organizationId
in: path
required: true
description: UUID of the organization
schema:
type: string
format: uuid
projectId:
name: projectId
in: path
required: true
description: UUID of the project
schema:
type: string
format: uuid
deploymentId:
name: deploymentId
in: path
required: true
description: Identifier of the deployment
schema:
type: string
domainId:
name: domainId
in: path
required: true
description: UUID of the custom domain
schema:
type: string
format: uuid
databaseId:
name: databaseId
in: path
required: true
description: UUID of the KV database
schema:
type: string
format: uuid
databaseBackupId:
name: databaseBackupId
in: path
required: true
description: UUID of the KV database backup configuration
schema:
type: string
format: uuid
page:
name: page
in: query
description: Page number for paginated results (1-based)
schema:
type: integer
minimum: 1
default: 1
limit:
name: limit
in: query
description: Maximum number of items to return per page
schema:
type: integer
minimum: 1
maximum: 100
default: 20
q:
name: q
in: query
description: Search query to filter results by name or identifier
schema:
type: string
sort:
name: sort
in: query
description: Field name to sort results by
schema:
type: string
order:
name: order
in: query
description: Sort order direction
schema:
type: string
enum: [asc, desc]
default: asc
re
# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/deno/refs/heads/main/openapi/deno-deploy-rest-api-openapi.yml