Daytona Admin API

Platform-level administration covering runners (compute pools), regions, Docker registry configuration, object storage, jobs, audit logs, and global config. Used by operators of customer-managed compute, by self-hosted open-source deployments, and by Daytona staff for managed-service operations.

Daytona Admin API is one of 11 APIs that Daytona publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 3 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Administrative, Audit, Configuration, Docker Registry, and Jobs. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 3 Naftiko capability specs.

OpenAPI Specification

daytona-admin-api-openapi.yml Raw ↑
openapi: 3.1.0
paths:
  /config:
    get:
      operationId: ConfigController_getConfig
      parameters: []
      responses:
        '200':
          description: Daytona configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DaytonaConfiguration'
      summary: Get config
      tags:
      - config
  /shared-regions:
    get:
      operationId: listSharedRegions
      parameters: []
      responses:
        '200':
          description: List of all shared regions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Region'
      summary: List all shared regions
      tags:
      - regions
  /runners:
    post:
      operationId: createRunner
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRunner'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateRunnerResponse'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Create runner
      tags:
      - runners
    get:
      operationId: listRunners
      parameters:
      - name: regionId
        required: false
        in: query
        description: Filter runners by region ID
        schema:
          type: string
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Runner'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: List all runners
      tags:
      - runners
  /runners/me:
    get:
      operationId: getInfoForAuthenticatedRunner
      parameters: []
      responses:
        '200':
          description: Runner info
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunnerFull'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get info for authenticated runner
      tags:
      - runners
  /runners/by-sandbox/{sandboxId}:
    get:
      operationId: getRunnerBySandboxId
      parameters:
      - name: sandboxId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunnerFull'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get runner by sandbox ID
      tags:
      - runners
  /runners/by-snapshot-ref:
    get:
      operationId: getRunnersBySnapshotRef
      parameters:
      - name: ref
        required: true
        in: query
        description: Snapshot ref
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RunnerSnapshotDto'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get runners by snapshot ref
      tags:
      - runners
  /runners/{id}:
    get:
      operationId: getRunnerById
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Runner'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get runner by ID
      tags:
      - runners
    delete:
      operationId: deleteRunner
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '204':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Delete runner
      tags:
      - runners
  /runners/{id}/full:
    get:
      operationId: getRunnerFullById
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunnerFull'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get runner by ID
      tags:
      - runners
  /runners/{id}/scheduling:
    patch:
      operationId: updateRunnerScheduling
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Runner'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Update runner scheduling status
      tags:
      - runners
  /runners/{id}/draining:
    patch:
      operationId: updateRunnerDraining
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Runner'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Update runner draining status
      tags:
      - runners
  /runners/healthcheck:
    post:
      description: Endpoint for version 2 runners to send healthcheck and metrics. Updates lastChecked timestamp and runner
        metrics.
      operationId: runnerHealthcheck
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RunnerHealthcheck'
      responses:
        '200':
          description: Healthcheck received
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Runner healthcheck
      tags:
      - runners
  /jobs:
    get:
      description: Returns a paginated list of jobs for the runner, optionally filtered by status.
      operationId: listJobs
      parameters:
      - name: page
        required: false
        in: query
        description: Page number of the results
        schema:
          minimum: 1
          default: 1
          type: number
      - name: limit
        required: false
        in: query
        description: 'Maximum number of jobs to return (default: 100, max: 500)'
        schema:
          minimum: 1
          maximum: 200
          default: 100
          type: number
      - name: status
        required: false
        in: query
        description: Filter jobs by status
        schema:
          $ref: '#/components/schemas/JobStatus'
      - name: offset
        required: false
        in: query
        description: 'Number of jobs to skip for pagination (default: 0)'
        schema:
          type: number
      responses:
        '200':
          description: List of jobs for the runner
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedJobs'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: List jobs for the runner
      tags:
      - jobs
  /jobs/poll:
    get:
      description: Long poll endpoint for runners to fetch pending jobs. Returns immediately if jobs are available, otherwise
        waits up to timeout seconds.
      operationId: pollJobs
      parameters:
      - name: timeout
        required: false
        in: query
        description: 'Timeout in seconds for long polling (default: 30, max: 60)'
        schema:
          type: number
      - name: limit
        required: false
        in: query
        description: 'Maximum number of jobs to return (default: 10, max: 100)'
        schema:
          type: number
      responses:
        '200':
          description: List of jobs for the runner
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PollJobsResponse'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Long poll for jobs
      tags:
      - jobs
  /jobs/{jobId}:
    get:
      operationId: getJob
      parameters:
      - name: jobId
        required: true
        in: path
        description: ID of the job
        schema:
          type: string
      responses:
        '200':
          description: Job details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get job details
      tags:
      - jobs
  /jobs/{jobId}/status:
    post:
      operationId: updateJobStatus
      parameters:
      - name: jobId
        required: true
        in: path
        description: ID of the job
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateJobStatus'
      responses:
        '200':
          description: Job status updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Update job status
      tags:
      - jobs
  /docker-registry:
    post:
      operationId: createRegistry
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDockerRegistry'
      responses:
        '201':
          description: The docker registry has been successfully created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DockerRegistry'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Create registry
      tags:
      - docker-registry
    get:
      operationId: listRegistries
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: List of all docker registries
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DockerRegistry'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: List registries
      tags:
      - docker-registry
  /docker-registry/registry-push-access:
    get:
      operationId: getTransientPushAccess
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      - name: regionId
        required: false
        in: query
        description: ID of the region where the snapshot will be available (defaults to organization default region)
        schema:
          type: string
      responses:
        '200':
          description: Temporary registry access has been generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistryPushAccessDto'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get temporary registry access for pushing snapshots
      tags:
      - docker-registry
  /docker-registry/{id}:
    get:
      operationId: getRegistry
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      - name: id
        required: true
        in: path
        description: ID of the docker registry
        schema:
          type: string
      responses:
        '200':
          description: The docker registry
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DockerRegistry'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get registry
      tags:
      - docker-registry
    patch:
      operationId: updateRegistry
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      - name: id
        required: true
        in: path
        description: ID of the docker registry
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDockerRegistry'
      responses:
        '200':
          description: The docker registry has been successfully updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DockerRegistry'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Update registry
      tags:
      - docker-registry
    delete:
      operationId: deleteRegistry
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      - name: id
        required: true
        in: path
        description: ID of the docker registry
        schema:
          type: string
      responses:
        '204':
          description: The docker registry has been successfully deleted.
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Delete registry
      tags:
      - docker-registry
  /admin/runners:
    post:
      operationId: adminCreateRunner
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdminCreateRunner'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateRunnerResponse'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Create runner
      tags:
      - admin
    get:
      operationId: adminListRunners
      parameters:
      - name: regionId
        required: false
        in: query
        description: Filter runners by region ID
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RunnerFull'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: List all runners
      tags:
      - admin
  /admin/runners/{id}:
    get:
      operationId: adminGetRunnerById
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunnerFull'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get runner by ID
      tags:
      - admin
    delete:
      operationId: adminDeleteRunner
      parameters:
      - name: id
        required: true
        in: path
        description: Runner ID
        schema:
          type: string
      responses:
        '204':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Delete runner
      tags:
      - admin
  /admin/runners/{id}/scheduling:
    patch:
      operationId: adminUpdateRunnerScheduling
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '204':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Update runner scheduling status
      tags:
      - admin
  /admin/sandbox/{sandboxId}/recover:
    post:
      operationId: adminRecoverSandbox
      parameters:
      - name: sandboxId
        required: true
        in: path
        description: ID of the sandbox
        schema:
          type: string
      responses:
        '200':
          description: Recovery initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Sandbox'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Recover sandbox from error state as an admin
      tags:
      - admin
  /admin/users:
    post:
      operationId: adminCreateUser
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUser'
      responses:
        '201':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Create user
      tags:
      - admin
    get:
      operationId: adminListUsers
      parameters: []
      responses:
        '200':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: List all users
      tags:
      - admin
  /admin/users/{id}/regenerate-key-pair:
    post:
      operationId: adminRegenerateKeyPair
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: ''
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Regenerate user key pair
      tags:
      - admin
  /admin/users/{id}:
    get:
      operationId: adminGetUser
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: User details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get user by ID
      tags:
      - admin
  /admin/webhooks/organizations/{organizationId}/send:
    post:
      operationId: adminSendWebhook
      parameters:
      - name: organizationId
        required: true
        in: path
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendWebhookDto'
      responses:
        '200':
          description: Webhook message sent successfully
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Send a webhook message to an organization
      tags:
      - admin
  /admin/webhooks/organizations/{organizationId}/messages/{messageId}/attempts:
    get:
      operationId: adminGetMessageAttempts
      parameters:
      - name: organizationId
        required: true
        in: path
        schema:
          type: string
      - name: messageId
        required: true
        in: path
        schema:
          type: string
      responses:
        '200':
          description: List of delivery attempts
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get delivery attempts for a webhook message
      tags:
      - admin
  /admin/webhooks/status:
    get:
      operationId: adminGetWebhookStatus
      parameters: []
      responses:
        '200':
          description: Webhook service status
          content:
            application/json:
              schema:
                type: object
                properties:
                  enabled:
                    type: boolean
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get webhook service status
      tags:
      - admin
  /admin/webhooks/organizations/{organizationId}/initialize:
    post:
      operationId: adminInitializeWebhooks
      parameters:
      - name: organizationId
        required: true
        in: path
        schema:
          type: string
      responses:
        '201':
          description: Webhooks initialized successfully
        '404':
          description: Organization not found
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Initialize webhooks for an organization
      tags:
      - admin
  /admin/docker-registry/{id}/set-default:
    post:
      operationId: adminSetDefaultRegistry
      parameters:
      - name: id
        required: true
        in: path
        description: ID of the docker registry
        schema:
          type: string
      responses:
        '200':
          description: The docker registry has been set as default.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DockerRegistry'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Set default registry
      tags:
      - admin
  /admin/snapshots/can-cleanup-image:
    get:
      operationId: adminCanCleanupImage
      parameters:
      - name: imageName
        required: true
        in: query
        description: Image name with tag to check
        schema:
          type: string
      responses:
        '200':
          description: Boolean indicating if image can be cleaned up
          content:
            application/json:
              schema:
                type: boolean
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Check if an image can be cleaned up
      tags:
      - admin
  /admin/snapshots/{id}/general:
    patch:
      operationId: adminSetSnapshotGeneralStatus
      parameters:
      - name: id
        required: true
        in: path
        description: Snapshot ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetSnapshotGeneralStatusDto'
      responses:
        '200':
          description: Snapshot general status has been set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SnapshotDto'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Set snapshot general status
      tags:
      - admin
  /admin/audit:
    get:
      operationId: adminGetAllAuditLogs
      parameters:
      - name: page
        required: false
        in: query
        description: Page number of the results
        schema:
          minimum: 1
          default: 1
          type: number
      - name: limit
        required: false
        in: query
        description: Number of results per page
        schema:
          minimum: 1
          maximum: 200
          default: 100
          type: number
      - name: from
        required: false
        in: query
        description: From date (ISO 8601 format)
        schema:
          format: date-time
          type: string
      - name: to
        required: false
        in: query
        description: To date (ISO 8601 format)
        schema:
          format: date-time
          type: string
      - name: nextToken
        required: false
        in: query
        description: Token for cursor-based pagination. When provided, takes precedence over page parameter.
        schema:
          type: string
      responses:
        '200':
          description: Paginated list of all audit logs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAuditLogs'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get all audit logs
      tags:
      - admin
  /audit/organizations/{organizationId}:
    get:
      operationId: getOrganizationAuditLogs
      parameters:
      - name: organizationId
        required: true
        in: path
        description: Organization ID
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: Page number of the results
        schema:
          minimum: 1
          default: 1
          type: number
      - name: limit
        required: false
        in: query
        description: Number of results per page
        schema:
          minimum: 1
          maximum: 200
          default: 100
          type: number
      - name: from
        required: false
        in: query
        description: From date (ISO 8601 format)
        schema:
          format: date-time
          type: string
      - name: to
        required: false
        in: query
        description: To date (ISO 8601 format)
        schema:
          format: date-time
          type: string
      - name: nextToken
        required: false
        in: query
        description: Token for cursor-based pagination. When provided, takes precedence over page parameter.
        schema:
          type: string
      responses:
        '200':
          description: Paginated list of organization audit logs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAuditLogs'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get audit logs for organization
      tags:
      - audit
  /object-storage/push-access:
    get:
      operationId: getPushAccess
      parameters:
      - name: X-Daytona-Organization-ID
        in: header
        description: Use with JWT to specify the organization ID
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Temporary storage access has been generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageAccessDto'
      security:
      - bearer: []
      - oauth2:
        - openid
        - profile
        - email
      summary: Get temporary storage access for pushing objects
      tags:
      - object-storage
