Render Services API

Create, list, retrieve, update, and delete Render services (web services, static sites, private services, background workers, and cron jobs), plus scale, autoscale, restart, suspend, resume, purge cache, and spin up service previews.

OpenAPI Specification

render-com-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Render API
  description: >-
    The Render REST API programmatically manages resources on the Render cloud
    application platform (PaaS). It exposes almost all of the functionality
    available in the Render Dashboard - services (web services, static sites,
    private services, background workers, cron jobs), deploys, custom domains,
    environment variables and groups, secret files, managed Postgres and Key
    Value (Redis-compatible) datastores, one-off jobs, persistent disks,
    Blueprints, projects and environments, workspaces and members, registry
    credentials, metrics, logs, and webhooks. All requests are authenticated
    with a Bearer API key created in the Render Dashboard. Real-time log
    streaming is available over a WebSocket surface (see the companion AsyncAPI
    document). This OpenAPI document models the REST surface; a subset of
    endpoints is confirmed against Render's public API reference and the
    remainder follow Render's documented, consistent REST conventions.
  version: '1.0'
  contact:
    name: Render
    url: https://render.com
  license:
    name: Proprietary
    url: https://render.com/terms
servers:
  - url: https://api.render.com/v1
    description: Render Public API
security:
  - bearerAuth: []
tags:
  - name: Services
    description: Web services, static sites, private services, background workers, and cron jobs.
  - name: Deploys
    description: Build and release deploys for a service, plus rollback.
  - name: Custom Domains
    description: Custom domains attached to a service, with DNS and TLS.
  - name: Environment Variables
    description: Per-service environment variables and secret files.
  - name: Environment Groups
    description: Reusable groups of environment variables and secret files.
  - name: Postgres
    description: Managed Render Postgres instances.
  - name: Key Value
    description: Redis-compatible Key Value datastores.
  - name: Jobs
    description: One-off jobs run in a service environment.
  - name: Disks
    description: Persistent disks and snapshots.
  - name: Blueprints
    description: Infrastructure-as-code Blueprints (render.yaml).
  - name: Projects
    description: Projects and their environments.
  - name: Environments
    description: Environments within a project.
  - name: Workspaces
    description: Workspaces (owners) and members.
  - name: Registry Credentials
    description: Container registry credentials.
  - name: Metrics
    description: Time-series metrics for services and datastores.
  - name: Logs
    description: Historical log queries. Real-time streaming is over WebSocket.
  - name: Webhooks
    description: Outbound webhooks for platform events.
