Files
2026-07-13 12:47:58 +08:00

3654 lines
102 KiB
YAML

openapi: 3.0.0
info:
version: 0.1.0
title: E2B API
servers:
- url: https://api.e2b.app
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
AccessTokenAuth:
type: http
scheme: bearer
bearerFormat: access_token
# Generated code uses security schemas in the alphabetical order.
# In order to check first the token, and then the team (so we can already use the user),
# there is a 1 and 2 present in the names of the security schemas.
Supabase1TokenAuth:
type: apiKey
in: header
name: X-Supabase-Token
Supabase2TeamAuth:
type: apiKey
in: header
name: X-Supabase-Team
# AuthProviderBearerAuth / AuthProviderTeamAuth: B before T in the name
# so Bearer is validated before Team (same reason as Supabase1/2 above).
AuthProviderBearerAuth:
type: http
scheme: bearer
bearerFormat: access_token
AuthProviderTeamAuth:
type: apiKey
in: header
name: X-Team-ID
AdminTokenAuth:
type: apiKey
in: header
name: X-Admin-Token
parameters:
templateID:
name: templateID
in: path
required: true
schema:
type: string
buildID:
name: buildID
in: path
required: true
schema:
type: string
sandboxID:
name: sandboxID
in: path
required: true
schema:
type: string
teamID:
name: teamID
in: path
required: true
schema:
type: string
nodeID:
name: nodeID
in: path
required: true
schema:
type: string
apiKeyID:
name: apiKeyID
in: path
required: true
schema:
type: string
accessTokenID:
name: accessTokenID
in: path
required: true
schema:
type: string
snapshotID:
name: snapshotID
in: path
required: true
schema:
type: string
description: Identifier of the snapshot (template ID)
tag:
name: tag
in: path
required: true
schema:
type: string
description: Tag name
paginationLimit:
name: limit
in: query
description: Maximum number of items to return per page
required: false
schema:
type: integer
format: int32
minimum: 1
default: 100
maximum: 100
paginationNextToken:
name: nextToken
in: query
description: Cursor to start the list from
required: false
schema:
type: string
volumeID:
name: volumeID
in: path
required: true
schema:
type: string
responses:
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Authentication error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Conflict
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Team:
required:
- teamID
- name
- apiKey
- isDefault
properties:
teamID:
type: string
description: Identifier of the team
name:
type: string
description: Name of the team
apiKey:
type: string
description: API key for the team
isDefault:
type: boolean
description: Whether the team is the default team
TeamUser:
required:
- id
- email
properties:
id:
type: string
format: uuid
description: Identifier of the user
email:
type: string
nullable: true
deprecated: true
default: null
description: Email of the user
TemplateUpdateRequest:
properties:
public:
type: boolean
description: Whether the template is public or only accessible by the team
TemplateUpdateResponse:
required:
- names
properties:
names:
type: array
description: Names of the template (namespace/alias format when namespaced)
items:
type: string
CPUCount:
type: integer
format: int32
minimum: 1
description: CPU cores for the sandbox
MemoryMB:
type: integer
format: int32
minimum: 128
description: Memory for the sandbox in MiB
DiskSizeMB:
type: integer
format: int32
minimum: 0
description: Disk size for the sandbox in MiB
EnvdVersion:
type: string
description: Version of the envd running in the sandbox
SandboxMetadata:
additionalProperties:
type: string
description: Metadata of the sandbox
SandboxState:
type: string
description: State of the sandbox
enum:
- running
- paused
SnapshotInfo:
type: object
required:
- snapshotID
- names
properties:
snapshotID:
type: string
description: Identifier of the snapshot template including the tag. Uses namespace/alias when a name was provided (e.g. team-slug/my-snapshot:default), otherwise falls back to the raw template ID (e.g. abc123:default).
names:
type: array
items:
type: string
description: Full names of the snapshot template including team namespace and tag (e.g. team-slug/my-snapshot:v2)
EnvVars:
additionalProperties:
type: string
description: Environment variables for the sandbox
Mcp:
type: object
description: MCP configuration for the sandbox
additionalProperties: {}
nullable: true
SandboxNetworkConfig:
type: object
properties:
allowPublicTraffic:
type: boolean
default: true
description: Specify if the sandbox URLs should be accessible only with authentication.
allowOut:
type: array
description: List of allowed destinations for egress traffic. Each entry can be a CIDR block (e.g. "8.8.8.8/32"), a bare IP address (e.g. "8.8.8.8"), or a domain name (e.g. "example.com", "*.example.com"). Allowed entries always take precedence over denied entries.
items:
type: string
denyOut:
type: array
description: List of denied CIDR blocks or IP addresses for egress traffic. Domain names are not supported for deny rules.
items:
type: string
maskRequestHost:
type: string
description: Specify host mask which will be used for all sandbox requests
rules:
type: object
description: >
Per-domain transform rules applied to matching egress HTTP/HTTPS requests.
Keys are domains (e.g. "api.example.com", "example.com").
A domain listed here is not automatically allowed - use allowOut to permit the traffic.
additionalProperties:
type: array
items:
$ref: '#/components/schemas/SandboxNetworkRule'
SandboxNetworkUpdateConfig:
type: object
description: Network configuration update for a running sandbox. Replaces the current egress rules with the provided configuration. Omitting a field clears it.
properties:
allowOut:
type: array
description: List of allowed destinations for egress traffic. Each entry can be a CIDR block (e.g. "8.8.8.8/32"), a bare IP address (e.g. "8.8.8.8"), or a domain name (e.g. "example.com", "*.example.com"). Allowed entries always take precedence over denied entries.
items:
type: string
denyOut:
type: array
description: List of denied CIDR blocks or IP addresses for egress traffic. Domain names are not supported for deny rules.
items:
type: string
rules:
type: object
description: Per-domain transform rules. Replaces all existing rules when provided.
additionalProperties:
type: array
items:
$ref: '#/components/schemas/SandboxNetworkRule'
allow_internet_access:
type: boolean
description:
Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut
to 0.0.0.0/0 in the network config.
SandboxNetworkRule:
type: object
description: Transform rule applied to egress requests matching a domain pattern.
properties:
transform:
$ref: '#/components/schemas/SandboxNetworkTransform'
SandboxNetworkTransform:
type: object
description: Transformations applied to matching egress requests before forwarding.
properties:
headers:
type: object
description: >
HTTP headers to inject or override in matching requests.
An existing header with the same name is replaced. Values are plain strings;
secret resolution happens client-side before sending to the API.
additionalProperties:
type: string
SandboxAutoResumeEnabled:
type: boolean
description: Auto-resume enabled flag for paused sandboxes. Default false.
default: false
SandboxAutoResumeConfig:
type: object
description: Auto-resume configuration for paused sandboxes.
required:
- enabled
properties:
enabled:
$ref: '#/components/schemas/SandboxAutoResumeEnabled'
SandboxOnTimeout:
type: string
description: Action taken when the sandbox times out.
enum:
- kill
- pause
SandboxLifecycle:
type: object
description: Sandbox lifecycle policy returned by sandbox info.
required:
- autoResume
- onTimeout
properties:
autoResume:
type: boolean
description: Whether the sandbox can auto-resume.
onTimeout:
$ref: '#/components/schemas/SandboxOnTimeout'
SandboxLog:
description: Log entry with timestamp and line
required:
- timestamp
- line
properties:
timestamp:
type: string
format: date-time
description: Timestamp of the log entry
line:
type: string
description: Log line content
SandboxLogEntry:
required:
- timestamp
- level
- message
- fields
properties:
timestamp:
type: string
format: date-time
description: Timestamp of the log entry
message:
type: string
description: Log message content
level:
$ref: '#/components/schemas/LogLevel'
fields:
type: object
additionalProperties:
type: string
SandboxLogs:
required:
- logs
- logEntries
properties:
logs:
description: Logs of the sandbox
type: array
items:
$ref: '#/components/schemas/SandboxLog'
logEntries:
description: Structured logs of the sandbox
type: array
items:
$ref: '#/components/schemas/SandboxLogEntry'
SandboxLogsV2Response:
required:
- logs
properties:
logs:
default: []
description: Sandbox logs structured
type: array
items:
$ref: '#/components/schemas/SandboxLogEntry'
SandboxMetric:
description: Metric entry with timestamp and line
required:
- timestamp
- timestampUnix
- cpuCount
- cpuUsedPct
- memUsed
- memTotal
- memCache
- diskUsed
- diskTotal
properties:
timestamp:
type: string
format: date-time
deprecated: true
description: Timestamp of the metric entry
timestampUnix:
type: integer
format: int64
description: Timestamp of the metric entry in Unix time (seconds since epoch)
cpuCount:
type: integer
format: int32
description: Number of CPU cores
cpuUsedPct:
type: number
format: float
description: CPU usage percentage
memUsed:
type: integer
format: int64
description: Memory used in bytes
memTotal:
type: integer
format: int64
description: Total memory in bytes
memCache:
type: integer
format: int64
description: Cached memory (page cache) in bytes
diskUsed:
type: integer
format: int64
description: Disk used in bytes
diskTotal:
type: integer
format: int64
description: Total disk space in bytes
SandboxVolumeMount:
type: object
properties:
name:
type: string
description: Name of the volume
path:
type: string
description: Path of the volume
required:
- name
- path
Sandbox:
required:
- templateID
- sandboxID
- clientID
- envdVersion
properties:
templateID:
type: string
description: Identifier of the template from which is the sandbox created
sandboxID:
type: string
description: Identifier of the sandbox
alias:
type: string
description: Alias of the template
clientID:
type: string
deprecated: true
description: Identifier of the client
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
envdAccessToken:
type: string
description: Access token used for envd communication
trafficAccessToken:
type: string
nullable: true
description: Token required for accessing sandbox via proxy.
domain:
type: string
nullable: true
description: Base domain where the sandbox traffic is accessible
SandboxDetail:
required:
- templateID
- sandboxID
- clientID
- startedAt
- cpuCount
- memoryMB
- diskSizeMB
- endAt
- state
- envdVersion
properties:
templateID:
type: string
description: Identifier of the template from which is the sandbox created
alias:
type: string
description: Alias of the template
sandboxID:
type: string
description: Identifier of the sandbox
clientID:
type: string
deprecated: true
description: Identifier of the client
startedAt:
type: string
format: date-time
description: Time when the sandbox was started
endAt:
type: string
format: date-time
description: Time when the sandbox will expire
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
envdAccessToken:
type: string
description: Access token used for envd communication
allowInternetAccess:
type: boolean
nullable: true
description: Whether internet access was explicitly enabled or disabled for the sandbox. Null means it was not explicitly set.
domain:
type: string
nullable: true
description: Base domain where the sandbox traffic is accessible
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
diskSizeMB:
$ref: '#/components/schemas/DiskSizeMB'
metadata:
$ref: '#/components/schemas/SandboxMetadata'
state:
$ref: '#/components/schemas/SandboxState'
network:
$ref: '#/components/schemas/SandboxNetworkConfig'
lifecycle:
$ref: '#/components/schemas/SandboxLifecycle'
volumeMounts:
type: array
items:
$ref: '#/components/schemas/SandboxVolumeMount'
ListedSandbox:
required:
- templateID
- sandboxID
- clientID
- startedAt
- cpuCount
- memoryMB
- diskSizeMB
- endAt
- state
- envdVersion
properties:
templateID:
type: string
description: Identifier of the template from which is the sandbox created
alias:
type: string
description: Alias of the template
sandboxID:
type: string
description: Identifier of the sandbox
clientID:
type: string
deprecated: true
description: Identifier of the client
startedAt:
type: string
format: date-time
description: Time when the sandbox was started
endAt:
type: string
format: date-time
description: Time when the sandbox will expire
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
diskSizeMB:
$ref: '#/components/schemas/DiskSizeMB'
metadata:
$ref: '#/components/schemas/SandboxMetadata'
state:
$ref: '#/components/schemas/SandboxState'
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
volumeMounts:
type: array
items:
$ref: '#/components/schemas/SandboxVolumeMount'
SandboxesWithMetrics:
required:
- sandboxes
properties:
sandboxes:
additionalProperties:
$ref: '#/components/schemas/SandboxMetric'
NewSandbox:
required:
- templateID
properties:
templateID:
type: string
description: Identifier of the required template
timeout:
type: integer
format: int32
minimum: 0
default: 15
description: Time to live for the sandbox in seconds.
autoPause:
type: boolean
default: false
description: Automatically pauses the sandbox after the timeout
autoPauseMemory:
type: boolean
default: true
description: >-
Controls the snapshot kind taken when the sandbox auto-pauses on
timeout (only relevant when autoPause is true). When false, the
auto-pause drops the in-memory state and persists only the
filesystem (a filesystem-only snapshot); resuming it cold-boots
(reboots) the sandbox from disk. Such a snapshot cannot be
auto-resumed by traffic and must be resumed explicitly, so it cannot
be combined with autoResume. Defaults to true (full memory snapshot).
autoResume:
$ref: '#/components/schemas/SandboxAutoResumeConfig'
secure:
type: boolean
description: Secure all system communication with sandbox
allow_internet_access:
type: boolean
description:
Allow sandbox to access the internet. When set to false, it behaves the same as specifying denyOut
to 0.0.0.0/0 in the network config.
network:
$ref: '#/components/schemas/SandboxNetworkConfig'
metadata:
$ref: '#/components/schemas/SandboxMetadata'
envVars:
$ref: '#/components/schemas/EnvVars'
mcp:
$ref: '#/components/schemas/Mcp'
volumeMounts:
type: array
items:
$ref: '#/components/schemas/SandboxVolumeMount'
ResumedSandbox:
properties:
timeout:
type: integer
format: int32
minimum: 0
default: 15
description: Time to live for the sandbox in seconds.
autoPause:
type: boolean
deprecated: true
description: Automatically pauses the sandbox after the timeout
SandboxPauseRequest:
type: object
properties:
memory:
type: boolean
default: true
description: >-
Whether to capture a full memory snapshot. When false, only the
filesystem is persisted and resuming the sandbox cold-boots
(reboots) it from disk, losing in-memory state, running processes,
and open connections. Resume it with an explicit request (connect or
resume); auto-resume, which can be triggered by arbitrary traffic,
refuses such a sandbox. Defaults to true.
ConnectSandbox:
type: object
required:
- timeout
properties:
timeout:
description: Timeout in seconds from the current time after which the sandbox should expire
type: integer
format: int32
minimum: 0
TeamMetric:
description: Team metric with timestamp
required:
- timestamp
- timestampUnix
- concurrentSandboxes
- sandboxStartRate
properties:
timestamp:
type: string
format: date-time
deprecated: true
description: Timestamp of the metric entry
timestampUnix:
type: integer
format: int64
description: Timestamp of the metric entry in Unix time (seconds since epoch)
concurrentSandboxes:
type: integer
format: int32
description: The number of concurrent sandboxes for the team
sandboxStartRate:
type: number
format: float
description: Number of sandboxes started per second
MaxTeamMetric:
description: Team metric with timestamp
required:
- timestamp
- timestampUnix
- value
properties:
timestamp:
type: string
format: date-time
deprecated: true
description: Timestamp of the metric entry
timestampUnix:
type: integer
format: int64
description: Timestamp of the metric entry in Unix time (seconds since epoch)
value:
type: number
description: The maximum value of the requested metric in the given interval
AdminSandboxKillResult:
required:
- killedCount
- failedCount
properties:
killedCount:
type: integer
description: Number of sandboxes successfully killed
failedCount:
type: integer
description: Number of sandboxes that failed to kill
AdminBuildCancelResult:
required:
- cancelledCount
- failedCount
properties:
cancelledCount:
type: integer
description: Number of builds successfully cancelled
failedCount:
type: integer
description: Number of builds that failed to cancel
VolumeToken:
type: object
properties:
token:
type: string
required:
- token
Template:
required:
- templateID
- buildID
- cpuCount
- memoryMB
- diskSizeMB
- public
- createdAt
- updatedAt
- createdBy
- lastSpawnedAt
- spawnCount
- buildCount
- envdVersion
- aliases
- names
- buildStatus
properties:
templateID:
type: string
description: Identifier of the template
buildID:
type: string
description: Identifier of the last successful build for given template
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
diskSizeMB:
$ref: '#/components/schemas/DiskSizeMB'
public:
type: boolean
description: Whether the template is public or only accessible by the team
aliases:
type: array
description: Aliases of the template
deprecated: true
items:
type: string
names:
type: array
description: Names of the template (namespace/alias format when namespaced)
items:
type: string
createdAt:
type: string
format: date-time
description: Time when the template was created
updatedAt:
type: string
format: date-time
description: Time when the template was last updated
createdBy:
allOf:
- $ref: '#/components/schemas/TeamUser'
nullable: true
lastSpawnedAt:
type: string
nullable: true
format: date-time
description: Time when the template was last used
spawnCount:
type: integer
format: int64
description: Number of times the template was used
buildCount:
type: integer
format: int32
description: Number of times the template was built
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
buildStatus:
$ref: '#/components/schemas/TemplateBuildStatus'
TemplateRequestResponseV3:
required:
- templateID
- buildID
- public
- aliases
- names
- tags
properties:
templateID:
type: string
description: Identifier of the template
buildID:
type: string
description: Identifier of the last successful build for given template
public:
type: boolean
description: Whether the template is public or only accessible by the team
names:
type: array
description: Names of the template
items:
type: string
tags:
type: array
description: Tags assigned to the template build
items:
type: string
aliases:
type: array
description: Aliases of the template
deprecated: true
items:
type: string
TemplateLegacy:
required:
- templateID
- buildID
- cpuCount
- memoryMB
- diskSizeMB
- public
- createdAt
- updatedAt
- createdBy
- lastSpawnedAt
- spawnCount
- buildCount
- envdVersion
- aliases
properties:
templateID:
type: string
description: Identifier of the template
buildID:
type: string
description: Identifier of the last successful build for given template
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
diskSizeMB:
$ref: '#/components/schemas/DiskSizeMB'
public:
type: boolean
description: Whether the template is public or only accessible by the team
aliases:
type: array
description: Aliases of the template
items:
type: string
createdAt:
type: string
format: date-time
description: Time when the template was created
updatedAt:
type: string
format: date-time
description: Time when the template was last updated
createdBy:
allOf:
- $ref: '#/components/schemas/TeamUser'
nullable: true
lastSpawnedAt:
type: string
nullable: true
format: date-time
description: Time when the template was last used
spawnCount:
type: integer
format: int64
description: Number of times the template was used
buildCount:
type: integer
format: int32
description: Number of times the template was built
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
TemplateBuild:
required:
- buildID
- status
- createdAt
- updatedAt
- cpuCount
- memoryMB
properties:
buildID:
type: string
format: uuid
description: Identifier of the build
status:
$ref: '#/components/schemas/TemplateBuildStatus'
createdAt:
type: string
format: date-time
description: Time when the build was created
updatedAt:
type: string
format: date-time
description: Time when the build was last updated
finishedAt:
type: string
format: date-time
description: Time when the build was finished
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
diskSizeMB:
$ref: '#/components/schemas/DiskSizeMB'
envdVersion:
$ref: '#/components/schemas/EnvdVersion'
TemplateWithBuilds:
required:
- templateID
- public
- aliases
- names
- createdAt
- updatedAt
- lastSpawnedAt
- spawnCount
- builds
properties:
templateID:
type: string
description: Identifier of the template
public:
type: boolean
description: Whether the template is public or only accessible by the team
aliases:
type: array
description: Aliases of the template
deprecated: true
items:
type: string
names:
type: array
description: Names of the template (namespace/alias format when namespaced)
items:
type: string
createdAt:
type: string
format: date-time
description: Time when the template was created
updatedAt:
type: string
format: date-time
description: Time when the template was last updated
lastSpawnedAt:
type: string
nullable: true
format: date-time
description: Time when the template was last used
spawnCount:
type: integer
format: int64
description: Number of times the template was used
builds:
type: array
description: List of builds for the template
items:
$ref: '#/components/schemas/TemplateBuild'
TemplateAliasResponse:
required:
- templateID
- public
properties:
templateID:
type: string
description: Identifier of the template
public:
type: boolean
description: Whether the template is public or only accessible by the team
TemplateBuildRequest:
required:
- dockerfile
properties:
alias:
description: Alias of the template
type: string
dockerfile:
description: Dockerfile for the template
type: string
teamID:
type: string
description: Identifier of the team
startCmd:
description: Start command to execute in the template after the build
type: string
readyCmd:
description: Ready check command to execute in the template after the build
type: string
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
TemplateStep:
description: Step in the template build process
required:
- type
properties:
type:
type: string
description: Type of the step
args:
default: []
type: array
description: Arguments for the step
items:
type: string
filesHash:
type: string
description: Hash of the files used in the step
force:
default: false
type: boolean
description: Whether the step should be forced to run regardless of the cache
TemplateBuildRequestV3:
properties:
name:
description: Name of the template. Can include a tag with colon separator (e.g. "my-template" or "my-template:v1"). If tag is included, it will be treated as if the tag was provided in the tags array.
type: string
tags:
type: array
description: Tags to assign to the template build
items:
type: string
alias:
description: Alias of the template. Deprecated, use name instead.
type: string
deprecated: true
teamID:
deprecated: true
type: string
description: Identifier of the team
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
TemplateBuildRequestV2:
required:
- alias
properties:
alias:
description: Alias of the template
type: string
teamID:
deprecated: true
type: string
description: Identifier of the team
cpuCount:
$ref: '#/components/schemas/CPUCount'
memoryMB:
$ref: '#/components/schemas/MemoryMB'
FromImageRegistry:
oneOf:
- $ref: '#/components/schemas/AWSRegistry'
- $ref: '#/components/schemas/GCPRegistry'
- $ref: '#/components/schemas/GeneralRegistry'
discriminator:
propertyName: type
mapping:
aws: '#/components/schemas/AWSRegistry'
gcp: '#/components/schemas/GCPRegistry'
registry: '#/components/schemas/GeneralRegistry'
AWSRegistry:
type: object
required:
- type
- awsAccessKeyId
- awsSecretAccessKey
- awsRegion
properties:
type:
type: string
enum: [aws]
description: Type of registry authentication
awsAccessKeyId:
type: string
description: AWS Access Key ID for ECR authentication
awsSecretAccessKey:
type: string
description: AWS Secret Access Key for ECR authentication
awsRegion:
type: string
description: AWS Region where the ECR registry is located
GCPRegistry:
type: object
required:
- type
- serviceAccountJson
properties:
type:
type: string
enum: [gcp]
description: Type of registry authentication
serviceAccountJson:
type: string
description: Service Account JSON for GCP authentication
GeneralRegistry:
type: object
required:
- type
- username
- password
properties:
type:
type: string
enum: [registry]
description: Type of registry authentication
username:
type: string
description: Username to use for the registry
password:
type: string
description: Password to use for the registry
TemplateBuildStartV2:
type: object
properties:
fromImage:
type: string
description: Image to use as a base for the template build
fromTemplate:
type: string
description: Template to use as a base for the template build
fromImageRegistry:
$ref: '#/components/schemas/FromImageRegistry'
force:
default: false
type: boolean
description: Whether the whole build should be forced to run regardless of the cache
steps:
default: []
description: List of steps to execute in the template build
type: array
items:
$ref: '#/components/schemas/TemplateStep'
startCmd:
description: Start command to execute in the template after the build
type: string
readyCmd:
description: Ready check command to execute in the template after the build
type: string
TemplateBuildFileUpload:
required:
- present
properties:
present:
type: boolean
description: Whether the file is already present in the cache
url:
description: Url where the file should be uploaded to
type: string
LogLevel:
type: string
description: State of the sandbox
enum:
- debug
- info
- warn
- error
BuildLogEntry:
required:
- timestamp
- message
- level
properties:
timestamp:
type: string
format: date-time
description: Timestamp of the log entry
message:
type: string
description: Log message content
level:
$ref: '#/components/schemas/LogLevel'
step:
type: string
description: Step in the build process related to the log entry
BuildStatusReason:
required:
- message
properties:
message:
type: string
description: Message with the status reason, currently reporting only for error status
step:
type: string
description: Step that failed
logEntries:
default: []
description: Log entries related to the status reason
type: array
items:
$ref: '#/components/schemas/BuildLogEntry'
TemplateBuildStatus:
type: string
description: Status of the template build
enum:
- building
- waiting
- ready
- error
TemplateBuildInfo:
required:
- templateID
- buildID
- status
- logs
- logEntries
properties:
logs:
default: []
description: Build logs
type: array
items:
type: string
logEntries:
default: []
description: Build logs structured
type: array
items:
$ref: '#/components/schemas/BuildLogEntry'
templateID:
type: string
description: Identifier of the template
buildID:
type: string
description: Identifier of the build
status:
$ref: '#/components/schemas/TemplateBuildStatus'
reason:
$ref: '#/components/schemas/BuildStatusReason'
TemplateBuildLogsResponse:
required:
- logs
properties:
logs:
default: []
description: Build logs structured
type: array
items:
$ref: '#/components/schemas/BuildLogEntry'
LogsDirection:
type: string
description: Direction of the logs that should be returned
enum:
- forward
- backward
x-enum-varnames:
- LogsDirectionForward
- LogsDirectionBackward
LogsSource:
type: string
description: Source of the logs that should be returned
enum:
- temporary
- persistent
x-enum-varnames:
- LogsSourceTemporary
- LogsSourcePersistent
NodeStatus:
type: string
description: |
Status of the node.
- draining: the node is bound to be shut down. It will not accept new sandboxes and will stop once all existing sandboxes are done.
- standby: the node is not actively used, but it can return to ready and continue serving traffic.
enum:
- ready
- draining
- connecting
- unhealthy
- standby
x-enum-varnames:
- NodeStatusReady
- NodeStatusDraining
- NodeStatusConnecting
- NodeStatusUnhealthy
- NodeStatusStandby
NodeStatusChange:
required:
- status
properties:
clusterID:
type: string
format: uuid
description: Identifier of the cluster
status:
$ref: '#/components/schemas/NodeStatus'
DiskMetrics:
required:
- mountPoint
- device
- filesystemType
- usedBytes
- totalBytes
properties:
mountPoint:
type: string
description: Mount point of the disk
device:
type: string
description: Device name
filesystemType:
type: string
description: Filesystem type (e.g., ext4, xfs)
usedBytes:
type: integer
format: uint64
description: Used space in bytes
totalBytes:
type: integer
format: uint64
description: Total space in bytes
NodeMetrics:
description: Node metrics
required:
- allocatedCPU
- allocatedMemoryBytes
- cpuPercent
- memoryUsedBytes
- cpuCount
- memoryTotalBytes
- disks
properties:
allocatedCPU:
type: integer
format: uint32
description: Number of allocated CPU cores
cpuPercent:
type: integer
format: uint32
description: Node CPU usage percentage
cpuCount:
type: integer
format: uint32
description: Total number of CPU cores on the node
allocatedMemoryBytes:
type: integer
format: uint64
description: Amount of allocated memory in bytes
memoryUsedBytes:
type: integer
format: uint64
description: Node memory used in bytes
memoryTotalBytes:
type: integer
format: uint64
description: Total node memory in bytes
disks:
type: array
description: Detailed metrics for each disk/mount point
items:
$ref: '#/components/schemas/DiskMetrics'
MachineInfo:
required:
- cpuFamily
- cpuModel
- cpuModelName
- cpuArchitecture
properties:
cpuFamily:
type: string
description: CPU family of the node
cpuModel:
type: string
description: CPU model of the node
cpuModelName:
type: string
description: CPU model name of the node
cpuArchitecture:
type: string
description: CPU architecture of the node
Node:
required:
- id
- serviceInstanceID
- clusterID
- status
- sandboxCount
- metrics
- createSuccesses
- createFails
- sandboxStartingCount
- version
- commit
- machineInfo
properties:
version:
type: string
description: Version of the orchestrator
commit:
type: string
description: Commit of the orchestrator
id:
type: string
description: Identifier of the node
serviceInstanceID:
type: string
description: Service instance identifier of the node
clusterID:
type: string
description: Identifier of the cluster
machineInfo:
$ref: '#/components/schemas/MachineInfo'
status:
$ref: '#/components/schemas/NodeStatus'
sandboxCount:
type: integer
format: uint32
description: Number of sandboxes running on the node
metrics:
$ref: '#/components/schemas/NodeMetrics'
createSuccesses:
type: integer
format: uint64
description: Number of sandbox create successes
createFails:
type: integer
format: uint64
description: Number of sandbox create fails
sandboxStartingCount:
type: integer
format: int
description: Number of starting Sandboxes
NodeDetail:
required:
- id
- serviceInstanceID
- clusterID
- status
- sandboxCount
- cachedBuilds
- createSuccesses
- createFails
- version
- commit
- metrics
- machineInfo
properties:
clusterID:
type: string
description: Identifier of the cluster
version:
type: string
description: Version of the orchestrator
commit:
type: string
description: Commit of the orchestrator
id:
type: string
description: Identifier of the node
serviceInstanceID:
type: string
description: Service instance identifier of the node
machineInfo:
$ref: '#/components/schemas/MachineInfo'
status:
$ref: '#/components/schemas/NodeStatus'
sandboxCount:
type: integer
format: uint32
description: Number of sandboxes running on the node
metrics:
$ref: '#/components/schemas/NodeMetrics'
cachedBuilds:
type: array
description: List of cached builds id on the node
items:
type: string
createSuccesses:
type: integer
format: uint64
description: Number of sandbox create successes
createFails:
type: integer
format: uint64
description: Number of sandbox create fails
CreatedAccessToken:
required:
- id
- name
- token
- mask
- createdAt
properties:
id:
type: string
format: uuid
description: Identifier of the access token
name:
type: string
description: Name of the access token
token:
type: string
description: The fully created access token
mask:
$ref: '#/components/schemas/IdentifierMaskingDetails'
createdAt:
type: string
format: date-time
description: Timestamp of access token creation
NewAccessToken:
required:
- name
properties:
name:
type: string
description: Name of the access token
TeamAPIKey:
required:
- id
- name
- mask
- createdAt
properties:
id:
type: string
format: uuid
description: Identifier of the API key
name:
type: string
description: Name of the API key
mask:
$ref: '#/components/schemas/IdentifierMaskingDetails'
createdAt:
type: string
format: date-time
description: Timestamp of API key creation
createdBy:
allOf:
- $ref: '#/components/schemas/TeamUser'
nullable: true
lastUsed:
type: string
format: date-time
description: Last time this API key was used
nullable: true
CreatedTeamAPIKey:
required:
- id
- key
- mask
- name
- createdAt
properties:
id:
type: string
format: uuid
description: Identifier of the API key
key:
type: string
description: Raw value of the API key
mask:
$ref: '#/components/schemas/IdentifierMaskingDetails'
name:
type: string
description: Name of the API key
createdAt:
type: string
format: date-time
description: Timestamp of API key creation
createdBy:
allOf:
- $ref: '#/components/schemas/TeamUser'
nullable: true
lastUsed:
type: string
format: date-time
description: Last time this API key was used
nullable: true
NewTeamAPIKey:
required:
- name
properties:
name:
type: string
description: Name of the API key
UpdateTeamAPIKey:
required:
- name
properties:
name:
type: string
description: New name for the API key
AssignedTemplateTags:
required:
- tags
- buildID
properties:
tags:
type: array
items:
type: string
description: Assigned tags of the template
buildID:
type: string
format: uuid
description: Identifier of the build associated with these tags
TemplateTag:
required:
- tag
- buildID
- createdAt
properties:
tag:
type: string
description: The tag name
buildID:
type: string
format: uuid
description: Identifier of the build associated with this tag
createdAt:
type: string
format: date-time
description: Time when the tag was assigned
AssignTemplateTagsRequest:
required:
- target
- tags
properties:
target:
type: string
description: Target template in "name:tag" format
tags:
description: Tags to assign to the template
type: array
items:
type: string
DeleteTemplateTagsRequest:
required:
- name
- tags
properties:
name:
type: string
description: Name of the template
tags:
description: Tags to delete
type: array
items:
type: string
Error:
required:
- code
- message
properties:
code:
type: integer
format: int32
description: Error code
message:
type: string
description: Error
IdentifierMaskingDetails:
required:
- prefix
- valueLength
- maskedValuePrefix
- maskedValueSuffix
properties:
prefix:
type: string
description: Prefix that identifies the token or key type
valueLength:
type: integer
description: Length of the token or key
maskedValuePrefix:
type: string
description: Prefix used in masked version of the token or key
maskedValueSuffix:
type: string
description: Suffix used in masked version of the token or key
Volume:
type: object
properties:
volumeID:
type: string
description: ID of the volume
name:
type: string
description: Name of the volume
required:
- volumeID
- name
VolumeAndToken:
type: object
properties:
volumeID:
type: string
description: ID of the volume
name:
type: string
description: Name of the volume
token:
type: string
description: Auth token to use for interacting with volume content
required:
- volumeID
- name
- token
NewVolume:
type: object
properties:
name:
type: string
description: Name of the volume
pattern: '^[a-zA-Z0-9_-]+$'
required:
- name
tags:
- name: templates
- name: sandboxes
- name: auth
- name: access-tokens
- name: api-keys
- name: tags
- name: volumes
paths:
/health:
get:
description: Health check
responses:
'204':
description: The service is healthy
'401':
$ref: '#/components/responses/401'
/teams:
get:
description: List all teams
tags: [auth]
security:
- AccessTokenAuth: []
- Supabase1TokenAuth: []
- AuthProviderBearerAuth: []
responses:
'200':
description: Successfully returned all teams
content:
application/json:
schema:
type: array
items:
allOf:
- $ref: '#/components/schemas/Team'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/teams/{teamID}/metrics:
get:
description: Get metrics for the team
tags: [auth]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/teamID'
- in: query
name: start
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the start of the interval, in seconds, for which the metrics
- in: query
name: end
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the end of the interval, in seconds, for which the metrics
responses:
'200':
description: Successfully returned the team metrics
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TeamMetric'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
/teams/{teamID}/metrics/max:
get:
description: Get the maximum metrics for the team in the given interval
tags: [auth]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/teamID'
- in: query
name: start
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the start of the interval, in seconds, for which the metrics
- in: query
name: end
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the end of the interval, in seconds, for which the metrics
- in: query
name: metric
required: true
schema:
type: string
enum: [concurrent_sandboxes, sandbox_start_rate]
description: Metric to retrieve the maximum value for
responses:
'200':
description: Successfully returned the team metrics
content:
application/json:
schema:
$ref: '#/components/schemas/MaxTeamMetric'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
/sandboxes:
get:
description: List all running sandboxes
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- name: metadata
in: query
description: Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded.
required: false
schema:
type: string
responses:
'200':
description: Successfully returned all running sandboxes
content:
application/json:
schema:
type: array
items:
allOf:
- $ref: '#/components/schemas/ListedSandbox'
'401':
$ref: '#/components/responses/401'
'400':
$ref: '#/components/responses/400'
'500':
$ref: '#/components/responses/500'
post:
description: Create a sandbox from the template
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewSandbox'
responses:
'201':
description: The sandbox was created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Sandbox'
'401':
$ref: '#/components/responses/401'
'400':
$ref: '#/components/responses/400'
'500':
$ref: '#/components/responses/500'
/v2/sandboxes:
get:
description: List all sandboxes
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- name: metadata
in: query
description: Metadata query used to filter the sandboxes (e.g. "user=abc&app=prod"). Each key and values must be URL encoded.
required: false
schema:
type: string
- name: state
in: query
description: Filter sandboxes by one or more states
required: false
schema:
type: array
items:
$ref: '#/components/schemas/SandboxState'
style: form
explode: false
- $ref: '#/components/parameters/paginationNextToken'
- $ref: '#/components/parameters/paginationLimit'
responses:
'200':
description: Successfully returned all running sandboxes
content:
application/json:
schema:
type: array
items:
allOf:
- $ref: '#/components/schemas/ListedSandbox'
'401':
$ref: '#/components/responses/401'
'400':
$ref: '#/components/responses/400'
'500':
$ref: '#/components/responses/500'
/sandboxes/metrics:
get:
description: List metrics for given sandboxes
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- name: sandbox_ids
in: query
required: true
description: Comma-separated list of sandbox IDs to get metrics for
explode: false
schema:
type: array
items:
type: string
maxItems: 100
uniqueItems: true
responses:
'200':
description: Successfully returned all running sandboxes with metrics
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxesWithMetrics'
'401':
$ref: '#/components/responses/401'
'400':
$ref: '#/components/responses/400'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/logs:
get:
description: Get sandbox logs. Use /v2/sandboxes/{sandboxID}/logs instead.
deprecated: true
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
- in: query
name: start
schema:
type: integer
format: int64
minimum: 0
description: Starting timestamp of the logs that should be returned in milliseconds
- in: query
name: limit
schema:
default: 1000
format: int32
minimum: 0
type: integer
description: Maximum number of logs that should be returned
responses:
'200':
description: Successfully returned the sandbox logs
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxLogs'
'404':
$ref: '#/components/responses/404'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/v2/sandboxes/{sandboxID}/logs:
get:
description: Get sandbox logs
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
- in: query
name: cursor
schema:
type: integer
format: int64
minimum: 0
description: Starting timestamp of the logs that should be returned in milliseconds
- in: query
name: limit
schema:
default: 1000
type: integer
format: int32
minimum: 0
maximum: 1000
description: Maximum number of logs that should be returned
- in: query
name: direction
schema:
$ref: '#/components/schemas/LogsDirection'
description: Direction of the logs that should be returned
- in: query
name: level
schema:
$ref: '#/components/schemas/LogLevel'
description: Minimum log level to return. Logs below this level are excluded
- in: query
name: search
schema:
type: string
maxLength: 256
description: Case-sensitive substring match on log message content
responses:
'200':
description: Successfully returned the sandbox logs
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxLogsV2Response'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}:
get:
description: Get a sandbox by id
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
responses:
'200':
description: Successfully returned the sandbox
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxDetail'
'404':
$ref: '#/components/responses/404'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
delete:
description: Kill a sandbox
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
responses:
'204':
description: The sandbox was killed successfully
'404':
$ref: '#/components/responses/404'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/metrics:
get:
description: Get sandbox metrics
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
- in: query
name: start
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the start of the interval, in seconds, for which the metrics
- in: query
name: end
schema:
type: integer
format: int64
minimum: 0
description: Unix timestamp for the end of the interval, in seconds, for which the metrics
responses:
'200':
description: Successfully returned the sandbox metrics
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SandboxMetric'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
# TODO: Pause and resume might be exposed as POST /sandboxes/{sandboxID}/snapshot and then POST /sandboxes with specified snapshotting setup
/sandboxes/{sandboxID}/pause:
post:
description: Pause the sandbox
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxPauseRequest'
responses:
'204':
description: The sandbox was paused successfully and can be resumed
'409':
$ref: '#/components/responses/409'
'404':
$ref: '#/components/responses/404'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/resume:
post:
deprecated: true
description: Resume the sandbox
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ResumedSandbox'
responses:
'201':
description: The sandbox was resumed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Sandbox'
'409':
$ref: '#/components/responses/409'
'404':
$ref: '#/components/responses/404'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/connect:
post:
description: Returns sandbox details. If the sandbox is paused, it will be resumed. TTL is only extended.
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectSandbox'
responses:
'200':
description: The sandbox was already running
content:
application/json:
schema:
$ref: '#/components/schemas/Sandbox'
'201':
description: The sandbox was resumed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Sandbox'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/timeout:
post:
description: Set the timeout for the sandbox. The sandbox will expire x seconds from the time of the request. Calling this method multiple times overwrites the TTL, each time using the current timestamp as the starting point to measure the timeout duration.
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
tags: [sandboxes]
requestBody:
content:
application/json:
schema:
type: object
required:
- timeout
properties:
timeout:
description: Timeout in seconds from the current time after which the sandbox should expire
type: integer
format: int32
minimum: 0
parameters:
- $ref: '#/components/parameters/sandboxID'
responses:
'204':
description: Successfully set the sandbox timeout
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/network:
put:
description: Update the network configuration for a running sandbox. Replaces the current egress rules with the provided configuration. Omitting field clears it.
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
tags: [sandboxes]
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SandboxNetworkUpdateConfig'
parameters:
- $ref: '#/components/parameters/sandboxID'
responses:
'204':
description: Successfully updated the sandbox network configuration
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'409':
$ref: '#/components/responses/409'
'500':
$ref: '#/components/responses/500'
/sandboxes/{sandboxID}/refreshes:
post:
description: Refresh the sandbox extending its time to live
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
tags: [sandboxes]
requestBody:
content:
application/json:
schema:
type: object
properties:
duration:
description: Duration for which the sandbox should be kept alive in seconds
type: integer
maximum: 3600 # 1 hour
minimum: 0
parameters:
- $ref: '#/components/parameters/sandboxID'
responses:
'204':
description: Successfully refreshed the sandbox
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
/sandboxes/{sandboxID}/snapshots:
post:
description: Create a persistent snapshot from the sandbox's current state. Snapshots can be used to create new sandboxes and persist beyond the original sandbox's lifetime.
tags: [sandboxes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/sandboxID'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Optional name for the snapshot template. If a snapshot template with this name already exists, a new build will be assigned to the existing template instead of creating a new one.
responses:
'201':
description: Snapshot created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/SnapshotInfo'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/snapshots:
get:
description: List all snapshots for the team
tags: [snapshots]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- name: sandboxID
in: query
required: false
schema:
type: string
description: Filter snapshots by source sandbox ID
- $ref: '#/components/parameters/paginationLimit'
- $ref: '#/components/parameters/paginationNextToken'
responses:
'200':
description: Successfully returned snapshots
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SnapshotInfo'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/v3/templates:
post:
description: Create a new template
tags: [templates]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildRequestV3'
responses:
'202':
description: The build was requested successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateRequestResponseV3'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'500':
$ref: '#/components/responses/500'
/v2/templates:
post:
description: Create a new template
deprecated: true
tags: [templates]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildRequestV2'
responses:
'202':
description: The build was requested successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateLegacy'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}/files/{hash}:
get:
description: Get an upload link for a tar file containing build layer files
tags: [templates]
security:
- AccessTokenAuth: []
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- in: path
name: hash
required: true
schema:
type: string
description: Hash of the files
responses:
'201':
description: The upload link where to upload the tar file
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildFileUpload'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/templates:
get:
description: List all templates
tags: [templates]
security:
- ApiKeyAuth: []
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- in: query
required: false
name: teamID
schema:
type: string
description: Identifier of the team
responses:
'200':
description: Successfully returned all templates
content:
application/json:
schema:
type: array
items:
allOf:
- $ref: '#/components/schemas/Template'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
post:
description: Create a new template
deprecated: true
tags: [templates]
security:
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildRequest'
responses:
'202':
description: The build was accepted
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateLegacy'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}:
get:
description: List all builds for a template
tags: [templates]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- $ref: '#/components/parameters/paginationNextToken'
- $ref: '#/components/parameters/paginationLimit'
responses:
'200':
description: Successfully returned the template with its builds
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateWithBuilds'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
post:
description: Rebuild an template
deprecated: true
tags: [templates]
security:
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildRequest'
responses:
'202':
description: The build was accepted
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateLegacy'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
delete:
description: Delete a template
tags: [templates]
security:
- ApiKeyAuth: []
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
responses:
'204':
description: The template was deleted successfully
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
patch:
description: Update template
deprecated: true
tags: [templates]
security:
- ApiKeyAuth: []
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateUpdateRequest'
responses:
'200':
description: The template was updated successfully
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}/builds/{buildID}:
post:
description: Start the build
deprecated: true
tags: [templates]
security:
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- $ref: '#/components/parameters/buildID'
responses:
'202':
description: The build has started
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/v2/templates/{templateID}/builds/{buildID}:
post:
description: Start the build
tags: [templates]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- $ref: '#/components/parameters/buildID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildStartV2'
responses:
'202':
description: The build has started
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/v2/templates/{templateID}:
patch:
description: Update template
tags: [templates]
security:
- ApiKeyAuth: []
- AccessTokenAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateUpdateRequest'
responses:
'200':
description: The template was updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateUpdateResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}/builds/{buildID}/status:
get:
description: Get template build info
tags: [templates]
security:
- AccessTokenAuth: []
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- $ref: '#/components/parameters/buildID'
- in: query
name: logsOffset
schema:
default: 0
type: integer
format: int32
minimum: 0
description: Index of the starting build log that should be returned with the template
- in: query
name: limit
schema:
default: 100
type: integer
format: int32
minimum: 0
maximum: 100
description: Maximum number of logs that should be returned
- in: query
name: level
schema:
$ref: '#/components/schemas/LogLevel'
responses:
'200':
description: Successfully returned the template
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildInfo'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}/builds/{buildID}/logs:
get:
description: Get template build logs
tags: [templates]
security:
- AccessTokenAuth: []
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
- $ref: '#/components/parameters/buildID'
- in: query
name: cursor
schema:
type: integer
format: int64
minimum: 0
description: Starting timestamp of the logs that should be returned in milliseconds
- in: query
name: limit
schema:
default: 100
type: integer
format: int32
minimum: 0
maximum: 100
description: Maximum number of logs that should be returned
- in: query
name: direction
schema:
$ref: '#/components/schemas/LogsDirection'
- in: query
name: level
schema:
$ref: '#/components/schemas/LogLevel'
- in: query
name: source
schema:
$ref: '#/components/schemas/LogsSource'
description: Source of the logs that should be returned from
responses:
'200':
description: Successfully returned the template build logs
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateBuildLogsResponse'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/templates/tags:
post:
description: Assign tag(s) to a template build
tags: [tags]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AssignTemplateTagsRequest'
responses:
'201':
description: Tag assigned successfully
content:
application/json:
schema:
$ref: '#/components/schemas/AssignedTemplateTags'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
delete:
description: Delete multiple tags from templates
tags: [tags]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteTemplateTagsRequest'
responses:
'204':
description: Tags deleted successfully
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/templates/{templateID}/tags:
get:
description: List all tags for a template
tags: [tags]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/templateID'
responses:
'200':
description: Successfully returned the template tags
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TemplateTag'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/templates/aliases/{alias}:
get:
description: Check if template with given alias exists
tags: [templates]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- name: alias
in: path
required: true
schema:
type: string
description: Template alias
responses:
'200':
description: Successfully queried template by alias
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateAliasResponse'
'400':
$ref: '#/components/responses/400'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/nodes:
get:
description: List all nodes
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- in: query
name: clusterID
description: Identifier of the cluster
required: false
schema:
type: string
format: uuid
responses:
'200':
description: Successfully returned all nodes
content:
application/json:
schema:
type: array
items:
allOf:
- $ref: '#/components/schemas/Node'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/nodes/{nodeID}:
get:
description: Get node info
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- $ref: '#/components/parameters/nodeID'
- in: query
name: clusterID
description: Identifier of the cluster
required: false
schema:
type: string
format: uuid
responses:
'200':
description: Successfully returned the node
content:
application/json:
schema:
$ref: '#/components/schemas/NodeDetail'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
post:
description: Change status of a node
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- $ref: '#/components/parameters/nodeID'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NodeStatusChange'
responses:
'204':
description: The node status was changed successfully
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/admin/teams/{teamID}/sandboxes/kill:
post:
summary: Kill all sandboxes for a team
description: Kills all sandboxes for the specified team
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- name: teamID
in: path
required: true
schema:
type: string
format: uuid
description: Team ID
responses:
'200':
description: Successfully killed sandboxes
content:
application/json:
schema:
$ref: '#/components/schemas/AdminSandboxKillResult'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/admin/teams/{teamID}/builds/cancel:
post:
summary: Cancel all builds for a team
description: Cancels all in-progress and pending builds for the specified team
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- name: teamID
in: path
required: true
schema:
type: string
format: uuid
description: Team ID
responses:
'200':
description: Successfully cancelled builds
content:
application/json:
schema:
$ref: '#/components/schemas/AdminBuildCancelResult'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/admin/teams/{teamID}/api-keys:
post:
summary: Create team API key as admin
description: Creates a team API key for internal service workflows.
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- name: teamID
in: path
required: true
schema:
type: string
format: uuid
description: Team ID
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewTeamAPIKey'
responses:
'201':
description: Team API key created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreatedTeamAPIKey'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/admin/teams/{teamID}/api-keys/{apiKeyID}:
delete:
summary: Delete team API key as admin
description: Deletes a team API key for internal service workflows.
tags: [admin]
security:
- AdminTokenAuth: []
parameters:
- name: teamID
in: path
required: true
schema:
type: string
format: uuid
description: Team ID
- $ref: '#/components/parameters/apiKeyID'
responses:
'204':
description: Team API key deleted successfully
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/access-tokens:
post:
description: Create a new access token
tags: [access-tokens]
security:
- Supabase1TokenAuth: []
- AuthProviderBearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewAccessToken'
responses:
'201':
description: Access token created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreatedAccessToken'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/access-tokens/{accessTokenID}:
delete:
description: Delete an access token
tags: [access-tokens]
security:
- Supabase1TokenAuth: []
- AuthProviderBearerAuth: []
parameters:
- $ref: '#/components/parameters/accessTokenID'
responses:
'204':
description: Access token deleted successfully
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/api-keys:
get:
description: List all team API keys
tags: [api-keys]
security:
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
responses:
'200':
description: Successfully returned all team API keys
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TeamAPIKey'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
post:
description: Create a new team API key
tags: [api-keys]
security:
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewTeamAPIKey'
responses:
'201':
description: Team API key created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CreatedTeamAPIKey'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/api-keys/{apiKeyID}:
patch:
description: Update a team API key
tags: [api-keys]
security:
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/apiKeyID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTeamAPIKey'
responses:
'200':
description: Team API key updated successfully
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
delete:
description: Delete a team API key
tags: [api-keys]
security:
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/apiKeyID'
responses:
'204':
description: Team API key deleted successfully
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
/volumes:
get:
description: List all team volumes
tags: [volumes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
responses:
'200':
description: Successfully listed all team volumes
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Volume'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
post:
description: Create a new team volume
tags: [volumes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NewVolume'
responses:
'201':
description: Successfully created a new team volume
content:
application/json:
schema:
$ref: '#/components/schemas/VolumeAndToken'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
/volumes/{volumeID}:
get:
description: Get team volume info
tags: [volumes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/volumeID'
responses:
'200':
description: Successfully retrieved a team volume
content:
application/json:
schema:
$ref: '#/components/schemas/VolumeAndToken'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
delete:
description: Delete a team volume
tags: [volumes]
security:
- ApiKeyAuth: []
- Supabase1TokenAuth: []
Supabase2TeamAuth: []
- AuthProviderBearerAuth: []
AuthProviderTeamAuth: []
parameters:
- $ref: '#/components/parameters/volumeID'
responses:
'204':
description: Successfully deleted a team volume
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'