info:
  title: Daytona Admin API
  description: "Daytona Admin API \u2014 admin, audit, config, runners, docker-registry, regions, object-storage, jobs operations\
    \ on the Daytona AI platform."
  version: '1.0'
  contact:
    name: Daytona Platforms Inc.
    url: https://www.daytona.io
    email: [email protected]
  license:
    name: Apache-2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
tags: []
servers:
- url: https://app.daytona.io/api
  description: Daytona Cloud production API
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: API Key access
    oauth2:
      type: openIdConnect
      openIdConnectUrl: http://localhost:3000/.well-known/openid-configuration
  schemas:
    Announcement:
      type: object
      properties:
        text:
          type: string
          description: The announcement text
          example: New feature available!
        learnMoreUrl:
          type: string
          description: URL to learn more about the announcement
          example: https://example.com/learn-more
      required:
      - text
    PosthogConfig:
      type: object
      properties:
        apiKey:
          type: string
          description: PostHog API key
          example: phc_abc123
        host:
          type: string
          description: PostHog host URL
          example: https://app.posthog.com
      required:
      - apiKey
      - host
    OidcConfig:
      type: object
      properties:
        issuer:
          type: string
          description: OIDC issuer
          example: https://auth.example.com
        clientId:
          type: string
          description: OIDC client ID
          example: daytona-client
        audience:
          type: string
          description: OIDC audience
          example: daytona-api
      required:
      - issuer
      - clientId
      - audience
    RateLimitEntry:
      type: object
      properties:
        ttl:
          type: number
          description: Rate limit TTL in seconds
          example: 60
        limit:
          type: number
          description: Rate limit max requests
          example: 100
    RateLimitConfig:
      type: object
      properties:
        failedAuth:
          description: Failed authentication rate limit
          allOf:
          - $ref: '#/components/schemas/RateLimitEntry'
        authenticated:
          description: Authenticated rate limit
          allOf:
          - $ref: '#/components/schemas/RateLimitEntry'
        sandboxCreate:
          description: Sandbox create rate limit
          allOf:
          - $ref: '#/components/schemas/RateLimitEntry'
        sandboxLifecycle:
          description: Sandbox lifecyc

# --- truncated at 32 KB (161 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/daytona-io/refs/heads/main/openapi/daytona-admin-api-openapi.yml