Render Workspaces & Members API
List and retrieve the workspaces (owners) your API key can access, manage workspace members and their roles, and read workspace and organization audit logs. Owner IDs scope most other resources in the API.
List and retrieve the workspaces (owners) your API key can access, manage workspace members and their roles, and read workspace and organization audit logs. Owner IDs scope most other resources in the API.
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