Sevalla Object Storage API
Create and manage S3-compatible object storage buckets (powered by Cloudflare R2), rotate access credentials, configure CORS policies and CDN, list and delete objects, and purge the CDN cache.
Create and manage S3-compatible object storage buckets (powered by Cloudflare R2), rotate access credentials, configure CORS policies and CDN, list and delete objects, and purge the CDN cache.
openapi: 3.0.3
info:
title: Sevalla API
description: >-
The Sevalla API lets you deploy, scale, and manage your entire cloud
infrastructure programmatically - applications, deployments, managed
databases, static sites, S3-compatible object storage, pipelines, and
operational metrics. Sevalla is a Kinsta product built on Google Cloud
Platform and Cloudflare. A single API token authenticates every endpoint.
termsOfService: https://sevalla.com/legal/terms-of-service/
contact:
name: Sevalla Support
url: https://sevalla.com/contact/
version: v3
servers:
- url: https://api.sevalla.com/v3
description: Production
security:
- bearerAuth: []
tags:
- name: Applications
description: Deploy and manage applications from Git or Docker.
- name: Deployments
description: Trigger, inspect, and roll back deployments.
- name: Databases
description: Provision and manage managed databases.
- name: Static Sites
description: Build and deploy Git-backed static sites to the edge.
- name: Object Storage
description: S3-compatible object storage buckets.
- name: Pipelines
description: Multi-stage promotion pipelines and preview environments.
- name: Operations
description: Metrics, logs, webhooks, and reference resources.
- name: Company
description: Company users, projects, usage, and API keys.
paths:
/applications:
get:
operationId: listApplications
tags:
- Applications
summary: List all applications
parameters:
- $ref: '#/components/parameters/CompanyId'
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Offset'
responses:
'200':
description: A paginated list of applications.
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationList'
post:
operationId: createApplication
tags:
- Applications
summary: Create a new application
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateApplicationRequest'
responses:
'201':
description: The created application.
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
/applications/{id}:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: getApplication
tags:
- Applications
summary: Retrieve application details
responses:
'200':
description: The application.
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateApplication
tags:
- Applications
summary: Update an application
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateApplicationRequest'
responses:
'200':
description: The updated application.
content:
application/json:
schema:
$ref: '#/components/schemas/Application'
delete:
operationId: deleteApplication
tags:
- Applications
summary: Delete an application
responses:
'204':
description: The application was deleted.
/applications/{id}/suspend:
parameters:
- $ref: '#/components/parameters/ResourceId'
post:
operationId: suspendApplication
tags:
- Applications
summary: Suspend a running application
responses:
'200':
description: The application is being suspended.
content:
application/json:
schema:
$ref: '#/components/schemas/OperationStatus'
/applications/{id}/activate:
parameters:
- $ref: '#/components/parameters/ResourceId'
post:
operationId: activateApplication
tags:
- Applications
summary: Activate a suspended application
responses:
'200':
description: The application is being activated.
content:
application/json:
schema:
$ref: '#/components/schemas/OperationStatus'
/applications/{id}/deployments:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: listDeployments
tags:
- Deployments
summary: List deployments for an application
responses:
'200':
description: A list of deployments.
content:
application/json:
schema:
$ref: '#/components/schemas/DeploymentList'
post:
operationId: createDeployment
tags:
- Deployments
summary: Trigger a new deployment
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDeploymentRequest'
responses:
'201':
description: The triggered deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
/applications/{id}/deployments/{deploymentId}:
parameters:
- $ref: '#/components/parameters/ResourceId'
- $ref: '#/components/parameters/DeploymentId'
get:
operationId: getDeployment
tags:
- Deployments
summary: Get deployment details
responses:
'200':
description: The deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
/applications/{id}/deployments/{deploymentId}/rollback:
parameters:
- $ref: '#/components/parameters/ResourceId'
- $ref: '#/components/parameters/DeploymentId'
post:
operationId: rollbackDeployment
tags:
- Deployments
summary: Roll back to a previous deployment
responses:
'200':
description: The rollback deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
/applications/{id}/environment-variables:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: listEnvironmentVariables
tags:
- Applications
summary: List environment variables
responses:
'200':
description: A list of environment variables.
content:
application/json:
schema:
type: object
properties:
environment_variables:
type: array
items:
$ref: '#/components/schemas/EnvironmentVariable'
post:
operationId: createEnvironmentVariable
tags:
- Applications
summary: Create an environment variable
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EnvironmentVariable'
responses:
'201':
description: The created environment variable.
content:
application/json:
schema:
$ref: '#/components/schemas/EnvironmentVariable'
/databases:
get:
operationId: listDatabases
tags:
- Databases
summary: List databases
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: A list of databases.
content:
application/json:
schema:
$ref: '#/components/schemas/DatabaseList'
post:
operationId: createDatabase
tags:
- Databases
summary: Create a database
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateDatabaseRequest'
responses:
'201':
description: The created database.
content:
application/json:
schema:
$ref: '#/components/schemas/Database'
/databases/{id}:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: getDatabase
tags:
- Databases
summary: Get database details
responses:
'200':
description: The database.
content:
application/json:
schema:
$ref: '#/components/schemas/Database'
delete:
operationId: deleteDatabase
tags:
- Databases
summary: Delete a database
responses:
'204':
description: The database was deleted.
/databases/{id}/backups:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: listBackups
tags:
- Databases
summary: List database backups
responses:
'200':
description: A list of backups.
content:
application/json:
schema:
type: object
properties:
backups:
type: array
items:
$ref: '#/components/schemas/Backup'
post:
operationId: createBackup
tags:
- Databases
summary: Create a database backup
responses:
'201':
description: The created backup.
content:
application/json:
schema:
$ref: '#/components/schemas/Backup'
/static-sites:
get:
operationId: listStaticSites
tags:
- Static Sites
summary: List static sites
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: A list of static sites.
content:
application/json:
schema:
$ref: '#/components/schemas/StaticSiteList'
post:
operationId: createStaticSite
tags:
- Static Sites
summary: Create a static site
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateStaticSiteRequest'
responses:
'201':
description: The created static site.
content:
application/json:
schema:
$ref: '#/components/schemas/StaticSite'
/static-sites/{id}:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: getStaticSite
tags:
- Static Sites
summary: Get a static site
responses:
'200':
description: The static site.
content:
application/json:
schema:
$ref: '#/components/schemas/StaticSite'
delete:
operationId: deleteStaticSite
tags:
- Static Sites
summary: Delete a static site
responses:
'204':
description: The static site was deleted.
/static-sites/{id}/deployments:
parameters:
- $ref: '#/components/parameters/ResourceId'
post:
operationId: deployStaticSite
tags:
- Static Sites
summary: Deploy a static site
responses:
'201':
description: The triggered deployment.
content:
application/json:
schema:
$ref: '#/components/schemas/Deployment'
/object-storages:
get:
operationId: listObjectStorages
tags:
- Object Storage
summary: List object storage buckets
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: A list of buckets.
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectStorageList'
post:
operationId: createObjectStorage
tags:
- Object Storage
summary: Create an object storage bucket
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateObjectStorageRequest'
responses:
'201':
description: The created bucket.
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectStorage'
/object-storages/{id}:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: getObjectStorage
tags:
- Object Storage
summary: Get an object storage bucket
responses:
'200':
description: The bucket.
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectStorage'
delete:
operationId: deleteObjectStorage
tags:
- Object Storage
summary: Delete an object storage bucket
responses:
'204':
description: The bucket was deleted.
/object-storages/{id}/objects:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
operationId: listObjects
tags:
- Object Storage
summary: List objects in a bucket
responses:
'200':
description: A list of objects.
content:
application/json:
schema:
type: object
properties:
objects:
type: array
items:
$ref: '#/components/schemas/StorageObject'
/pipelines:
get:
operationId: listPipelines
tags:
- Pipelines
summary: List pipelines
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: A list of pipelines.
content:
application/json:
schema:
type: object
properties:
pipelines:
type: array
items:
$ref: '#/components/schemas/Pipeline'
post:
operationId: createPipeline
tags:
- Pipelines
summary: Create a pipeline
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePipelineRequest'
responses:
'201':
description: The created pipeline.
content:
application/json:
schema:
$ref: '#/components/schemas/Pipeline'
/pipelines/{id}/promote:
parameters:
- $ref: '#/components/parameters/ResourceId'
post:
operationId: promotePipeline
tags:
- Pipelines
summary: Promote an application between pipeline stages
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
source_stage_id:
type: string
target_stage_id:
type: string
application_id:
type: string
responses:
'200':
description: The promotion result.
content:
application/json:
schema:
$ref: '#/components/schemas/OperationStatus'
/company/usage:
get:
operationId: getCompanyUsage
tags:
- Company
summary: Get company usage data
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: Usage data for the company.
content:
application/json:
schema:
$ref: '#/components/schemas/Usage'
/company/users:
get:
operationId: listCompanyUsers
tags:
- Company
summary: List company users
parameters:
- $ref: '#/components/parameters/CompanyId'
responses:
'200':
description: A list of users.
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
$ref: '#/components/schemas/User'
/api-keys:
get:
operationId: listApiKeys
tags:
- Company
summary: List API keys
responses:
'200':
description: A list of API keys.
content:
application/json:
schema:
type: object
properties:
api_keys:
type: array
items:
$ref: '#/components/schemas/ApiKey'
post:
operationId: createApiKey
tags:
- Company
summary: Create an API key
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
properties:
name:
type: string
role:
type: string
responses:
'201':
description: The created API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiKey'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: apiToken
description: >-
Provide your Sevalla API token as a bearer token in the Authorization
header. Create a token from the Sevalla dashboard; one token
authenticates every endpoint.
parameters:
ResourceId:
name: id
in: path
required: true
description: The unique identifier of the resource.
schema:
type: string
DeploymentId:
name: deploymentId
in: path
required: true
description: The unique identifier of the deployment.
schema:
type: string
CompanyId:
name: company
in: query
required: false
description: The company (organization) identifier to scope the request.
schema:
type: string
Limit:
name: limit
in: query
required: false
description: Maximum number of items to return.
schema:
type: integer
default: 20
maximum: 100
Offset:
name: offset
in: query
required: false
description: Number of items to skip for pagination.
schema:
type: integer
default: 0
responses:
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
status:
type: integer
description: HTTP status code.
message:
type: string
description: Human-readable error message.
errors:
type: array
items:
type: object
properties:
key:
type: string
message:
type: string
required:
- status
- message
OperationStatus:
type: object
properties:
id:
type: string
status:
type: string
enum:
- pending
- running
- success
- failed
message:
type: string
Application:
type: object
properties:
id:
type: string
name:
type: string
display_name:
type: string
status:
type: string
enum:
- active
- suspended
- deploying
- failed
repo_url:
type: string
branch:
type: string
auto_deploy:
type: boolean
default_url:
type: string
cluster:
type: string
description: Google Cloud region / cluster the app runs in.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
ApplicationList:
type: object
properties:
applications:
type: array
items:
$ref: '#/components/schemas/Application'
total_count:
type: integer
CreateApplicationRequest:
type: object
required:
- name
- repo_url
properties:
name:
type: string
repo_url:
type: string
branch:
type: string
default: main
auto_deploy:
type: boolean
default: true
build_type:
type: string
enum:
- buildpacks
- dockerfile
- nixpacks
pod_size:
type: string
description: 'Pod size code, e.g. hobby, s1, s2, c1.'
cluster:
type: string
env:
type: object
additionalProperties:
type: string
UpdateApplicationRequest:
type: object
properties:
display_name:
type: string
branch:
type: string
auto_deploy:
type: boolean
pod_size:
type: string
Deployment:
type: object
properties:
id:
type: string
status:
type: string
enum:
- queued
- building
- deploying
- success
- failed
- cancelled
commit_hash:
type: string
commit_message:
type: string
is_rollback:
type: boolean
started_at:
type: string
format: date-time
finished_at:
type: string
format: date-time
DeploymentList:
type: object
properties:
deployments:
type: array
items:
$ref: '#/components/schemas/Deployment'
total_count:
type: integer
CreateDeploymentRequest:
type: object
properties:
branch:
type: string
commit_hash:
type: string
clear_cache:
type: boolean
default: false
EnvironmentVariable:
type: object
required:
- key
- value
properties:
id:
type: string
key:
type: string
value:
type: string
is_available_during_runtime:
type: boolean
default: true
is_available_during_build:
type: boolean
default: true
Database:
type: object
properties:
id:
type: string
name:
type: string
display_name:
type: string
type:
type: string
enum:
- postgresql
- mysql
- mariadb
- mongodb
- redis
- valkey
version:
type: string
status:
type: string
enum:
- active
- suspended
- provisioning
- failed
resource_type:
type: string
description: Database pod resource tier.
cluster:
type: string
created_at:
type: string
format: date-time
DatabaseList:
type: object
properties:
databases:
type: array
items:
$ref: '#/components/schemas/Database'
total_count:
type: integer
CreateDatabaseRequest:
type: object
required:
- name
- type
- resource_type
properties:
name:
type: string
type:
type: string
enum:
- postgresql
- mysql
- mariadb
- mongodb
- redis
- valkey
version:
type: string
resource_type:
type: string
cluster:
type: string
Backup:
type: object
properties:
id:
type: string
type:
type: string
enum:
- scheduled
- manual
status:
type: string
size_bytes:
type: integer
format: int64
created_at:
type: string
format: date-time
StaticSite:
type: object
properties:
id:
type: string
name:
type: string
display_name:
type: string
repo_url:
type: string
branch:
type: string
build_command:
type: string
published_directory:
type: string
default_url:
type: string
status:
type: string
created_at:
type: string
format: date-time
StaticSiteList:
type: object
properties:
static_sites:
type: array
items:
$ref: '#/components/schemas/StaticSite'
total_count:
type: integer
CreateStaticSiteRequest:
type: object
required:
- name
- repo_url
properties:
name:
type: string
repo_url:
type: string
branch:
type: string
default: main
build_command:
type: string
published_directory:
type: string
default: /
auto_deploy:
type: boolean
default: true
ObjectStorage:
type: object
properties:
id:
type: string
name:
type: string
endpoint:
type: string
description: S3-compatible endpoint for the bucket.
region:
type: string
cdn_enabled:
type: boolean
public:
type: boolean
created_at:
type: string
format: date-time
ObjectStorageList:
type: object
properties:
object_storages:
type: array
items:
$ref: '#/components/schemas/ObjectStorage'
total_count:
type: integer
CreateObjectStorageRequest:
type: object
required:
- name
properties:
name:
type: string
region:
type: string
public:
type: boolean
default: false
StorageObject:
type: object
properties:
key:
type: string
size_bytes:
type: integer
format: int64
last_modified:
type: string
format: date-time
etag:
type: string
Pipeline:
type: object
properties:
id:
type: string
name:
type: string
stages:
type: array
items:
$ref: '#/components/schemas/PipelineStage'
preview_enabled:
type: boolean
created_at:
type: string
format: date-time
PipelineStage:
type: object
properties:
id:
type: string
name:
type: string
order:
type: integer
CreatePipelineRequest:
type: object
required:
- name
properties:
name:
type: string
project_id:
type: string
Usage:
type: object
properties:
period_start:
type: string
format: date-time
period_end:
type: string
format: date-time
currency:
type: string
default: USD
total_cost:
type: number
format: float
line_items:
type: array
items:
type: object
properties:
category:
type: string
enum:
- application_hosting
- database_hosting
- static_site_hosting
- object_storage
- build_minutes
- bandwidth
quantity:
type: number
unit:
type: string
cost:
type: number
format: float
User:
type: object
properties:
id:
type: string
email:
type: string
full_name:
type: string
role:
type: string
ApiKey:
type: object
properties:
id:
type: string
name:
type: string
role:
type: string
last_used_at:
type: string
format: date-time
created_at:
type: string
format: date-time
token:
type: string
description: The token value, returned only on creation.