openapi: 3.0.2 info: title: Render Public Audit Logs Projects & Environments API description: Manage everything about your Render services version: 1.0.0 contact: name: Render API url: https://community.render.com email: support@render.com servers: - url: https://api.render.com/v1 security: - BearerAuth: [] tags: - name: Projects & Environments description: Collections of services and other resources organized by environment (staging, production, etc.) paths: /projects: get: tags: - Projects & Environments summary: List projects description: 'List projects matching the provided filters. If no filters are provided, all projects are returned. ' operationId: list-projects parameters: - $ref: '#/components/parameters/nameParam' - $ref: '#/components/parameters/createdBeforeParam' - $ref: '#/components/parameters/createdAfterParam' - $ref: '#/components/parameters/updatedBeforeParam' - $ref: '#/components/parameters/updatedAfterParam' - $ref: '#/components/parameters/ownerIdParam' - $ref: '#/components/parameters/cursorParam' - $ref: '#/components/parameters/limitParam' responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/projectWithCursor' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' post: tags: - Projects & Environments summary: Create project description: 'Create a new project. ' operationId: create-project requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/projectPOSTInput' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/project' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' /projects/{projectId}: get: tags: - Projects & Environments summary: Retrieve Project description: 'Retrieve the project with the provided ID. ' operationId: retrieve-project parameters: - in: path name: projectId required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/project' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' patch: tags: - Projects & Environments summary: Update project description: 'Update the details of a project. To update the details of a particular _environment_ in the project, instead use the [Update environment](https://api-docs.render.com/reference/update-environment) endpoint. ' operationId: update-project parameters: - in: path name: projectId required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/projectPATCHInput' responses: '200': description: Updated content: application/json: schema: $ref: '#/components/schemas/project' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' delete: tags: - Projects & Environments summary: Delete project description: 'Delete the project with the provided ID. Requires _all_ of the project''s environments to be empty (i.e., they must contain no services or other resources). Otherwise, deletion fails with a `409` response. To delete a non-empty project, do one of the following: - First move or delete all contained services and other resources. - Delete the project in the [Render Dashboard](https://dashboard.render.com). ' operationId: delete-project parameters: - in: path name: projectId required: true schema: type: string responses: '204': description: Project deleted '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' /environments: post: tags: - Projects & Environments summary: Create environment description: 'Create a new environment belonging to the project with the provided ID. ' operationId: create-environment requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/environmentPOSTInput' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/environment' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' get: tags: - Projects & Environments summary: List environments description: 'List a particular project''s environments matching the provided filters. If no filters are provided, all environments are returned. ' operationId: list-environments parameters: - $ref: '#/components/parameters/nameParam' - $ref: '#/components/parameters/projectIdParam' - $ref: '#/components/parameters/createdBeforeParam' - $ref: '#/components/parameters/createdAfterParam' - $ref: '#/components/parameters/updatedBeforeParam' - $ref: '#/components/parameters/updatedAfterParam' - $ref: '#/components/parameters/ownerIdParam' - $ref: '#/components/parameters/environmentIdParam' - $ref: '#/components/parameters/cursorParam' - $ref: '#/components/parameters/limitParam' responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/environmentWithCursor' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' /environments/{environmentId}: get: parameters: - in: path name: environmentId required: true schema: type: string tags: - Projects & Environments summary: Retrieve environment description: Retrieve the environment with the provided ID. operationId: retrieve-environment responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/environment' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' patch: parameters: - in: path name: environmentId required: true schema: type: string tags: - Projects & Environments summary: Update environment description: Update the details of the environment with the provided ID. operationId: update-environment requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/environmentPATCHInput' responses: '200': description: Updated content: application/json: schema: $ref: '#/components/schemas/environment' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' delete: parameters: - in: path name: environmentId required: true schema: type: string tags: - Projects & Environments summary: Delete environment description: 'Delete the environment with the provided ID. Requires the environment to be empty (i.e., it must contain no services or other resources). Otherwise, deletion fails with a `409` response. To delete a non-empty environment, do one of the following: - First move or delete all contained services and other resources. - Delete the environment in the [Render Dashboard](https://dashboard.render.com). ' operationId: delete-environment responses: '204': description: Environment deleted '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' /environments/{environmentId}/resources: post: description: 'Add resources to the environment with the provided ID. ' parameters: - in: path name: environmentId required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/environmentResourcesPOSTInput' tags: - Projects & Environments summary: Add resources to environment operationId: add-resources-to-environment responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/environment' '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' delete: description: 'Remove resources from the environment with the provided ID. ' parameters: - in: path name: environmentId required: true schema: type: string - in: query name: resourceIds required: true schema: type: array items: type: string description: The ID of an env group, a service, a Postgres database, or a Redis instance tags: - Projects & Environments operationId: remove-resources-from-environment summary: Remove resources from environment responses: '204': description: Resources removed from environment '400': $ref: '#/components/responses/400BadRequest' '401': $ref: '#/components/responses/401Unauthorized' '404': $ref: '#/components/responses/404NotFound' '429': $ref: '#/components/responses/429RateLimit' '500': $ref: '#/components/responses/500InternalServerError' '503': $ref: '#/components/responses/503ServiceUnavailable' components: responses: 429RateLimit: description: Rate limit has been surpassed. content: application/json: schema: $ref: '#/components/schemas/error' 503ServiceUnavailable: description: Server currently unavailable. content: application/json: schema: $ref: '#/components/schemas/error' 500InternalServerError: description: An unexpected server error has occurred. content: application/json: schema: $ref: '#/components/schemas/error' 404NotFound: description: Unable to find the requested resource. content: application/json: schema: $ref: '#/components/schemas/error' 400BadRequest: description: The request could not be understood by the server. content: application/json: schema: $ref: '#/components/schemas/error' 401Unauthorized: description: Authorization information is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/error' schemas: projectPOSTInput: type: object required: - name - ownerId - environments properties: name: description: The name of the project type: string ownerId: description: The ID of the owner that the project belongs to type: string environments: description: The environments to create when creating the project type: array items: $ref: '#/components/schemas/projectPOSTEnvironmentInput' project: description: A project is a collection of environments type: object required: - id - createdAt - updatedAt - name - owner - environmentIds properties: id: description: The ID of the project type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time name: description: The name of the project type: string owner: $ref: '#/components/schemas/owner' environmentIds: description: The environments associated with the project type: array items: type: string description: The ID of the environment owner: type: object required: - id - name - email - type properties: id: type: string name: type: string email: type: string ipAllowList: type: array items: $ref: '#/components/schemas/cidrBlockAndDescription' twoFactorAuthEnabled: type: boolean description: Whether two-factor authentication is enabled for the owner. Only present if `type` is `user`. type: type: string enum: - user - team cursor: type: string cidrBlockAndDescription: type: object required: - cidrBlock - description properties: cidrBlock: type: string description: description: User-provided description of the CIDR block type: string projectPATCHInput: description: Input type for updating a project type: object properties: name: type: string environmentWithCursor: type: object description: An environment with a cursor required: - environment - cursor properties: environment: $ref: '#/components/schemas/environment' cursor: $ref: '#/components/schemas/cursor' protectedStatus: type: string description: Indicates whether an environment is `unprotected` or `protected`. Only admin users can perform destructive actions in `protected` environments. enum: - unprotected - protected environmentPATCHInput: type: object properties: name: type: string networkIsolationEnabled: $ref: '#/components/schemas/networkIsolationEnabled' protectedStatus: $ref: '#/components/schemas/protectedStatus' ipAllowList: type: array items: $ref: '#/components/schemas/cidrBlockAndDescription' environmentPOSTInput: type: object required: - name - projectId properties: name: type: string projectId: type: string protectedStatus: $ref: '#/components/schemas/protectedStatus' networkIsolationEnabled: $ref: '#/components/schemas/networkIsolationEnabled' ipAllowList: type: array items: $ref: '#/components/schemas/cidrBlockAndDescription' networkIsolationEnabled: type: boolean description: Indicates whether network connections across environments are allowed. error: type: object properties: id: type: string message: type: string projectPOSTEnvironmentInput: type: object required: - name properties: name: type: string protectedStatus: $ref: '#/components/schemas/protectedStatus' networkIsolationEnabled: $ref: '#/components/schemas/networkIsolationEnabled' ipAllowList: type: array items: $ref: '#/components/schemas/cidrBlockAndDescription' environmentResourcesPOSTInput: type: object required: - resourceIds properties: resourceIds: type: array items: type: string description: The ID of an env group, a service, a Postgres database, or a Redis instance projectWithCursor: type: object required: - project - cursor properties: project: $ref: '#/components/schemas/project' cursor: $ref: '#/components/schemas/cursor' environment: type: object required: - id - name - projectId - databasesIds - redisIds - serviceIds - envGroupIds - protectedStatus - networkIsolationEnabled properties: id: type: string name: type: string projectId: type: string databasesIds: type: array items: type: string ipAllowList: type: array items: $ref: '#/components/schemas/cidrBlockAndDescription' redisIds: type: array items: type: string serviceIds: type: array items: type: string envGroupIds: type: array items: type: string protectedStatus: $ref: '#/components/schemas/protectedStatus' networkIsolationEnabled: $ref: '#/components/schemas/networkIsolationEnabled' parameters: cursorParam: name: cursor in: query required: false description: The position in the result list to start from when fetching paginated results. For details, see [Pagination](https://api-docs.render.com/reference/pagination). schema: type: string projectIdParam: name: projectId in: query schema: type: array items: type: string style: form explode: false required: true description: Filter for resources that belong to a project updatedAfterParam: name: updatedAfter in: query schema: type: string format: date-time required: false description: Filter for resources updated after a certain time (specified as an ISO 8601 timestamp) example: '2021-06-17T08:15:30Z' createdBeforeParam: name: createdBefore in: query schema: type: string format: date-time required: false description: Filter for resources created before a certain time (specified as an ISO 8601 timestamp) example: '2021-06-17T08:15:30Z' environmentIdParam: name: environmentId in: query schema: type: array items: type: string style: form explode: false required: false description: Filter for resources that belong to an environment ownerIdParam: name: ownerId in: query description: The ID of the workspaces to return resources for schema: type: array items: type: string style: form explode: false required: false limitParam: name: limit in: query required: false description: The maximum number of items to return. For details, see [Pagination](https://api-docs.render.com/reference/pagination). schema: type: integer default: 20 minimum: 1 maximum: 100 description: Defaults to 20 updatedBeforeParam: name: updatedBefore in: query schema: type: string format: date-time required: false description: Filter for resources updated before a certain time (specified as an ISO 8601 timestamp) example: '2021-06-17T08:15:30Z' nameParam: name: name in: query schema: type: array items: type: string style: form explode: false required: false description: Filter by name createdAfterParam: name: createdAfter in: query schema: type: string format: date-time required: false description: Filter for resources created after a certain time (specified as an ISO 8601 timestamp) example: '2021-02-17T08:15:30Z' securitySchemes: BearerAuth: type: http scheme: bearer x-readme: metrics-enabled: false