paths:
  /services:
    get:
      operationId: listServices
      tags: [Services]
      summary: List services
      description: List all services in the authorized workspaces, with filters and cursor pagination.
      parameters:
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of services.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createService
      tags: [Services]
      summary: Create a service
      description: Create a new service (web service, static site, private service, background worker, or cron job).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created service.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /services/{serviceId}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: retrieveService
      tags: [Services]
      summary: Retrieve a service
      responses:
        '200':
          description: The requested service.
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateService
      tags: [Services]
      summary: Update a service
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated service.
    delete:
      operationId: deleteService
      tags: [Services]
      summary: Delete a service
      responses:
        '204':
          description: The service was deleted.
  /services/{serviceId}/deploys:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listDeploys
      tags: [Deploys]
      summary: List deploys
      responses:
        '200':
          description: A list of deploys for the service.
    post:
      operationId: createDeploy
      tags: [Deploys]
      summary: Trigger a deploy
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The triggered deploy.
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /services/{serviceId}/deploys/{deployId}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - $ref: '#/components/parameters/DeployId'
    get:
      operationId: retrieveDeploy
      tags: [Deploys]
      summary: Retrieve a deploy
      responses:
        '200':
          description: The requested deploy.
  /services/{serviceId}/deploys/{deployId}/cancel:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - $ref: '#/components/parameters/DeployId'
    post:
      operationId: cancelDeploy
      tags: [Deploys]
      summary: Cancel a deploy
      responses:
        '200':
          description: The canceled deploy.
  /services/{serviceId}/rollback:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: rollbackService
      tags: [Deploys]
      summary: Roll back a service
      description: Roll a service back to a previous deploy.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The rollback deploy.
  /services/{serviceId}/restart:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: restartService
      tags: [Services]
      summary: Restart a service
      responses:
        '202':
          description: Restart accepted.
  /services/{serviceId}/suspend:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: suspendService
      tags: [Services]
      summary: Suspend a service
      responses:
        '202':
          description: Suspend accepted.
  /services/{serviceId}/resume:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: resumeService
      tags: [Services]
      summary: Resume a service
      responses:
        '202':
          description: Resume accepted.
  /services/{serviceId}/scale:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: scaleService
      tags: [Services]
      summary: Scale a service
      description: Set the number of running instances for a service (manual scaling).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                numInstances:
                  type: integer
      responses:
        '202':
          description: Scale accepted.
  /services/{serviceId}/autoscaling:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    put:
      operationId: updateAutoscaling
      tags: [Services]
      summary: Update autoscaling
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated autoscaling configuration.
    delete:
      operationId: disableAutoscaling
      tags: [Services]
      summary: Disable autoscaling
      responses:
        '204':
          description: Autoscaling disabled.
  /services/{serviceId}/cache/purge:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: purgeCache
      tags: [Services]
      summary: Purge static site cache
      responses:
        '202':
          description: Cache purge accepted.
  /services/{serviceId}/preview:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    post:
      operationId: createServicePreview
      tags: [Services]
      summary: Create a service preview
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created preview service.
  /services/{serviceId}/events:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listEvents
      tags: [Services]
      summary: List service events
      responses:
        '200':
          description: A list of service events.
  /services/{serviceId}/custom-domains:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listCustomDomains
      tags: [Custom Domains]
      summary: List custom domains
      responses:
        '200':
          description: A list of custom domains.
    post:
      operationId: createCustomDomain
      tags: [Custom Domains]
      summary: Add a custom domain
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
      responses:
        '201':
          description: The added custom domain.
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /services/{serviceId}/custom-domains/{customDomainIdOrName}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - name: customDomainIdOrName
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveCustomDomain
      tags: [Custom Domains]
      summary: Retrieve a custom domain
      responses:
        '200':
          description: The requested custom domain.
    delete:
      operationId: deleteCustomDomain
      tags: [Custom Domains]
      summary: Delete a custom domain
      responses:
        '204':
          description: The custom domain was deleted.
  /services/{serviceId}/custom-domains/{customDomainIdOrName}/verify:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - name: customDomainIdOrName
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: verifyCustomDomain
      tags: [Custom Domains]
      summary: Verify a custom domain
      responses:
        '200':
          description: Verification result.
  /services/{serviceId}/env-vars:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listEnvVars
      tags: [Environment Variables]
      summary: List environment variables
      responses:
        '200':
          description: A list of environment variables.
    put:
      operationId: replaceEnvVars
      tags: [Environment Variables]
      summary: Replace environment variables
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
      responses:
        '200':
          description: The updated environment variables.
  /services/{serviceId}/env-vars/{envVarKey}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - name: envVarKey
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveEnvVar
      tags: [Environment Variables]
      summary: Retrieve an environment variable
      responses:
        '200':
          description: The requested environment variable.
    put:
      operationId: upsertEnvVar
      tags: [Environment Variables]
      summary: Add or update an environment variable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                value:
                  type: string
      responses:
        '200':
          description: The upserted environment variable.
    delete:
      operationId: deleteEnvVar
      tags: [Environment Variables]
      summary: Delete an environment variable
      responses:
        '204':
          description: The environment variable was deleted.
  /services/{serviceId}/secret-files:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listSecretFiles
      tags: [Environment Variables]
      summary: List secret files
      responses:
        '200':
          description: A list of secret files.
    put:
      operationId: replaceSecretFiles
      tags: [Environment Variables]
      summary: Replace secret files
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
      responses:
        '200':
          description: The updated secret files.
  /services/{serviceId}/secret-files/{secretFileName}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - name: secretFileName
        in: path
        required: true
        schema:
          type: string
    put:
      operationId: upsertSecretFile
      tags: [Environment Variables]
      summary: Add or update a secret file
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The upserted secret file.
    delete:
      operationId: deleteSecretFile
      tags: [Environment Variables]
      summary: Delete a secret file
      responses:
        '204':
          description: The secret file was deleted.
  /env-groups:
    get:
      operationId: listEnvGroups
      tags: [Environment Groups]
      summary: List environment groups
      responses:
        '200':
          description: A list of environment groups.
    post:
      operationId: createEnvGroup
      tags: [Environment Groups]
      summary: Create an environment group
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created environment group.
  /env-groups/{envGroupId}:
    parameters:
      - name: envGroupId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveEnvGroup
      tags: [Environment Groups]
      summary: Retrieve an environment group
      responses:
        '200':
          description: The requested environment group.
    patch:
      operationId: updateEnvGroup
      tags: [Environment Groups]
      summary: Update an environment group
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated environment group.
    delete:
      operationId: deleteEnvGroup
      tags: [Environment Groups]
      summary: Delete an environment group
      responses:
        '204':
          description: The environment group was deleted.
  /env-groups/{envGroupId}/env-vars/{envVarKey}:
    parameters:
      - name: envGroupId
        in: path
        required: true
        schema:
          type: string
      - name: envVarKey
        in: path
        required: true
        schema:
          type: string
    put:
      operationId: upsertEnvGroupEnvVar
      tags: [Environment Groups]
      summary: Add or update a variable in an environment group
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The upserted variable.
    delete:
      operationId: deleteEnvGroupEnvVar
      tags: [Environment Groups]
      summary: Delete a variable from an environment group
      responses:
        '204':
          description: The variable was deleted.
  /postgres:
    get:
      operationId: listPostgres
      tags: [Postgres]
      summary: List Postgres instances
      responses:
        '200':
          description: A list of Postgres instances.
    post:
      operationId: createPostgres
      tags: [Postgres]
      summary: Create a Postgres instance
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created Postgres instance.
  /postgres/{postgresId}:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrievePostgres
      tags: [Postgres]
      summary: Retrieve a Postgres instance
      responses:
        '200':
          description: The requested Postgres instance.
    patch:
      operationId: updatePostgres
      tags: [Postgres]
      summary: Update a Postgres instance
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated Postgres instance.
    delete:
      operationId: deletePostgres
      tags: [Postgres]
      summary: Delete a Postgres instance
      responses:
        '204':
          description: The Postgres instance was deleted.
  /postgres/{postgresId}/connection-info:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrievePostgresConnectionInfo
      tags: [Postgres]
      summary: Retrieve Postgres connection info
      responses:
        '200':
          description: Connection strings and credentials.
  /postgres/{postgresId}/suspend:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: suspendPostgres
      tags: [Postgres]
      summary: Suspend a Postgres instance
      responses:
        '202':
          description: Suspend accepted.
  /postgres/{postgresId}/resume:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: resumePostgres
      tags: [Postgres]
      summary: Resume a Postgres instance
      responses:
        '202':
          description: Resume accepted.
  /postgres/{postgresId}/export:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: createPostgresExport
      tags: [Postgres]
      summary: Trigger a Postgres export
      responses:
        '201':
          description: The triggered export.
  /postgres/{postgresId}/exports:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listPostgresExports
      tags: [Postgres]
      summary: List Postgres exports
      responses:
        '200':
          description: A list of exports.
  /postgres/{postgresId}/recovery-info:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrievePostgresRecoveryInfo
      tags: [Postgres]
      summary: Retrieve point-in-time recovery info
      responses:
        '200':
          description: Recovery window information.
  /postgres/{postgresId}/recovery:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: triggerPostgresRecovery
      tags: [Postgres]
      summary: Trigger a point-in-time recovery
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The recovery result.
  /postgres/{postgresId}/failover:
    parameters:
      - name: postgresId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: triggerPostgresFailover
      tags: [Postgres]
      summary: Trigger a Postgres failover
      responses:
        '202':
          description: Failover accepted.
  /key-value:
    get:
      operationId: listKeyValue
      tags: [Key Value]
      summary: List Key Value instances
      responses:
        '200':
          description: A list of Key Value instances.
    post:
      operationId: createKeyValue
      tags: [Key Value]
      summary: Create a Key Value instance
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created Key Value instance.
  /key-value/{keyValueId}:
    parameters:
      - name: keyValueId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveKeyValue
      tags: [Key Value]
      summary: Retrieve a Key Value instance
      responses:
        '200':
          description: The requested Key Value instance.
    patch:
      operationId: updateKeyValue
      tags: [Key Value]
      summary: Update a Key Value instance
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated Key Value instance.
    delete:
      operationId: deleteKeyValue
      tags: [Key Value]
      summary: Delete a Key Value instance
      responses:
        '204':
          description: The Key Value instance was deleted.
  /key-value/{keyValueId}/connection-info:
    parameters:
      - name: keyValueId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveKeyValueConnectionInfo
      tags: [Key Value]
      summary: Retrieve Key Value connection info
      responses:
        '200':
          description: Connection strings and credentials.
  /services/{serviceId}/jobs:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
    get:
      operationId: listJobs
      tags: [Jobs]
      summary: List one-off jobs
      responses:
        '200':
          description: A list of jobs for the service.
    post:
      operationId: createJob
      tags: [Jobs]
      summary: Create a one-off job
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                startCommand:
                  type: string
      responses:
        '201':
          description: The created job.
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /services/{serviceId}/jobs/{jobId}:
    parameters:
      - $ref: '#/components/parameters/ServiceId'
      - name: jobId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveJob
      tags: [Jobs]
      summary: Retrieve a one-off job
      responses:
        '200':
          description: The requested job.
  /disks:
    get:
      operationId: listDisks
      tags: [Disks]
      summary: List disks
      responses:
        '200':
          description: A list of disks.
    post:
      operationId: createDisk
      tags: [Disks]
      summary: Add a disk
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created disk.
  /disks/{diskId}:
    parameters:
      - name: diskId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveDisk
      tags: [Disks]
      summary: Retrieve a disk
      responses:
        '200':
          description: The requested disk.
    patch:
      operationId: updateDisk
      tags: [Disks]
      summary: Update a disk
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated disk.
    delete:
      operationId: deleteDisk
      tags: [Disks]
      summary: Delete a disk
      responses:
        '204':
          description: The disk was deleted.
  /disks/{diskId}/snapshots:
    parameters:
      - name: diskId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listDiskSnapshots
      tags: [Disks]
      summary: List disk snapshots
      responses:
        '200':
          description: A list of snapshots.
  /disks/{diskId}/snapshots/restore:
    parameters:
      - name: diskId
        in: path
        required: true
        schema:
          type: string
    post:
      operationId: restoreDiskSnapshot
      tags: [Disks]
      summary: Restore a disk from a snapshot
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '202':
          description: Restore accepted.
  /blueprints:
    get:
      operationId: listBlueprints
      tags: [Blueprints]
      summary: List Blueprints
      responses:
        '200':
          description: A list of Blueprints.
  /blueprints/validate:
    post:
      operationId: validateBlueprint
      tags: [Blueprints]
      summary: Validate a Blueprint spec
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Validation result.
  /blueprints/{blueprintId}:
    parameters:
      - name: blueprintId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveBlueprint
      tags: [Blueprints]
      summary: Retrieve a Blueprint
      responses:
        '200':
          description: The requested Blueprint.
    patch:
      operationId: updateBlueprint
      tags: [Blueprints]
      summary: Update a Blueprint
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated Blueprint.
    delete:
      operationId: disconnectBlueprint
      tags: [Blueprints]
      summary: Disconnect a Blueprint
      responses:
        '204':
          description: The Blueprint was disconnected.
  /blueprints/{blueprintId}/syncs:
    parameters:
      - name: blueprintId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: listBlueprintSyncs
      tags: [Blueprints]
      summary: List Blueprint syncs
      responses:
        '200':
          description: A list of Blueprint syncs.
  /projects:
    get:
      operationId: listProjects
      tags: [Projects]
      summary: List projects
      responses:
        '200':
          description: A list of projects.
    post:
      operationId: createProject
      tags: [Projects]
      summary: Create a project
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created project.
  /projects/{projectId}:
    parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveProject
      tags: [Projects]
      summary: Retrieve a project
      responses:
        '200':
          description: The requested project.
    patch:
      operationId: updateProject
      tags: [Projects]
      summary: Update a project
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated project.
    delete:
      operationId: deleteProject
      tags: [Projects]
      summary: Delete a project
      responses:
        '204':
          description: The project was deleted.
  /environments:
    get:
      operationId: listEnvironments
      tags: [Environments]
      summary: List environments
      responses:
        '200':
          description: A list of environments.
    post:
      operationId: createEnvironment
      tags: [Environments]
      summary: Create an environment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created environment.
  /environments/{environmentId}:
    parameters:
      - name: environmentId
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: retrieveEnvironment
      tags: [Environments]
      summary: Retrieve an environment
      responses:
        '200':
          description: The requested environment.
    patch:
      operationId: updateEnvironment
      tags: [Environments]
      summary: Update an environment
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated environment.
    delete:
      operationId: deleteEnvironment
      tags: [Environments]
      summary: Delete an environment
      responses:
        '204':
          description: The environment was deleted.
  /owners:
    get:
      operationId: listOwners
      tags: [Workspaces]
      summary: List workspaces
      description: List the workspaces (owners) the API key can access.
      responses:
        '200':
          description: A list of workspaces.
  /owners/{ownerId}:
    parameters:
      - $ref: '#/components/parameters/OwnerId'
    get:
      operationId: retrieveOwner
      tags: [Workspaces]
      summary: Retrieve a workspace
      responses:
        '200':
          description: The requested workspace.
  /owners/{ownerId}/members:
    parameters:
      - $ref: '#/components/parameters/OwnerId'
    get:
      operationId: listOwnerMembers
      tags: [Workspaces]
      summary: List workspace members
      responses:
        '200':
          description: A list of members.
  /owners/{ownerId}/members/{userId}:
    parameters:
      - $ref: '#/components/parameters/OwnerId'
      - name: userId
        in: path
        required: true
        schema:
          type: string
    patch:
      operationId: updateOwnerMember
      tags: [Workspaces]
      summary: Update a member's role
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated member.
    delete:
      operationId: removeOwnerMember
      tags: [Workspaces]
      summary: Remove a member
      responses:
        '204':
          description: The member was removed.
  /owners/{ownerId}/audit-logs:
    parameters:
      - $ref: '#/components/parameters/OwnerId'
    get:
      operationId: listAuditLogs
      tags: [Workspaces]
      summary: List workspace audit logs
      responses:
        '200':
          description: A list of audit log entries.
  /registrycredentials:
    get:
      operationId: listRegistryCredentials
      tags: [Registry Credentials]
      summary: List registry credentials
      responses:
        '200':
          description: A list of registry credentials.
    post:
      operationId: createRegistryCredential
      tags: [Registry Credentials]
      summary: Create a registry credential
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: The created registry credential.
  /registrycredentials/{registryCredentialId}:
    parameters:
      - name: registryCredentialId
        in: p

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