{ "openapi": "3.0.2", "info": { "title": "Render Public 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" } }, "x-readme": { "metrics-enabled": false }, "servers": [ { "url": "https://api.render.com/v1" } ], "security": [ { "BearerAuth": [] } ], "tags": [ { "name": "Audit Logs", "description": "[Audit Logs](https://render.com/docs/audit-logs) allow you to retrieve audit logs for workspaces and organizations.\nThese logs provide a trail of actions and changes made to your resources.\n" }, { "name": "Blueprints", "description": "[Blueprints](https://render.com/docs/infrastructure-as-code) allow you to define your resources in a `render.yaml` file and automatically sync changes to your Render services.\nThe API gives control over how your Blueprints are used to create and manage resources.\n" }, { "name": "Custom Domains", "description": "[Custom Domains](https://render.com/docs/custom-domains) allow you to associate domain names with your Render services.\n" }, { "name": "Deploys", "description": "[Deploys](https://render.com/docs/deploys) are the process of updating your service with new code or configuration.\nThese endpoints allow you to retrieve data on the deploys of your services\nas well as trigger new deploys and rollbacks. Most changes to your service\nwill require a new deploy to take effect.\n\nTo create and manage services, use the `Services` endpoints.\n" }, { "name": "Disks", "description": "[Disks](https://render.com/docs/disks) allow you to attach persistent storage to your services.\n" }, { "name": "Environment Groups", "description": "Collections of environment variables and secret files that can be shared between multiple services" }, { "name": "Events", "description": "View events for a service, postgres or key value" }, { "name": "Key Value", "description": "[Key Value](https://render.com/docs/key-value) allows you to interact with your Render Key Value instances.\n" }, { "name": "Logs", "description": "[Logs](https://render.com/docs/logging) allow you to retrieve logs for your services, Postgres databases, and redis instances.\nYou can query for logs or subscribe to logs in real-time via a websocket.\n" }, { "name": "Maintenance", "description": "The `Maintenance` endpoints allow you to retrieve the latest maintenance runs for your Render services. You can also reschedule maintenance or trigger it to start immediately." }, { "name": "Metrics", "description": "The `Metrics` endpoints allow you to retrieve metrics for your services, Postgres databases, and redis instances." }, { "name": "Notification Settings", "description": "[Notification Settings](https://render.com/docs/notifications) allow you to configure which notifications you want to recieve, and\nwhere you will receive them.\n" }, { "name": "One-Off Jobs", "description": "[One-off jobs](https://render.com/docs/one-off-jobs) are standalone tasks that run to completion using the most recent successful build of an existing service.\n" }, { "name": "Postgres", "description": "[Postgres](https://render.com/docs/postgresql) endpoints enable you to interact with your Render Postgres databases.\nYou can manage databases, exports, recoveries, and failovers.\n" }, { "name": "Projects & Environments", "description": "Collections of services and other resources organized by environment (staging, production, etc.)" }, { "name": "Registry Credentials", "description": "[Registry Credentials](https://render.com/docs/deploying-an-image#credentials-for-private-images) allows you to manage credentials for private Docker images.\n" }, { "name": "Services", "description": "[Services](https://render.com/docs/service-types) allow you to manage your web services, private services, background workers, cron jobs, and static sites.\n" }, { "name": "Services - Cron Jobs", "description": "[Cron Jobs](https://render.com/docs/cronjobs) allow you to interact with runs of your cron jobs.\n" }, { "name": "Services - Headers", "description": "Use HTTP headers to inject response headers in static site responses. You can also use wildcards like /path/* to add headers to responses for all matching request paths." }, { "name": "Services - Routes", "description": "Add Redirect or Rewrite Rules to modify requests to your site without writing code. You can use URL parameters to capture path segments, and wildcards to redirect everything under a given path." }, { "name": "Users", "description": "The `User` endpoints allow you to retrieve information about the authenticated user\n" }, { "name": "Workspaces", "description": "The `Workspaces` endpoints supply more information about the workspaces that your API key has access to. This category was previously called `Owners`, as reflected by endpoint paths." }, { "name": "Webhooks", "description": "[Webhooks](https://render.com/docs/webhooks) allows you to manage your Render webhook configuration.\n" }, { "name": "Workflows (Beta)", "description": "Create and manage [Render Workflows](https://render.com/docs/workflows) services. Workflows are in public beta.\n" }, { "name": "Workflow Tasks (Beta)", "description": "Run and manage tasks as part of [Render Workflows](https://render.com/docs/workflows). Workflows are in public beta.\n" }, { "name": "Redis (Deprecated)", "description": "[Redis](https://render.com/docs/redis) allows you to interact with your Render Redis instances. This API is deprecated in favor of the Key Value API.\n" } ], "paths": { "/blueprints": { "get": { "summary": "List Blueprints", "description": "List Blueprints for the specified workspaces. If no workspaces are provided, returns all Blueprints the API key has access to.\n", "operationId": "list-blueprints", "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "tags": [ "Blueprints" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/blueprintWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/blueprints/validate": { "post": { "summary": "Validate Blueprint", "description": "Validate a `render.yaml` Blueprint file without creating or modifying any resources. This endpoint checks the syntax and structure of the Blueprint, validates that all required fields are present, and returns a plan indicating the resources that would be created.\n\nRequests to this endpoint use `Content-Type: multipart/form-data`. The provided Blueprint file cannot exceed 10MB in size.\n", "operationId": "validate-blueprint", "tags": [ "Blueprints" ], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "type": "object", "required": [ "ownerId", "file" ], "properties": { "ownerId": { "type": "string", "description": "The ID of the workspace to validate against. Obtain your workspace ID from its Settings page in the Render Dashboard.", "example": "tea-cjnxpkdhshc73d12t9i0" }, "file": { "type": "string", "format": "binary", "description": "The render.yaml file to validate, as a binary file." } } } } } }, "responses": { "200": { "description": "Validation complete", "content": { "application/json": { "schema": { "type": "object", "required": [ "valid" ], "properties": { "valid": { "type": "boolean", "description": "If `true`, the Blueprint validated successfully. If `false`, at least one validation error occurred." }, "errors": { "type": "array", "items": { "type": "object", "required": [ "error" ], "properties": { "path": { "type": "string", "description": "The path to the field with the error (e.g., `services[0].plan`)" }, "error": { "type": "string", "description": "The error message" }, "line": { "type": "integer", "description": "The line number in the YAML file (1-indexed)" }, "column": { "type": "integer", "description": "The column number in the YAML file (1-indexed)" } } }, "description": "A list of validation errors. Only present if `valid` is `false`." }, "plan": { "description": "A summary of the resources that would be created as part of the Blueprint. Only present if `valid` is `true`.", "type": "object", "properties": { "services": { "type": "array", "items": { "type": "string" }, "description": "The names of services that would be created as part of the Blueprint." }, "databases": { "type": "array", "items": { "type": "string" }, "description": "The names of Render Postgres databases that would be created as part of the Blueprint." }, "keyValue": { "type": "array", "items": { "type": "string" }, "description": "The names of Render Key Value instances that would be created as part of the Blueprint." }, "envGroups": { "type": "array", "items": { "type": "string" }, "description": "The names of environment groups that would be created as part of the Blueprint." }, "totalActions": { "type": "integer", "description": "The total number of actions that would be performed by the Blueprint. In addition to created resources, this includes modifications to individual configuration fields." } } } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/owners/{ownerId}/members/{userId}": { "parameters": [ { "$ref": "#/components/parameters/ownerIdPathParam" }, { "$ref": "#/components/parameters/userIdPathParam" } ], "patch": { "summary": "Update workspace member role", "description": "Update the role of an existing workspace member.\n", "operationId": "update-workspace-member", "tags": [ "Workspaces" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "role" ], "properties": { "role": { "$ref": "#/components/schemas/teamMemberRole" } } }, "example": { "role": "ADMIN" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/teamMember" }, "example": { "userId": "usr-0r1b2c3d4e5f6g7h8i9", "name": "Jane Doe", "email": "jane.doe@example.com", "status": "active", "role": "ADMIN", "mfaEnabled": true } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Remove workspace member", "description": "Remove a user from the specified workspace.\n", "operationId": "remove-workspace-member", "tags": [ "Workspaces" ], "responses": { "204": { "description": "No Content" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/blueprints/{blueprintId}": { "parameters": [ { "name": "blueprintId", "in": "path", "required": true, "description": "The ID of the Blueprint", "schema": { "type": "string", "pattern": "^exs-[0-9a-z]{20}$", "example": "exs-cph1rs3idesc73a2b2mg" } } ], "get": { "summary": "Retrieve Blueprint", "description": "Retrieve the Blueprint with the provided ID.\n", "operationId": "retrieve-blueprint", "tags": [ "Blueprints" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "name", "status", "autoSync", "repo", "branch", "path", "resources" ], "properties": { "id": { "$ref": "#/paths/~1blueprints~1%7BblueprintId%7D/parameters/0/schema" }, "name": { "type": "string" }, "status": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint/properties/status" }, "autoSync": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint/properties/autoSync" }, "repo": { "type": "string" }, "branch": { "type": "string" }, "path": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint/properties/path" }, "lastSync": { "type": "string", "format": "date-time" }, "resources": { "type": "array", "items": { "type": "object", "required": [ "id", "name", "type" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "description": "type of the resource (ex. web_service or postgres)", "enum": [ "static_site", "web_service", "private_service", "background_worker", "cron_job", "redis", "key_value", "postgres", "environment_group" ] } } } } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update Blueprint", "description": "Update the Blueprint with the provided ID.\n", "operationId": "update-blueprint", "tags": [ "Blueprints" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "autoSync": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint/properties/autoSync" }, "path": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint/properties/path" } } } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/blueprintWithCursor/properties/blueprint" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Disconnect Blueprint", "operationId": "disconnect-blueprint", "description": "Disconnect the Blueprint with the provided ID.\n\nDisconnecting a Blueprint stops automatic resource syncing via the associated `render.yaml` file. It does not _delete_ any services or other resources that were managed by the blueprint.\n", "tags": [ "Blueprints" ], "responses": { "204": { "description": "Blueprint disconnected" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/blueprints/{blueprintId}/syncs": { "parameters": [ { "$ref": "#/paths/~1blueprints~1%7BblueprintId%7D/parameters/0" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "get": { "description": "List syncs for the Blueprint with the provided ID.\n", "summary": "List Blueprint syncs", "operationId": "list-blueprint-syncs", "tags": [ "Blueprints" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/syncWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/disks": { "get": { "summary": "List disks", "description": "List persistent disks matching the provided filters. If no filters are provided, returns all disks you have permissions to view.\n", "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "name": "diskId", "in": "query", "description": "Filter by disk IDs", "schema": { "type": "array", "items": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" } } }, { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/createdBeforeParam" }, { "$ref": "#/components/parameters/createdAfterParam" }, { "$ref": "#/components/parameters/updatedBeforeParam" }, { "$ref": "#/components/parameters/updatedAfterParam" }, { "$ref": "#/components/parameters/serviceIdsParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "operationId": "list-disks", "tags": [ "Disks" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/diskWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Add disk", "description": "Attach a persistent disk to a web service, private service, or background worker.\n\nThe service must be redeployed for the disk to be attached.\n", "operationId": "add-disk", "tags": [ "Disks" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "sizeGB", "mountPath", "serviceId" ], "properties": { "name": { "type": "string" }, "sizeGB": { "type": "integer" }, "mountPath": { "type": "string" }, "serviceId": { "type": "string" } } } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/diskWithCursor/properties/disk" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/disks/{diskId}": { "parameters": [ { "name": "diskId", "in": "path", "required": true, "description": "The ID of the disk", "schema": { "type": "string", "pattern": "^dsk-[0-9a-z]{20}$", "example": "dsk-cph1rs3idesc73a2b2mg" } } ], "get": { "summary": "Retrieve disk", "description": "Retrieve the persistent disk with the provided ID.\n", "operationId": "retrieve-disk", "tags": [ "Disks" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/diskWithCursor/properties/disk" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update disk", "description": "Update the persistent disk with the provided ID.\n\nThe disk's associated service must be deployed and active for updates to take effect.\n\nWhen resizing a disk, the new size must be greater than the current size.\n", "operationId": "update-disk", "tags": [ "Disks" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "sizeGB": { "type": "integer" }, "mountPath": { "type": "string" } } } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/diskWithCursor/properties/disk" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete disk", "description": "Delete a persistent disk attached to a service.\n\n**All data on the disk will be lost.** The disk's associated service will immediately lose access to it.\n", "operationId": "delete-disk", "tags": [ "Disks" ], "responses": { "204": { "description": "Disk deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/disks/{diskId}/snapshots": { "parameters": [ { "name": "diskId", "in": "path", "required": true, "description": "The ID of the disk", "schema": { "type": "string" } } ], "get": { "summary": "List snapshots", "description": "List snapshots for the persistent disk with the provided ID. Each snapshot is a point-in-time copy of the disk's data.\n", "operationId": "list-snapshots", "tags": [ "Disks" ], "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/diskSnapshot" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/disks/{diskId}/snapshots/restore": { "parameters": [ { "name": "diskId", "in": "path", "required": true, "description": "The ID of the disk", "schema": { "type": "string" } } ], "post": { "summary": "Restore snapshot", "description": "Restore a persistent disk to an available snapshot.\n\n**This operation is irreversible.** It will overwrite the current disk data. It might also trigger a service deploy.\n\nSnapshot keys returned from the [List snapshots](https://api-docs.render.com/reference/list-snapshots) endpoint expire after 24 hours. If a snapshot key has expired, query the endpoint again for a new key.\n", "operationId": "restore-snapshot", "tags": [ "Disks" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/snapshotRestorePOST" } } } }, "responses": { "200": { "description": "Restored", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/diskWithCursor/properties/disk" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/users": { "get": { "summary": "Get the authenticated user", "description": "Retrieve the user associated with the provided API key.\n", "operationId": "get-user", "tags": [ "Users" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/user" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/owners": { "get": { "summary": "List workspaces", "description": "List the workspaces that your API key has access to, optionally filtered by name or owner email address.\n", "operationId": "list-owners", "tags": [ "Workspaces" ], "parameters": [ { "name": "name", "description": "Only return workspaces with one of the provided names. Only exact matches are returned.", "in": "query", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "email", "description": "Only return workspaces owned by one of the provided email addresses.", "in": "query", "schema": { "type": "array", "items": { "type": "string" } } }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ownerWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/owners/{ownerId}": { "parameters": [ { "name": "ownerId", "in": "path", "required": true, "description": "The ID of the user or team", "schema": { "type": "string" } } ], "get": { "summary": "Retrieve workspace", "description": "Retrieve the workspace with the provided ID.\n\nWorkspace IDs start with `tea-`. If you provide a user ID (starts with `own-`), this endpoint returns the user's default workspace.\n", "operationId": "retrieve-owner", "tags": [ "Workspaces" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/owner" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/owners/{ownerId}/members": { "parameters": [ { "name": "ownerId", "in": "path", "required": true, "description": "The ID of the team", "schema": { "type": "string" } } ], "get": { "summary": "List workspace members", "description": "Retrieves the list of users belonging to the workspace with the provided ID.\n", "operationId": "retrieve-owner-members", "tags": [ "Workspaces" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/teamMembers" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/owners/{ownerId}/audit-logs": { "parameters": [ { "$ref": "#/components/parameters/ownerIdPathParam" } ], "get": { "summary": "List workspace audit logs", "description": "Retrieve audit logs for a specific workspace with optional filtering and pagination.\n", "operationId": "list-owner-audit-logs", "tags": [ "Audit Logs" ], "parameters": [ { "name": "startTime", "in": "query", "required": false, "description": "Start time for filtering audit logs (ISO 8601 format)", "schema": { "type": "string", "format": "date-time", "example": "2023-01-01T00:00:00Z" } }, { "name": "endTime", "in": "query", "required": false, "description": "End time for filtering audit logs (ISO 8601 format)", "schema": { "type": "string", "format": "date-time", "example": "2023-12-31T23:59:59Z" } }, { "$ref": "#/paths/~1logs/get/parameters/3" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/auditLogLimitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/auditLogWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/organizations/{orgId}/audit-logs": { "parameters": [ { "name": "orgId", "in": "path", "required": true, "description": "The unique identifier of the organization", "schema": { "type": "string" } } ], "get": { "summary": "List organization audit logs", "description": "Retrieve audit logs for a specific organization with optional filtering and pagination.\n", "operationId": "list-organization-audit-logs", "tags": [ "Audit Logs" ], "parameters": [ { "name": "startTime", "in": "query", "required": false, "description": "Start time for filtering audit logs (ISO 8601 format)", "schema": { "type": "string", "format": "date-time", "example": "2023-01-01T00:00:00Z" } }, { "name": "endTime", "in": "query", "required": false, "description": "End time for filtering audit logs (ISO 8601 format)", "schema": { "type": "string", "format": "date-time", "example": "2023-12-31T23:59:59Z" } }, { "$ref": "#/paths/~1logs/get/parameters/3" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/auditLogLimitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/auditLogWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/notification-settings/owners/{ownerId}": { "parameters": [ { "$ref": "#/components/parameters/ownerIdPathParam" } ], "get": { "summary": "Retrieve notification settings", "description": "Retrieve notification settings for the owner with the provided ID.\n\nNote that you provide an owner ID to this endpoint, not the ID for a particular resource.\n", "operationId": "retrieve-owner-notification-settings", "tags": [ "Notification Settings" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "required": [ "ownerId", "slackEnabled", "emailEnabled", "previewNotificationsEnabled", "notificationsToSend" ], "properties": { "ownerId": { "type": "string" }, "slackEnabled": { "type": "boolean" }, "emailEnabled": { "type": "boolean" }, "previewNotificationsEnabled": { "type": "boolean" }, "notificationsToSend": { "$ref": "#/paths/~1notification-settings~1owners~1%7BownerId%7D/patch/requestBody/content/application~1json/schema/properties/notificationsToSend" } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update notification settings", "description": "Update notification settings for the owner with the provided ID.\n", "operationId": "patch-owner-notification-settings", "tags": [ "Notification Settings" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "emailEnabled": { "type": "boolean" }, "previewNotificationsEnabled": { "type": "boolean" }, "notificationsToSend": { "type": "string", "enum": [ "none", "failure", "all" ] } } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/paths/~1notification-settings~1owners~1%7BownerId%7D/get/responses/200/content/application~1json/schema" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/notification-settings/overrides": { "get": { "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/serviceIdsParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "summary": "List notification overrides", "description": "List notification overrides matching the provided filters. If no filters are provided, returns all notification overrides for all workspaces the user belongs to.\n", "operationId": "list-notification-overrides", "tags": [ "Notification Settings" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/notificationOverrideWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/notification-settings/overrides/services/{serviceId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "Retrieve notification override", "description": "Retrieve the notification override for the service with the provided ID.\n\nNote that you provide a service ID to this endpoint, not the ID for a particular override.\n", "operationId": "retrieve-service-notification-overrides", "tags": [ "Notification Settings" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "required": [ "serviceId", "previewNotificationsEnabled", "notificationsToSend" ], "properties": { "serviceId": { "type": "string" }, "previewNotificationsEnabled": { "$ref": "#/components/schemas/notificationOverrideWithCursor/properties/override/properties/previewNotificationsEnabled" }, "notificationsToSend": { "$ref": "#/components/schemas/notificationOverrideWithCursor/properties/override/properties/notificationsToSend" } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update notification override", "description": "Update the notification override for the service with the provided ID.\n", "operationId": "patch-service-notification-overrides", "tags": [ "Notification Settings" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "previewNotificationsEnabled": { "$ref": "#/components/schemas/notificationOverrideWithCursor/properties/override/properties/previewNotificationsEnabled" }, "notificationsToSend": { "$ref": "#/components/schemas/notificationOverrideWithCursor/properties/override/properties/notificationsToSend" } } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/paths/~1notification-settings~1overrides~1services~1%7BserviceId%7D/get/responses/200/content/application~1json/schema" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/registrycredentials": { "get": { "summary": "List registry credentials", "description": "List registry credentials matching the provided filters. If no filters are provided, returns all registry credentials you have permissions to view.\n", "operationId": "list-registry-credentials", "tags": [ "Registry Credentials" ], "parameters": [ { "name": "name", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the name of a credential" }, { "name": "username", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the username of a credential" }, { "name": "type", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/registryCredentialRegistry" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the registry type for the credential" }, { "name": "createdBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for services created before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "createdAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for services created after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "name": "updatedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for services updated before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "updatedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for services updated after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/registryCredential" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Create registry credential", "description": "Create a new registry credential.", "operationId": "create-registry-credential", "tags": [ "Registry Credentials" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "registry", "username", "authToken", "ownerId" ], "properties": { "registry": { "$ref": "#/components/schemas/registryCredentialRegistry" }, "name": { "type": "string" }, "username": { "type": "string" }, "authToken": { "type": "string" }, "ownerId": { "type": "string" } } } } } }, "responses": { "200": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/registryCredential" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "402": { "$ref": "#/components/responses/402PaymentRequired" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/registrycredentials/{registryCredentialId}": { "parameters": [ { "name": "registryCredentialId", "in": "path", "required": true, "description": "The ID of the registry credential", "schema": { "type": "string" } } ], "get": { "summary": "Retrieve registry credential", "description": "Retrieve the registry credential with the provided ID.", "operationId": "retrieve-registry-credential", "tags": [ "Registry Credentials" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/registryCredential" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update registry credential", "description": "Update the registry credential with the provided ID. Services that use this credential must be redeployed to use updated values.", "operationId": "update-registry-credential", "tags": [ "Registry Credentials" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "registry", "username", "authToken" ], "properties": { "registry": { "$ref": "#/components/schemas/registryCredentialRegistry" }, "name": { "type": "string" }, "username": { "type": "string" }, "authToken": { "type": "string" } } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/registryCredential" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "402": { "$ref": "#/components/responses/402PaymentRequired" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete registry credential", "description": "Delete the registry credential with the provided ID.", "operationId": "delete-registry-credential", "tags": [ "Registry Credentials" ], "responses": { "204": { "description": "Registry credential deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services": { "get": { "summary": "List services", "description": "List services matching the provided filters. If no filters are provided, returns all services you have permissions to view.\n", "operationId": "list-services", "tags": [ "Services" ], "parameters": [ { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/serviceTypeParam" }, { "$ref": "#/components/parameters/environmentIdParam" }, { "$ref": "#/components/parameters/envParam" }, { "$ref": "#/components/parameters/regionParam" }, { "$ref": "#/components/parameters/suspendedParam" }, { "$ref": "#/components/parameters/createdBeforeParam" }, { "$ref": "#/components/parameters/createdAfterParam" }, { "$ref": "#/components/parameters/updatedBeforeParam" }, { "$ref": "#/components/parameters/updatedAfterParam" }, { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/includePreviewsParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/serviceList" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Create service", "description": "Creates a new Render service in the specified workspace with the specified configuration.\n", "operationId": "create-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/servicePOST" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/serviceAndDeploy" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "402": { "$ref": "#/components/responses/402PaymentRequired" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "Retrieve service", "description": "Retrieve the service with the provided ID.\n", "operationId": "retrieve-service", "tags": [ "Services" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/service" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update service", "description": "Update the service with the provided ID.\n", "operationId": "update-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/servicePATCH" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/service" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "402": { "$ref": "#/components/responses/402PaymentRequired" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete service", "description": "Delete the service with the provided ID.\n", "operationId": "delete-service", "tags": [ "Services" ], "responses": { "204": { "description": "Service deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/cache/purge": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Purge Web Service Cache", "description": "Trigger cache purge for the web service if caching is enabled.\n", "operationId": "purge-cache", "tags": [ "Services" ], "requestBody": { "required": false, "content": {} }, "responses": { "202": { "description": "Cache purge request accepted" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/deploys": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List deploys", "description": "List deploys matching the provided filters. If no filters are provided, all deploys for the service are returned.\n", "operationId": "list-deploys", "tags": [ "Deploys" ], "parameters": [ { "name": "status", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/deployStatus" } }, "required": false, "description": "Filter for deploys with the specified statuses" }, { "name": "createdBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys created before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "createdAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys created after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "name": "updatedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys updated before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "updatedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys updated after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "name": "finishedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys finished before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "finishedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for deploys finished after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deployList" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Trigger deploy", "description": "Trigger a deploy for the service with the provided ID.\n", "operationId": "create-deploy", "tags": [ "Deploys" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "clearCache": { "type": "string", "enum": [ "clear", "do_not_clear" ], "default": "do_not_clear", "description": "If `clear`, Render clears the service's build cache before deploying. This can be useful if you're experiencing issues with your build." }, "commitId": { "type": "string", "description": "The SHA of a specific Git commit to deploy for a service. Defaults to the latest commit on the service's connected branch.\n\nNote that deploying a specific commit with this endpoint does not disable autodeploys for the service.\n\nYou can toggle autodeploys for your service with the [Update service](https://api-docs.render.com/reference/update-service) endpoint or in the Render Dashboard.\n\nNot supported for cron jobs.\n" }, "imageUrl": { "type": "string", "description": "The URL of the image to deploy for an image-backed service.\n\nThe host, repository, and image name all must match the currently configured image for the service.\n" }, "deployMode": { "$ref": "#/components/schemas/DeployMode", "description": "Deployment mode controlling build and deploy behavior.\n\nDefaults to `build_and_deploy` when not specified.\n\n**Validation:** `deploy_mode` cannot be combined with `commitId` or `imageUrl` or `clearCache`.\n" } } } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deploy" } } } }, "202": { "description": "Queued" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/deploys/{deployId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/deployIdParam" } ], "get": { "summary": "Retrieve deploy", "description": "Retrieve the details of a particular deploy for a particular service.\n", "operationId": "retrieve-deploy", "tags": [ "Deploys" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deploy" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/deploys/{deployId}/cancel": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/deployIdParam" } ], "post": { "summary": "Cancel deploy", "description": "Cancel an in-progress deploy for a service.\n\nNot supported for cron jobs.\n", "operationId": "cancel-deploy", "tags": [ "Deploys" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deploy" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/rollback": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Roll back deploy", "description": "Trigger a rollback to a previous deploy of the specified service.\n\nTriggering a rollback with this endpoint does not disable autodeploys for the service. This means an autodeploy might restore changes you had intentionally rolled back.\n\nYou can toggle autodeploys for your service with the [Update service](https://api-docs.render.com/reference/update-service) endpoint or in the Render Dashboard.\n", "operationId": "rollback-deploy", "tags": [ "Deploys" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "deployId" ], "properties": { "deployId": { "type": "string", "description": "The ID of the deploy to roll back to" } } } } } }, "responses": { "201": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/deploy" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/env-vars": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List environment variables", "description": "List all environment variables for the service with the provided ID.\n", "operationId": "get-env-vars-for-service", "tags": [ "Services" ], "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/envVarWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Update environment variables", "description": "Replace all environment variables for a service with the provided list of environment variables.", "operationId": "update-env-vars-for-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envVarInputArray" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/envVarWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/env-vars/{envVarKey}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/envVarKeyParam" } ], "get": { "summary": "Retrieve environment variable", "description": "Retrieve a particular environment variable for a particular service.\n\nThis only applies to environment variables set directly on the service, not to environment variables in a linked environment group.\n", "operationId": "retrieve-env-var", "tags": [ "Services" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envVar" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Add or update environment variable", "description": "Add or update a particular environment variable for a particular service.\n\nThis only applies to environment variables set directly on the service, not to environment variables in a linked environment group.\n", "operationId": "update-env-var", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/addUpdateEnvVarInput" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envVar" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete environment variable", "description": "Delete a particular environment variable from a particular service.\n\nThis only applies to environment variables set directly on the service, not to environment variables in a linked environment group.\n", "operationId": "delete-env-var", "tags": [ "Services" ], "responses": { "204": { "description": "Environment variable deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/secret-files": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List secret files", "description": "List all secret files for the service with the provided ID.\n", "operationId": "list-secret-files-for-service", "tags": [ "Services" ], "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/secretFileWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Update secret files", "description": "Replace all secret files for a service with the provided list of secret files.\n\n**Any of the service's existing secret files not included in this request will be deleted.**\n\nThis only applies to secret files set directly on the service, not to secret files in a linked environment group.\n", "operationId": "update-secret-files-for-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/secretFileInput" } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/secretFileWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/secret-files/{secretFileName}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "name": "secretFileName", "in": "path", "required": true, "description": "The file name of the secret file", "schema": { "type": "string" } } ], "get": { "summary": "Retrieve secret file", "description": "Retrieve a particular secret file for a particular service.\n\nThis only applies to secret files set directly on the service, not to secret files in a linked environment group.\n", "operationId": "retrieve-secret-file", "tags": [ "Services" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/secretFile" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Add or update secret file", "description": "Add or update a particular secret file for a particular service.\n\nThis only applies to secret files set directly on the service, not to secret files in a linked environment group.\n", "operationId": "add-or-update-secret-file", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "properties": { "content": { "type": "string" } } } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/secretFile" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete secret file", "description": "Delete a particular secret file from a particular service.\n\nThis only applies to secret files set directly on the service, not to secret files in a linked environment group.\n", "operationId": "delete-secret-file", "tags": [ "Services" ], "responses": { "204": { "description": "Secret file deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/events": { "get": { "tags": [ "Services" ], "summary": "List events", "description": "List recent events that occurred for the service with the provided ID.", "operationId": "list-events", "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/eventTypeParam" }, { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/serviceEventWithCursor" } } } } }, "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" } } } }, "/services/{serviceId}/headers": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List header rules", "description": "List a particular service's response header rules that match the provided filters. If no filters are provided, all rules for the service are returned.\n", "operationId": "list-headers", "tags": [ "Services - Headers" ], "parameters": [ { "name": "path", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for specific paths that headers apply to" }, { "name": "name", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for header names" }, { "name": "value", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for header values" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/headerWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Add header rule", "description": "Add a response header rule to the service with the provided ID.\n", "operationId": "add-headers", "tags": [ "Services - Headers" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/headerInput" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "type": "object", "properties": { "headers": { "$ref": "#/components/schemas/header" } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Replace header rules", "description": "Replace all header rules for a particular service with the provided list.\n\n**This deletes all existing header rules for the service that aren't included in the request.**\n", "operationId": "update-headers", "tags": [ "Services - Headers" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/headerInput" } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/header" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/headers/{headerId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "name": "headerId", "in": "path", "required": true, "description": "The id of the header", "schema": { "type": "string" } } ], "delete": { "summary": "Delete header rule", "description": "Delete a particular response header rule for a particular service.\n", "operationId": "delete-header", "tags": [ "Services - Headers" ], "responses": { "204": { "description": "Header deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/routes": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List redirect/rewrite rules", "description": "List a particular service's redirect/rewrite rules that match the provided filters. If no filters are provided, all rules for the service are returned.\n", "operationId": "list-routes", "tags": [ "Services - Routes" ], "parameters": [ { "name": "type", "in": "query", "schema": { "type": "array", "items": { "type": "string", "enum": [ "redirect", "rewrite" ] } }, "style": "form", "explode": false, "required": false, "description": "Filter for the type of route rule" }, { "name": "source", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the source path of the route" }, { "name": "destination", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the destination path of the route" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/routeWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Add redirect/rewrite rules", "description": "Add redirect/rewrite rules to the service with the provided ID.\n", "operationId": "add-route", "tags": [ "Services - Routes" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/routePost" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/route" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update redirect/rewrite rule priority", "description": "Update the priority for a particular redirect/rewrite rule.\n\nTo apply redirect/rewrite rules to an incoming request, Render starts from the rule with priority `0` and applies the first encountered rule that matches the request's path (if any).\n\nRender increments the priority of other rules by `1` as necessary to make space for the updated rule.\n", "operationId": "patch-route", "tags": [ "Services - Routes" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/routePatch" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "type": "object", "properties": { "headers": { "$ref": "#/components/schemas/route" } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Update redirect/rewrite rules", "description": "Replace all redirect/rewrite rules for a particular service with the provided list.\n\n**This deletes all existing redirect/rewrite rules for the service that aren't included in the request.**\n\nRule priority is assigned according to list order (the first rule in the list has the highest priority).\n", "operationId": "put-routes", "tags": [ "Services - Routes" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/routePut" } } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/route" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/routes/{routeId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "name": "routeId", "in": "path", "required": true, "description": "The id of the route", "schema": { "type": "string" } } ], "delete": { "summary": "Delete redirect/rewrite rule", "description": "Delete a particular redirect/rewrite rule for a particular service.\n", "operationId": "delete-route", "tags": [ "Services - Routes" ], "responses": { "204": { "description": "Route deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/custom-domains": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List custom domains", "description": "List a particular service's custom domains that match the provided filters. If no filters are provided, all custom domains for the service are returned.\n", "operationId": "list-custom-domains", "tags": [ "Custom Domains" ], "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" }, { "name": "name", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter for the names of custom domain" }, { "name": "domainType", "in": "query", "schema": { "type": "string", "enum": [ "apex", "subdomain" ] }, "required": false, "description": "Filter for domain type" }, { "name": "verificationStatus", "in": "query", "schema": { "type": "string", "enum": [ "verified", "unverified" ] }, "required": false, "description": "Filter for domain verification status (`verified` or `unverified`)" }, { "name": "createdBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for custom domains created before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "createdAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for custom domains created after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/customDomainWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Add custom domain", "description": "Add a custom domain to the service with the provided ID.\n", "operationId": "create-custom-domain", "tags": [ "Custom Domains" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/customDomain" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "402": { "$ref": "#/components/responses/402PaymentRequired" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "409": { "$ref": "#/components/responses/409Conflict" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/custom-domains/{customDomainIdOrName}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/customDomainIdOrNameParam" } ], "get": { "summary": "Retrieve custom domain", "description": "Retrieve a particular custom domain for a particular service.\n", "operationId": "retrieve-custom-domain", "tags": [ "Custom Domains" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/customDomain" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete custom domain", "description": "Delete a custom domain for a service given the service id and custom domain id or name.\n", "operationId": "delete-custom-domain", "tags": [ "Custom Domains" ], "responses": { "204": { "description": "Custom domain deleted" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/custom-domains/{customDomainIdOrName}/verify": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/components/parameters/customDomainIdOrNameParam" } ], "post": { "summary": "Verify DNS configuration", "description": "Verify the DNS configuration for a custom domain.\n", "operationId": "refresh-custom-domain", "tags": [ "Custom Domains" ], "responses": { "202": { "description": "Custom domain verification triggered" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/suspend": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Suspend service", "description": "Suspend the service with the provided ID.\n", "operationId": "suspend-service", "tags": [ "Services" ], "responses": { "202": { "description": "Service suspended successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/resume": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Resume service", "description": "Resume the service with the provided ID (if it's currently suspended).\n", "operationId": "resume-service", "tags": [ "Services" ], "responses": { "202": { "description": "Service resumed successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/restart": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Restart service", "description": "Restart the service with the provided ID.\n\nNot supported for cron jobs.\n", "operationId": "restart-service", "tags": [ "Services" ], "responses": { "200": { "description": "Service restarted" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/scale": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Scale instance count", "description": "[Scale](https://render.com/docs/scaling#manual-scaling) the service with the provided ID to a fixed number of instances.\n\nRender ignores this value as long as autoscaling is enabled for the service.\n", "operationId": "scale-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "numInstances" ], "properties": { "numInstances": { "type": "integer", "example": 3 } } } } } }, "responses": { "202": { "description": "Service scaled successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/autoscaling": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "put": { "summary": "Update autoscaling config", "description": "Update the [autoscaling](https://render.com/docs/scaling#autoscaling) config for the service with the provided ID.\n", "operationId": "autoscale-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" } } } }, "responses": { "200": { "description": "Autoscaling configuration updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete autoscaling config", "description": "Delete the autoscaling config for a service given the service id.\n", "operationId": "delete-autoscaling-config", "tags": [ "Services" ], "responses": { "204": { "description": "Autoscaling config deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/preview": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "post": { "summary": "Create service preview (image-backed)", "description": "Create a preview instance for an image-backed service. The preview uses the settings of the base service (referenced by `serviceId`), except settings overridden via provided parameters.\n\nView all active previews from your service's Previews tab in the Render Dashboard.\n\nNote that you can't create previews for Git-backed services using the Render API.\n", "operationId": "preview-service", "tags": [ "Services" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/previewInput" } } } }, "responses": { "200": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/serviceAndDeploy" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/services/{serviceId}/jobs": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List jobs", "description": "List jobs for the provided service that match the provided filters. If no filters are provided, all jobs for the service are returned.\n", "operationId": "list-job", "tags": [ "One-Off Jobs" ], "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" }, { "name": "status", "in": "query", "schema": { "type": "array", "items": { "type": "string", "enum": [ "pending", "running", "succeeded", "failed", "canceled" ] } }, "style": "form", "explode": false, "required": false, "description": "Filter for the status of the job (`pending`, `running`, `succeeded`, `failed`, or `canceled`)" }, { "name": "createdBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs created before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "createdAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs created after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "name": "startedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs started before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "startedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs started after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "name": "finishedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs finished before a certain time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "finishedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for jobs finished after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/jobWithCursor" } } } } }, "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": { "summary": "Create job", "description": "Create a one-off job using the provided service. For details, see [One-Off Jobs](https://render.com/docs/one-off-jobs).\n", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "startCommand" ], "properties": { "startCommand": { "type": "string" }, "planId": { "type": "string" } } } } } }, "operationId": "post-job", "tags": [ "One-Off Jobs" ], "responses": { "201": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/jobWithCursor/properties/job" } } } }, "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" } } } }, "/services/{serviceId}/jobs/{jobId}": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "name": "jobId", "in": "path", "required": true, "description": "The ID of the job", "schema": { "type": "string", "pattern": "^job-[0-9a-z]{20}$", "example": "job-cph1rs3idesc73a2b2mg" } } ], "get": { "summary": "Retrieve job", "description": "Retrieve the details of a particular one-off job for a particular service.\n", "operationId": "retrieve-job", "tags": [ "One-Off Jobs" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/jobWithCursor/properties/job" } } } }, "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" } } } }, "/services/{serviceId}/jobs/{jobId}/cancel": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" }, { "$ref": "#/paths/~1services~1%7BserviceId%7D~1jobs~1%7BjobId%7D/parameters/1" } ], "post": { "summary": "Cancel running job", "description": "Cancel a particular one-off job for a particular service.\n", "operationId": "cancel-job", "tags": [ "One-Off Jobs" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/jobWithCursor/properties/job" } } } }, "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" } } } }, "/services/{serviceId}/instances": { "parameters": [ { "$ref": "#/components/parameters/serviceIdParam" } ], "get": { "summary": "List instances", "description": "List instances for the provided service.", "operationId": "list-instances", "tags": [ "Services" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/serviceInstance" } } } } }, "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" } } } }, "/cron-jobs/{cronJobId}/runs": { "parameters": [ { "$ref": "#/components/parameters/cronJobIdParam" } ], "post": { "summary": "Trigger cron job run", "description": "Trigger a run for a cron job and cancel any active runs.", "operationId": "run-cron-job", "tags": [ "Services - Cron Jobs" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cronJobRun" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Cancel running cron job", "description": "Cancel a currently running cron job.", "operationId": "cancel-cron-job-run", "tags": [ "Services - Cron Jobs" ], "responses": { "204": { "description": "Cancelled" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/events/{eventId}": { "parameters": [ { "name": "eventId", "in": "path", "description": "The ID of the event", "schema": { "type": "string", "pattern": "^evt-[0-9a-z]{20}$", "example": "evt-cph1rs3idesc73a2b2mg" }, "required": true } ], "get": { "summary": "Retrieve event", "description": "Retrieve the details of a particular event\n", "operationId": "retrieve-event", "tags": [ "Events" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "timestamp", "serviceId", "type", "details" ], "properties": { "id": { "$ref": "#/paths/~1events~1%7BeventId%7D/parameters/0/schema" }, "timestamp": { "type": "string", "format": "date-time" }, "serviceId": { "type": "string" }, "type": { "$ref": "#/components/schemas/webhookEventWithCursor/properties/webhookEvent/properties/eventType" }, "details": { "oneOf": [ { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details" }, { "title": "Postgres Event Details", "oneOf": [ { "title": "Postgres Available", "type": "object" }, { "title": "Postgres Backup Completed", "type": "object" }, { "title": "Postgres Backup Failed", "type": "object" }, { "title": "Postgres Backup Started", "type": "object" }, { "title": "Postgres Cluster Leader Changed", "type": "object", "properties": { "leaderId": { "type": "string" } } }, { "title": "Postgres Created", "type": "object", "properties": { "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" } } }, { "title": "Postgres Disk Size Changed", "type": "object", "required": [ "fromDiskSize", "toDiskSize" ], "properties": { "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" }, "fromDiskSize": { "type": "integer" }, "toDiskSize": { "type": "integer" } } }, { "title": "Postgres HA Status Changed", "type": "object", "required": [ "fromStatus", "toStatus" ], "properties": { "fromStatus": { "type": "string" }, "toStatus": { "type": "string" } } }, { "title": "Postgres Read Replicas Changed", "type": "object", "required": [ "fromReplicas", "toReplicas" ], "properties": { "fromReplicas": { "type": "integer" }, "toReplicas": { "type": "integer" } } }, { "title": "Postgres Restarted", "type": "object", "properties": { "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" } } }, { "title": "Postgres Unavailable", "type": "object" }, { "title": "Postgres Upgrade Failed", "type": "object", "required": [ "fromVersion", "toVersion" ], "properties": { "fromVersion": { "type": "string" }, "toVersion": { "type": "string" } } }, { "title": "Postgres Upgrade Started", "type": "object", "required": [ "fromVersion", "toVersion" ], "properties": { "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" }, "fromVersion": { "type": "string" }, "toVersion": { "type": "string" } } }, { "title": "Postgres Upgrade Succeeded", "type": "object", "required": [ "fromVersion", "toVersion" ], "properties": { "fromVersion": { "type": "string" }, "toVersion": { "type": "string" } } }, { "title": "Postgres PITR Checkpoint Started", "type": "object" }, { "title": "Postgres PITR Checkpoint Failed", "type": "object" }, { "title": "Postgres PITR Checkpoint Completed", "type": "object" }, { "title": "Postgres Read Replica Stale", "type": "object" } ] }, { "title": "Key Value Event Details", "oneOf": [ { "title": "Key Value Available", "type": "object" }, { "title": "Key Value Config Restart", "type": "object", "required": [ "reason", "message" ], "properties": { "reason": { "type": "string" }, "message": { "type": "string" } } }, { "title": "Key Value Unhealthy", "type": "object" } ] } ] } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/logs": { "get": { "summary": "List logs", "description": "List logs matching the provided filters. Logs are paginated by start and end timestamps.\nThere are more logs to fetch if `hasMore` is true in the response. Provide the `nextStartTime`\nand `nextEndTime` timestamps as the `startTime` and `endTime` query parameters to fetch the next page of logs.\n\nYou can query for logs across multiple resources, but all resources must be in the same region and belong to the same owner.\n", "operationId": "list-logs", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "query", "description": "The ID of the workspace to return logs for", "schema": { "type": "string" }, "required": true }, { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "name": "direction", "in": "query", "required": false, "description": "The direction to query logs for. Backward will return most recent logs first.\nForward will start with the oldest logs in the time range.\n", "schema": { "default": "backward", "type": "string", "enum": [ "forward", "backward" ] } }, { "name": "resource", "in": "query", "required": true, "description": "Filter logs by their resource. A resource is the id of a server, cronjob, job, postgres, redis, or workflow.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "instance", "in": "query", "required": false, "description": "Filter logs by the instance they were emitted from. An instance is the id of a specific running server.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "host", "in": "query", "required": false, "description": "Filter request logs by their host. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "statusCode", "in": "query", "required": false, "description": "Filter request logs by their status code. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "method", "in": "query", "required": false, "description": "Filter request logs by their requests method. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "task", "in": "query", "required": false, "description": "Filter logs by their task(s)", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "taskRun", "in": "query", "required": false, "description": "Filter logs by their task run id(s)", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "level", "in": "query", "required": false, "description": "Filter logs by their severity level. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "type", "in": "query", "required": false, "description": "Filter logs by their type. Types include `app` for application logs, `request` for request logs, and `build` for build logs. You can find the full set of types available for a query by using the `GET /logs/values` endpoint.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "text", "in": "query", "required": false, "description": "Filter by the text of the logs. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "path", "in": "query", "required": false, "description": "Filter request logs by their path. [Wildcards and regex](https://render.com/docs/logging#wildcards-and-regular-expressions) are supported.", "schema": { "type": "array", "items": { "type": "string" } } }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "$ref": "#/components/responses/Logs200Response" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/logs/subscribe": { "get": { "summary": "Subscribe to new logs", "description": "Open a websocket connection to subscribe to logs matching the provided filters. Logs are streamed in real-time as they are generated.\n\nYou can query for logs across multiple resources, but all resources must be in the same region and belong to the same owner.\n", "operationId": "subscribe-logs", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "query", "description": "The ID of the workspace to return logs for", "schema": { "type": "string" }, "required": true }, { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1logs/get/parameters/3" }, { "$ref": "#/paths/~1logs/get/parameters/4" }, { "$ref": "#/paths/~1logs/get/parameters/5" }, { "$ref": "#/paths/~1logs/get/parameters/6" }, { "$ref": "#/paths/~1logs/get/parameters/7" }, { "$ref": "#/paths/~1logs/get/parameters/8" }, { "$ref": "#/paths/~1logs/get/parameters/9" }, { "$ref": "#/paths/~1logs/get/parameters/10" }, { "$ref": "#/paths/~1logs/get/parameters/11" }, { "$ref": "#/paths/~1logs/get/parameters/12" }, { "$ref": "#/paths/~1logs/get/parameters/13" }, { "$ref": "#/paths/~1logs/get/parameters/14" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "101": { "description": "The connection has been upgraded to a websocket. The server will send log messages as they are generated in the format defined below.", "content": { "application/json": { "schema": { "type": "object", "description": "A log entry with metadata", "required": [ "id", "message", "timestamp", "labels" ], "properties": { "id": { "description": "A unique ID of the log entry", "type": "string" }, "message": { "description": "The message of the log entry", "type": "string" }, "timestamp": { "description": "The timestamp of the log entry", "type": "string", "format": "date-time" }, "labels": { "type": "array", "items": { "type": "object", "description": "A log label", "required": [ "name", "value" ], "properties": { "name": { "description": "The name of the log label", "type": "string", "enum": [ "resource", "instance", "host", "statusCode", "method", "level", "workflowService", "workflowVeresion", "task", "taskRun", "type", "text", "path", "blocked" ] }, "value": { "description": "The value of the log label", "type": "string" } } } } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/logs/values": { "get": { "summary": "List log label values", "description": "List all values for a given log label in the logs matching the provided filters.", "operationId": "list-logs-values", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "query", "description": "The ID of the workspace to return log label values for", "schema": { "type": "string" }, "required": true }, { "name": "label", "in": "query", "required": true, "description": "The label to query logs for", "schema": { "type": "string", "enum": [ "instance", "host", "statusCode", "method", "level", "type" ] } }, { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1logs/get/parameters/3" }, { "$ref": "#/paths/~1logs/get/parameters/4" }, { "$ref": "#/paths/~1logs/get/parameters/5" }, { "$ref": "#/paths/~1logs/get/parameters/6" }, { "$ref": "#/paths/~1logs/get/parameters/7" }, { "$ref": "#/paths/~1logs/get/parameters/8" }, { "$ref": "#/paths/~1logs/get/parameters/9" }, { "$ref": "#/paths/~1logs/get/parameters/10" }, { "$ref": "#/paths/~1logs/get/parameters/11" }, { "$ref": "#/paths/~1logs/get/parameters/12" }, { "$ref": "#/paths/~1logs/get/parameters/13" }, { "$ref": "#/paths/~1logs/get/parameters/14" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "$ref": "#/components/responses/LogsValues200Response" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/logs/streams/owner/{ownerId}": { "get": { "summary": "Retrieve log stream", "description": "Returns log stream information for the specified workspace.", "operationId": "get-owner-log-stream", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "path", "description": "The ID of the workspace to return log stream information for", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Owner log stream setting", "content": { "application/json": { "schema": { "type": "object", "description": "Owner log stream settings", "properties": { "ownerId": { "description": "The ID of the owner.", "type": "string" }, "endpoint": { "description": "The endpoint to stream logs to.", "type": "string" }, "preview": { "$ref": "#/paths/~1logs~1streams~1owner~1%7BownerId%7D/put/requestBody/content/application~1json/schema/properties/preview" } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Update log stream", "description": "Updates log stream information for the specified workspace. All logs for resources owned by this workspace will be sent to this log stream unless overridden by individual resources.", "operationId": "update-owner-log-stream", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "path", "description": "The ID of the workspace to update log stream information for", "schema": { "type": "string" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "preview" ], "properties": { "endpoint": { "description": "The endpoint to stream logs to.", "type": "string" }, "token": { "description": "The optional token to authenticate the log stream.", "type": "string" }, "preview": { "type": "string", "description": "Whether to send logs or drop them.", "enum": [ "send", "drop" ] } } } } } }, "responses": { "200": { "$ref": "#/paths/~1logs~1streams~1owner~1%7BownerId%7D/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete log stream", "description": "Removes the log stream for the specified workspace.", "operationId": "delete-owner-log-stream", "tags": [ "Logs" ], "parameters": [ { "name": "ownerId", "in": "path", "description": "The ID of the workspace to delete the log stream for", "schema": { "type": "string" }, "required": true } ], "responses": { "204": { "description": "Log stream setting 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" } } } }, "/logs/streams/resource": { "get": { "summary": "List log stream overrides", "description": "Lists log stream overrides for the provided workspace that match the provided filters. These overrides take precedence over the workspace's default log stream.", "operationId": "list-resource-log-streams", "tags": [ "Logs" ], "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "name": "logStreamId", "in": "query", "required": false, "description": "Filter log streams by their id.", "schema": { "type": "array", "items": { "type": "string" } } }, { "$ref": "#/components/parameters/resourceIdParam" }, { "name": "setting", "in": "query", "required": false, "description": "Filter log streams by their setting.", "schema": { "type": "array", "items": { "type": "string", "description": "Whether to send logs or drop them.", "enum": [ "send", "drop" ] } } }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "Resource log stream override", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/paths/~1logs~1streams~1resource~1%7BresourceId%7D/get/responses/200/content/application~1json/schema" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/logs/streams/resource/{resourceId}": { "get": { "summary": "Retrieve log stream override", "description": "Returns log stream override information for the specified resource. A log stream override takes precedence over a workspace's default log stream.", "operationId": "get-resource-log-stream", "tags": [ "Logs" ], "parameters": [ { "name": "resourceId", "in": "path", "description": "The ID of the resource (server, cron job, postgres, or redis) to return log stream override information for", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Resource log stream override", "content": { "application/json": { "schema": { "type": "object", "description": "Resource log stream overrides", "properties": { "resourceId": { "description": "The ID of the resource.", "type": "string" }, "endpoint": { "description": "The endpoint to stream logs to. Must be present if setting is send. Cannot be present if setting is drop.", "type": "string" }, "setting": { "$ref": "#/paths/~1logs~1streams~1resource/get/parameters/3/schema/items" } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "put": { "summary": "Update log stream override", "description": "Updates log stream override information for the specified resource. A log stream override takes precedence over a workspace's default log stream.", "operationId": "update-resource-log-stream", "tags": [ "Logs" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "setting" ], "properties": { "endpoint": { "$ref": "#/paths/~1logs~1streams~1owner~1%7BownerId%7D/put/requestBody/content/application~1json/schema/properties/endpoint" }, "token": { "$ref": "#/paths/~1logs~1streams~1owner~1%7BownerId%7D/put/requestBody/content/application~1json/schema/properties/token" }, "setting": { "$ref": "#/paths/~1logs~1streams~1resource/get/parameters/3/schema/items" } } } } } }, "parameters": [ { "name": "resourceId", "in": "path", "description": "The ID of the resource (server, cron job, postgres, or redis) to update log stream override information for", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "$ref": "#/paths/~1logs~1streams~1resource~1%7BresourceId%7D/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete log stream override", "description": "Removes the log stream override for the specified resource. After deletion, the resource will use the workspace's default log stream setting.", "operationId": "delete-resource-log-stream", "tags": [ "Logs" ], "parameters": [ { "name": "resourceId", "in": "path", "description": "The ID of the resource (server, cron job, postgres, or redis) whose log streams should be returned", "schema": { "type": "string" }, "required": true } ], "responses": { "204": { "description": "Log stream setting 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" } } } }, "/metrics-stream/{ownerId}": { "parameters": [ { "name": "ownerId", "in": "path", "required": true, "description": "The ID of the workspace to return metrics stream information for", "schema": { "type": "string" } } ], "get": { "summary": "Retrieve metrics stream", "description": "Returns metrics stream information for the specified workspace.", "operationId": "getOwnerMetricsStream", "tags": [ "Metrics" ], "responses": { "200": { "description": "The metrics stream integration for the owner", "content": { "application/json": { "schema": { "$ref": "#/paths/~1metrics-stream~1%7BownerId%7D/put/responses/200/content/application~1json/schema" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "404": { "description": "metrics stream not found" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } }, "put": { "summary": "Create or update metrics stream", "description": "Creates or updates the metrics stream for the specified workspace.", "operationId": "upsertOwnerMetricsStream", "tags": [ "Metrics" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "description": "Input for creating or updating a metrics stream", "properties": { "provider": { "type": "string", "description": "Provider to send metrics to", "enum": [ "BETTER_STACK", "GRAFANA", "DATADOG", "NEW_RELIC", "HONEYCOMB", "SIGNOZ", "GROUNDCOVER", "CUSTOM" ] }, "url": { "description": "The endpoint URL to stream metrics to", "type": "string" }, "token": { "description": "Authentication token for the metrics stream", "type": "string" } } } } } }, "responses": { "200": { "description": "metrics stream successfully updated", "content": { "application/json": { "schema": { "type": "object", "required": [ "ownerId", "provider", "url" ], "properties": { "ownerId": { "description": "The ID of the owner", "type": "string" }, "provider": { "$ref": "#/paths/~1metrics-stream~1%7BownerId%7D/put/requestBody/content/application~1json/schema/properties/provider" }, "url": { "description": "The endpoint URL to stream metrics to", "type": "string" } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } }, "delete": { "summary": "Delete metrics stream", "description": "Deletes the metrics stream for the specified workspace.", "operationId": "deleteOwnerMetricsStream", "tags": [ "Metrics" ], "responses": { "204": { "description": "metrics stream integration deleted successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "404": { "description": "metrics stream not found" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/cpu": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "name": "resolutionSeconds", "in": "query", "schema": { "type": "number", "minimum": 30, "example": 60, "default": 60 }, "required": false, "description": "The resolution of the returned data" }, { "name": "resource", "in": "query", "description": "Resource ID to query. When multiple resource query params are provided, they are ORed together. Resources can be service ids, Postgres ids, or Redis ids", "schema": { "type": "string", "example": "srv-xxxxx,dpg-xxxxx,red-xxxxx" } }, { "name": "service", "in": "query", "deprecated": true, "description": "This parameter is deprecated. Please use `resource` instead", "schema": { "type": "string", "example": "srv-xxxxx" } }, { "name": "instance", "in": "query", "required": false, "description": "Instance ID to query. When multiple instance ID query params are provided, they are ORed together", "schema": { "type": "string", "example": "srv-xxxxx-yyyy" } }, { "name": "aggregationMethod", "in": "query", "required": false, "description": "The aggregation method to apply to multiple time series", "schema": { "type": "string", "enum": [ "AVG", "MAX", "MIN" ] } } ], "get": { "summary": "Get CPU usage", "description": "Get CPU usage for one or more resources.\n", "operationId": "get-cpu", "tags": [ "Metrics" ], "responses": { "200": { "description": "A successful response", "content": { "application/json": { "schema": { "type": "array", "description": "A collection of time series", "required": [ "items" ], "items": { "type": "object", "description": "A time series data point", "required": [ "labels", "values", "unit" ], "properties": { "labels": { "type": "array", "description": "List of labels describing the time series", "items": { "type": "object", "description": "A time series datapoint label", "required": [ "field", "value" ], "properties": { "field": { "type": "string", "example": "service" }, "value": { "type": "string", "example": "srv-xxxxx" } } } }, "values": { "type": "array", "description": "The values of the time series", "items": { "description": "A time series datapoint value", "type": "object", "required": [ "timestamp", "value", "unit" ], "properties": { "timestamp": { "type": "string", "format": "date-time", "example": "2021-06-17T08:15:30Z" }, "value": { "type": "number", "example": 1 } } } }, "unit": { "type": "string", "example": "GB" } } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/cpu-limit": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/5" } ], "get": { "summary": "Get CPU limit", "description": "Get the CPU limit for one or more resources.\n", "operationId": "get-cpu-limit", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/cpu-target": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/5" } ], "get": { "summary": "Get CPU target", "description": "Get CPU target for one or more resources.\n", "operationId": "get-cpu-target", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/memory": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/5" } ], "get": { "summary": "Get memory usage", "description": "Get memory usage for one or more resources.\n", "operationId": "get-memory", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/memory-limit": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/5" } ], "get": { "summary": "Get memory limit", "description": "Get the memory limit for one or more resources.\n", "operationId": "get-memory-limit", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/memory-target": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/5" } ], "get": { "summary": "Get memory target", "description": "Get memory target for one or more resources.\n", "operationId": "get-memory-target", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/http-requests": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1http-latency/parameters/5" }, { "$ref": "#/paths/~1metrics~1http-latency/parameters/6" }, { "name": "aggregateBy", "in": "query", "required": false, "description": "The field to aggregate by", "schema": { "type": "string", "enum": [ "statusCode", "host" ] } } ], "get": { "summary": "Get HTTP request count", "description": "Get the HTTP request count for one or more resources.\n", "operationId": "get-http-requests", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/http-latency": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "name": "host", "in": "query", "required": false, "description": "The hosts of HTTP requests to filter to. When multiple host query params are provided, they are ORed together", "schema": { "type": "string", "example": "example.com" } }, { "name": "path", "in": "query", "required": false, "description": "The paths of HTTP requests to filter to. When multiple path query params are provided, they are ORed together", "schema": { "type": "string", "example": "/graphql" } }, { "name": "quantile", "in": "query", "required": false, "description": "The quantile of latencies to fetch. When multiple quantile query params are provided, they are ORed together", "schema": { "type": "number", "format": "float", "example": 0.99 } } ], "get": { "summary": "Get HTTP latency", "description": "Get HTTP latency metrics for one or more resources.\n", "operationId": "get-http-latency", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/bandwidth": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "name": "resource", "in": "query", "description": "Service ID to query. When multiple service ids are provided, they are ORed together", "schema": { "type": "string", "example": "srv-xxxxx" } }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "Get bandwidth usage", "description": "Get bandwidth usage for one or more resources.\n", "operationId": "get-bandwidth", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/bandwidth-sources": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "Get bandwidth usage breakdown by traffic source", "description": "Get bandwidth usage for one or more resources broken down by traffic source (HTTP, WebSocket, NAT, PrivateLink).\n\nReturns hourly data points with traffic source breakdown. Traffic source data is available from March 9, 2025 onwards.\nQueries for earlier dates will return a 400 Bad Request error.\n", "operationId": "get-bandwidth-sources", "tags": [ "Metrics" ], "responses": { "200": { "description": "A successful response with traffic source breakdown", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "labels": { "type": "object", "properties": { "resource": { "type": "string", "example": "srv-abc123" }, "trafficSource": { "type": "string", "enum": [ "total", "http", "websocket", "nat", "privatelink" ], "example": "http" } } }, "values": { "type": "array", "items": { "type": "object", "properties": { "timestamp": { "type": "integer", "example": 1709856000 }, "value": { "type": "number", "example": 100 } } } } } } } } }, "example": { "data": [ { "labels": { "resource": "srv-abc123", "trafficSource": "total" }, "values": [ { "timestamp": 1709856000, "value": 125.5 }, { "timestamp": 1709859600, "value": 98.2 } ] }, { "labels": { "resource": "srv-abc123", "trafficSource": "http" }, "values": [ { "timestamp": 1709856000, "value": 100 }, { "timestamp": 1709859600, "value": 75.8 } ] }, { "labels": { "resource": "srv-abc123", "trafficSource": "websocket" }, "values": [ { "timestamp": 1709856000, "value": 25.5 }, { "timestamp": 1709859600, "value": 22.4 } ] } ] } } } }, "400": { "description": "Bad request - invalid date range", "content": { "application/json": { "schema": { "type": "object", "properties": { "error": { "type": "string", "example": "bandwidth sources data is only available after 2025-03-09" } } } } } }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/disk-usage": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "Get disk usage", "description": "Get persistent disk usage for one or more resources.\n", "operationId": "get-disk-usage", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/disk-capacity": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "Get disk capacity", "description": "Get persistent disk capacity for one or more resources.\n", "operationId": "get-disk-capacity", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/instance-count": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/3" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "Get instance count", "description": "Get the instance count for one or more resources.\n", "operationId": "get-instance-count", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/active-connections": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "name": "resource", "in": "query", "description": "Resource ID to query. When multiple resource query params are provided, they are ORed together. Resources Postgres ids or Redis ids", "schema": { "type": "string", "example": "dpg-xxxxx,red-xxxxx" } } ], "get": { "summary": "Get active connection count", "description": "Get the number of active connections for one or more Postgres databases or Redis instances.\n", "operationId": "get-active-connections", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/replication-lag": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "name": "resource", "in": "query", "description": "Postgres ID to query. When multiple resource query params are provided, they are ORed together", "schema": { "type": "string", "example": "dpg-xxxxx" } } ], "get": { "summary": "Get replica lag", "description": "Get seconds of replica lag of a Postgres replica.\n", "operationId": "get-replication-lag", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/filters/application": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" } ], "get": { "summary": "List queryable instance values", "description": "List instance values to filter by for one or more resources.\n", "operationId": "list-application-filter-values", "tags": [ "Metrics" ], "responses": { "200": { "description": "A successful response", "content": { "application/json": { "schema": { "type": "array", "description": "A collection of filter values for application metrics", "required": [ "items" ], "items": { "type": "object", "properties": { "filter": { "type": "string", "enum": [ "instance" ] }, "values": { "type": "array", "items": { "type": "string", "example": "srv-xxxxx-yyyy" } } } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/filters/http": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1http-latency/parameters/5" }, { "name": "statusCode", "in": "query", "required": false, "description": "The status codes of HTTP requests to filter to. When multiple status code query params are provided, they are ORed together", "schema": { "type": "string", "example": "200" } } ], "get": { "summary": "List queryable status codes and host values", "description": "List status codes and host values to filter by for one or more resources.\n", "operationId": "list-http-filter-values", "tags": [ "Metrics" ], "responses": { "200": { "description": "A successful response", "content": { "application/json": { "schema": { "type": "array", "description": "A collection of filter values for HTTP metrics", "required": [ "items" ], "items": { "type": "object", "properties": { "filter": { "type": "string", "enum": [ "host", "statusCode" ] }, "values": { "type": "array", "items": { "type": "string", "example": "api.example.com" } } } } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/filters/path": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1bandwidth/parameters/2" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/4" }, { "$ref": "#/paths/~1metrics~1http-latency/parameters/5" }, { "$ref": "#/paths/~1metrics~1filters~1http/parameters/6" }, { "$ref": "#/paths/~1metrics~1http-latency/parameters/6" } ], "get": { "summary": "List queryable paths", "description": "The path suggestions are based on the most recent 5000 log lines as filtered by the provided filters", "operationId": "list-path-filter-values", "tags": [ "Metrics" ], "responses": { "200": { "description": "A successful response", "content": { "application/json": { "schema": { "type": "array", "description": "A collection of suggested paths to filter by", "required": [ "items" ], "items": { "type": "string", "example": "/user/*" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/task-runs-queued": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "name": "resource", "in": "query", "description": "Task ID to query. When multiple task IDs are provided, they are ORed together", "schema": { "type": "string", "example": "tsk-xxxxx" } } ], "get": { "summary": "Get task runs queued count", "description": "Get the total number of task runs queued for one or more tasks.\n", "operationId": "get-task-runs-queued", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/metrics/task-runs-completed": { "parameters": [ { "$ref": "#/components/parameters/startTimeParam" }, { "$ref": "#/components/parameters/endTimeParam" }, { "$ref": "#/paths/~1metrics~1cpu/parameters/2" }, { "$ref": "#/paths/~1metrics~1task-runs-queued/parameters/3" }, { "name": "state", "in": "query", "required": false, "description": "The state of task runs to filter to. When multiple state query params are provided, they are ORed together", "schema": { "type": "string", "enum": [ "succeeded", "failed" ] } }, { "name": "aggregateBy", "in": "query", "required": false, "description": "The field to aggregate by", "schema": { "type": "string", "enum": [ "state" ] } } ], "get": { "summary": "Get task runs completed count", "description": "Get the total number of task runs completed for one or more tasks. Optionally filter by state (succeeded/failed) or aggregate by state.\n", "operationId": "get-task-runs-completed", "tags": [ "Metrics" ], "responses": { "200": { "$ref": "#/paths/~1metrics~1cpu/get/responses/200" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "500": { "$ref": "#/components/responses/500InternalServerError" } } } }, "/key-value": { "get": { "tags": [ "Key Value" ], "summary": "List Key Value instances", "description": "List Key Value instances matching the provided filters. If no filters are provided, all Key Value instances are returned.\n", "operationId": "list-key-value", "parameters": [ { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/regionParam" }, { "$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": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/keyValueWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "tags": [ "Key Value" ], "summary": "Create Key Value instance", "description": "Create a new Key Value instance.\n", "operationId": "create-key-value", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValuePOSTInput" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValueDetail" } } } }, "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" } } } }, "/key-value/{keyValueId}": { "get": { "tags": [ "Key Value" ], "summary": "Retrieve Key Value instance", "description": "Retrieve a Key Value instance by ID.\n", "operationId": "retrieve-key-value", "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValueDetail" } } } }, "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": [ "Key Value" ], "summary": "Update Key Value instance", "description": "Update a Key Value instance by ID.\n", "operationId": "update-key-value", "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValuePATCHInput" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValueDetail" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "tags": [ "Key Value" ], "summary": "Delete Key Value instance", "description": "Delete a Key Value instance by ID.\n", "operationId": "delete-key-value", "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "Key Value instance 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" } } } }, "/key-value/{keyValueId}/connection-info": { "get": { "tags": [ "Key Value" ], "summary": "Retrieve Key Value connection info", "description": "Retrieve connection info for a Key Value instance by ID. Connection info includes sensitive information.\n", "operationId": "retrieve-key-value-connection-info", "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/keyValueConnectionInfo" } } } }, "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" } } } }, "/key-value/{keyValueId}/suspend": { "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Suspend Key Value instance", "description": "Suspend a Key Value instance by ID.\n", "operationId": "suspend-key-value", "tags": [ "Key Value" ], "responses": { "202": { "description": "Service suspended successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/key-value/{keyValueId}/resume": { "parameters": [ { "in": "path", "name": "keyValueId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Resume Key Value instance", "description": "Resume a Key Value instance by ID.\n", "operationId": "resume-key-value", "tags": [ "Key Value" ], "responses": { "202": { "description": "Service resumed successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/redis": { "get": { "tags": [ "Redis (Deprecated)" ], "summary": "List Redis instances", "deprecated": true, "description": "List Redis instances matching the provided filters. If no filters are provided, all Redis instances are returned.\nThis API is deprecated in favor of the Key Value API.\n", "operationId": "list-redis", "parameters": [ { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/regionParam" }, { "$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": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/redisWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "tags": [ "Redis (Deprecated)" ], "summary": "Create Redis instance", "deprecated": true, "description": "Create a new Redis instance. This API is deprecated in favor of the Key Value API.\n", "operationId": "create-redis", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisPOSTInput" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisDetail" } } } }, "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" } } } }, "/redis/{redisId}": { "get": { "tags": [ "Redis (Deprecated)" ], "summary": "Retrieve Redis instance", "deprecated": true, "description": "Retrieve a Redis instance by ID. This API is deprecated in favor of the Key Value API.\n", "operationId": "retrieve-redis", "parameters": [ { "in": "path", "name": "redisId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisDetail" } } } }, "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": [ "Redis (Deprecated)" ], "summary": "Update Redis instance", "deprecated": true, "description": "Update a Redis instance by ID. This API is deprecated in favor of the Key Value API.\n", "operationId": "update-redis", "parameters": [ { "in": "path", "name": "redisId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisPATCHInput" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisDetail" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "tags": [ "Redis (Deprecated)" ], "summary": "Delete Redis instance", "deprecated": true, "description": "Delete a Redis instance by ID. This API is deprecated in favor of the Key Value API.\n", "operationId": "delete-redis", "parameters": [ { "in": "path", "name": "redisId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "Redis instance 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" } } } }, "/redis/{redisId}/connection-info": { "get": { "tags": [ "Redis (Deprecated)" ], "summary": "Retrieve Redis connection info", "deprecated": true, "description": "Retrieve connection info for a Redis instance by ID. Connection info includes sensitive information.\nThis API is deprecated in favor of the Key Value API.\n", "operationId": "retrieve-redis-connection-info", "parameters": [ { "in": "path", "name": "redisId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/redisConnectionInfo" } } } }, "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" } } } }, "/postgres": { "get": { "tags": [ "Postgres" ], "summary": "List Postgres instances", "description": "List Postgres instances matching the provided filters. If no filters are provided, all Postgres instances are returned.\n", "operationId": "list-postgres", "parameters": [ { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/regionParam" }, { "$ref": "#/components/parameters/suspendedParam" }, { "$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/includeReplicasParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/postgresWithCursor" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "tags": [ "Postgres" ], "summary": "Create Postgres instance", "description": "Create a new Postgres instance.\n", "operationId": "create-postgres", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresPOSTInput" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresDetail" } } } }, "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" } } } }, "/postgres/{postgresId}": { "get": { "tags": [ "Postgres" ], "summary": "Retrieve Postgres instance", "description": "Retrieve a Postgres instance by ID.\n", "operationId": "retrieve-postgres", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresDetail" } } } }, "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": [ "Postgres" ], "summary": "Update Postgres instance", "description": "Update a Postgres instance by ID.\n", "operationId": "update-postgres", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresPATCHInput" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresDetail" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "404": { "$ref": "#/components/responses/404NotFound" }, "409": { "$ref": "#/components/responses/409Conflict" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "tags": [ "Postgres" ], "summary": "Delete Postgres instance", "description": "Delete a Postgres instance by ID. This operation is irreversible, and\nall data will be lost.\n", "operationId": "delete-postgres", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "Postgres instance 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" } } } }, "/postgres/{postgresId}/connection-info": { "get": { "tags": [ "Postgres" ], "summary": "Retrieve Postgres connection info", "description": "Retrieve connection info for a Postgres instance by ID. Connection info includes sensitive information.\n", "operationId": "retrieve-postgres-connection-info", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresConnectionInfo" } } } }, "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" } } } }, "/postgres/{postgresId}/recovery": { "get": { "tags": [ "Postgres" ], "summary": "Retrieve point-in-time recovery status", "description": "Retrieve information on the availability of Postgres point-in-time recovery for a Postgres instance by ID.\n", "operationId": "retrieve-postgres-recovery-info", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "required": [ "recoveryStatus" ], "properties": { "recoveryStatus": { "type": "string", "description": "Availability of point-in-time recovery.", "enum": [ "AVAILABLE", "BACKUP_NOT_READY", "NOT_AVAILABLE" ] }, "startsAt": { "type": "string", "format": "date-time" } } } } } }, "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": [ "Postgres" ], "summary": "Trigger point-in-time recovery", "description": "Trigger [point-in-time recovery](https://render.com/docs/postgresql-backups) on the Postgres instance with the provided ID.\n", "operationId": "recover-postgres", "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "restoreTime" ], "properties": { "restoreName": { "description": "Name of the new database.", "type": "string" }, "restoreTime": { "type": "string", "format": "date-time", "description": "The point in time to restore the database to. See `/recovery-info` for restore availability" }, "datadogApiKey": { "type": "string", "description": "Datadog API key to use for monitoring the new database. Defaults to the API key of the original database. Use an empty string to prevent copying of the API key to the new database." }, "datadogSite": { "type": "string", "description": "Datadog region code to use for monitoring the new database. Defaults to the region code of the original database. Use an empty string to prevent copying of the region code to the new database." }, "plan": { "type": "string", "description": "The plan to use for the new database. Defaults to the same plan as the original database. Cannot be a lower tier plan than the original database." }, "environmentId": { "type": "string", "description": "The environment to create the new database in. Defaults to the environment of the original database." } } } } } }, "responses": { "200": { "description": "Recovery initiated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/postgresDetail" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/suspend": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Suspend Postgres instance", "description": "Suspend a Postgres instance by ID.\n", "operationId": "suspend-postgres", "tags": [ "Postgres" ], "responses": { "202": { "description": "Service suspended successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/resume": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Resume Postgres instance", "description": "Resume a Postgres instance by ID.\n", "operationId": "resume-postgres", "tags": [ "Postgres" ], "responses": { "202": { "description": "Service resumed successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/restart": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Restart Postgres instance", "description": "Restart a Postgres instance by ID.\n", "operationId": "restart-postgres", "tags": [ "Postgres" ], "responses": { "202": { "description": "Service restarted successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/failover": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "post": { "summary": "Failover Postgres instance", "description": "Failover a [highly available Postgres](https://render.com/docs/postgresql-high-availability) instance.\n", "operationId": "failover-postgres", "tags": [ "Postgres" ], "responses": { "202": { "description": "Service failed over successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/export": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "get": { "summary": "List Postgres exports", "description": "List [exports](https://render.com/docs/postgresql-backups#logical-backups) for a Postgres instance by ID. Returns a URL to download the export.\n", "operationId": "list-postgres-export", "tags": [ "Postgres" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "required": [ "id", "createdAt" ], "properties": { "id": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "url": { "type": "string", "description": "URL to download the Postgres export" } } } } } } }, "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": { "summary": "Create Postgres export", "description": "Create an [export](https://render.com/docs/postgresql-backups#logical-backups) of a Postgres instance by ID.\n", "operationId": "create-postgres-export", "tags": [ "Postgres" ], "responses": { "202": { "description": "Export started successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/credentials": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } } ], "get": { "summary": "List PostgreSQL Users", "description": "List PostgreSQL users for the Render Postgres instance with the provided ID.\n", "operationId": "list-postgres-users", "tags": [ "Postgres" ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "username": { "type": "string" }, "default": { "type": "boolean" }, "createdAt": { "type": "string" }, "openConnections": { "type": "integer" } } } } } } }, "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": { "summary": "Create PostgreSQL User", "description": "Create a new PostgreSQL user for the Render Postgres instance with the provided ID. This becomes the database's new \"default\" user.\n", "operationId": "create-postgres-user", "tags": [ "Postgres" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "username" ], "properties": { "username": { "description": "Name of the new user.", "type": "string" } } } } } }, "responses": { "202": { "description": "PostgreSQL user created successfully" }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "406": { "$ref": "#/components/responses/406NotAcceptable" }, "410": { "$ref": "#/components/responses/410Gone" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/postgres/{postgresId}/credentials/{username}": { "parameters": [ { "in": "path", "name": "postgresId", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "username", "required": true, "schema": { "type": "string" } } ], "delete": { "summary": "Delete PostgreSQL User", "description": "Delete a PostgreSQL user from the Render Postgres instance with the provided ID.\n", "operationId": "delete-postgres-user", "tags": [ "Postgres" ], "responses": { "200": { "description": "PostgreSQL user 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" } } } }, "/projects": { "get": { "tags": [ "Projects & Environments" ], "summary": "List projects", "description": "List projects matching the provided filters. If no filters are provided, all projects are returned.\n", "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.\n", "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.\n", "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.\n\nTo update the details of a particular _environment_ in the project, instead use the [Update environment](https://api-docs.render.com/reference/update-environment) endpoint.\n", "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.\n\nRequires _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.\n\nTo delete a non-empty project, do one of the following:\n- First move or delete all contained services and other resources.\n- Delete the project in the [Render Dashboard](https://dashboard.render.com).\n", "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.\n", "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.\n", "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.\n\nRequires the environment to be empty (i.e., it must contain no services or other resources). Otherwise, deletion fails with a `409` response.\n\nTo delete a non-empty environment, do one of the following:\n- First move or delete all contained services and other resources.\n- Delete the environment in the [Render Dashboard](https://dashboard.render.com).\n", "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.\n", "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.\n", "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" } } } }, "/env-groups": { "get": { "operationId": "list-env-groups", "tags": [ "Environment Groups" ], "summary": "List environment groups", "description": "List environment groups matching the provided filters. If no filters are provided, all environment groups are returned.\n", "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/environmentIdParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/envGroupMeta" } } } } }, "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": { "operationId": "create-env-group", "tags": [ "Environment Groups" ], "summary": "Create environment group", "description": "Create a new environment group.\n", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroupPOSTInput" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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" } } } }, "/env-groups/{envGroupId}": { "get": { "operationId": "retrieve-env-group", "tags": [ "Environment Groups" ], "summary": "Retrieve environment group", "description": "Retrieve an environment group by ID.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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": { "operationId": "update-env-group", "tags": [ "Environment Groups" ], "summary": "Update environment group", "description": "Update the attributes of an environment group.", "parameters": [ { "in": "path", "name": "envGroupId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroupPATCHInput" } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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": { "operationId": "delete-env-group", "tags": [ "Environment Groups" ], "summary": "Delete environment group", "description": "Delete the environment group with the provided ID, including all environment variables and secret files it contains.", "parameters": [ { "in": "path", "name": "envGroupId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "environment group 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" } } } }, "/env-groups/{envGroupId}/services/{serviceId}": { "post": { "operationId": "link-service-to-env-group", "tags": [ "Environment Groups" ], "summary": "Link service", "description": "Link a particular service to a particular environment group.\n\nThe linked service will have access to the environment variables and secret files in the group.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" }, { "$ref": "#/components/parameters/serviceIdParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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": { "operationId": "unlink-service-from-env-group", "tags": [ "Environment Groups" ], "summary": "Unlink service", "description": "Unlink a particular service from a particular environment group.\n\nThe service will lose access to the environment variables and secret files in the group.\n", "parameters": [ { "in": "path", "name": "envGroupId", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "serviceId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "service unlinked from environment group" }, "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" } } } }, "/env-groups/{envGroupId}/env-vars/{envVarKey}": { "get": { "operationId": "retrieve-env-group-env-var", "tags": [ "Environment Groups" ], "summary": "Retrieve environment variable", "description": "Retrieve a particular environment variable in a particular environment group.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" }, { "$ref": "#/components/parameters/envVarKeyParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envVar" } } } }, "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" } } }, "put": { "operationId": "update-env-group-env-var", "tags": [ "Environment Groups" ], "summary": "Add or update environment variable", "description": "Add or update a particular environment variable in a particular environment group.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" }, { "$ref": "#/components/parameters/envVarKeyParam" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/addUpdateEnvVarInput" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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": { "operationId": "delete-env-group-env-var", "tags": [ "Environment Groups" ], "summary": "Remove environment variable", "description": "Remove a particular environment variable from a particular environment group.\n", "parameters": [ { "in": "path", "name": "envGroupId", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/envVarKeyParam" } ], "responses": { "204": { "description": "environment variable removed from environment group" }, "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" } } } }, "/env-groups/{envGroupId}/secret-files/{secretFileName}": { "get": { "operationId": "retrieve-env-group-secret-file", "tags": [ "Environment Groups" ], "summary": "Retrieve secret file", "description": "Retrieve a particular secret file in a particular environment group.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" }, { "$ref": "#/components/parameters/secretFileNameParam" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/secretFile" } } } }, "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" } } }, "put": { "operationId": "update-env-group-secret-file", "tags": [ "Environment Groups" ], "summary": "Add or update secret file", "description": "Add or update a particular secret file in an particular environment group.\n", "parameters": [ { "in": "path", "name": "envGroupId", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "secretFileName", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "content": { "type": "string" } } } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/envGroup" } } } }, "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": { "operationId": "delete-env-group-secret-file", "tags": [ "Environment Groups" ], "summary": "Remove secret file", "description": "Remove a particular secret file from a particular environment group.\n", "parameters": [ { "$ref": "#/components/parameters/envGroupIdParam" }, { "$ref": "#/components/parameters/secretFileNameParam" } ], "responses": { "204": { "description": "secret file removed from environment group" }, "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" } } } }, "/maintenance": { "get": { "tags": [ "Maintenance" ], "summary": "List maintenance runs", "description": "List scheduled and/or recent maintenance runs for specified resources.\n", "operationId": "list-maintenance", "parameters": [ { "name": "resourceId", "in": "query", "schema": { "type": "array", "items": { "type": "string", "description": "The Id of a resource that can undergo maintenance (Id of a service, a Postgres instance, or a Redis instance)" } }, "style": "form", "explode": false, "required": false }, { "$ref": "#/components/parameters/ownerIdParam" }, { "name": "state", "in": "query", "required": false, "schema": { "type": "array", "items": { "type": "string", "enum": [ "scheduled", "in_progress", "user_fix_required", "cancelled", "succeeded", "failed" ] } } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/paths/~1maintenance~1%7BmaintenanceRunParam%7D/get/responses/200/content/application~1json/schema" } } } } }, "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" } } } }, "/maintenance/{maintenanceRunParam}": { "get": { "tags": [ "Maintenance" ], "summary": "Retrieve maintenance run", "description": "Retrieve the maintenance run with the provided ID.", "operationId": "retrieve-maintenance", "parameters": [ { "name": "maintenanceRunParam", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^mrn-[0-9a-z]{20}$", "example": "mrn-cph1rs3idesc73a2b2mg" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "type", "scheduledAt", "state", "resourceId" ], "properties": { "id": { "$ref": "#/paths/~1maintenance~1%7BmaintenanceRunParam%7D/get/parameters/0/schema" }, "type": { "type": "string" }, "scheduledAt": { "type": "string", "format": "date-time" }, "pendingMaintenanceBy": { "type": "string", "format": "date-time", "description": "If present, the maintenance run cannot be scheduled for later than this date-time." }, "state": { "$ref": "#/paths/~1maintenance/get/parameters/2/schema/items" }, "resourceId": { "$ref": "#/paths/~1maintenance/get/parameters/0/schema/items" } } } } } }, "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": [ "Maintenance" ], "summary": "Update maintenance run", "description": "Update the maintenance run with the provided ID.\n\nUpdates from this endpoint are asynchronous. To check your update's status, use the [Retrieve maintenance run](https://api-docs.render.com/reference/retrieve-maintenance) endpoint.\n", "operationId": "update-maintenance", "parameters": [ { "$ref": "#/paths/~1maintenance~1%7BmaintenanceRunParam%7D/get/parameters/0" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "scheduledAt": { "description": "The date-time at which the maintenance is scheduled to start. This must be before the pendingMaintenanceBy date-time.", "type": "string", "format": "date-time" } } } } } }, "responses": { "202": { "description": "Maintenance run updated" }, "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" } } } }, "/maintenance/{maintenanceRunParam}/trigger": { "post": { "tags": [ "Maintenance" ], "summary": "Trigger maintenance run", "description": "Trigger the scheduled maintenance run with the provided ID.\n\nTriggering maintenance is asynchronous. To check whether maintenance has started, use the [Retrieve maintenance run](https://api-docs.render.com/reference/retrieve-maintenance) endpoint.\n\nAs maintenance progresses, the run's `state` will change from `scheduled` to other values, such as `in_progress` and `succeeded`.\n", "operationId": "trigger-maintenance", "parameters": [ { "$ref": "#/paths/~1maintenance~1%7BmaintenanceRunParam%7D/get/parameters/0" } ], "responses": { "202": { "description": "Maintenance run triggered" }, "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" } } } }, "/webhooks": { "post": { "summary": "Create a webhook", "description": "Create a new webhook.\n", "operationId": "create-webhook", "tags": [ "Webhooks" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "ownerId", "name", "url", "enabled", "eventFilter" ], "properties": { "ownerId": { "type": "string", "description": "The ID of the owner (team or personal user) whose resources should be returned" }, "url": { "type": "string" }, "name": { "type": "string" }, "enabled": { "type": "boolean" }, "eventFilter": { "$ref": "#/components/schemas/webhookWithCursor/properties/webhook/properties/eventFilter" } } } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/webhookWithCursor/properties/webhook" } } } }, "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": { "summary": "List webhooks", "description": "List webhooks", "operationId": "list-webhooks", "tags": [ "Webhooks" ], "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" }, { "$ref": "#/components/parameters/ownerIdParam" } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/webhookWithCursor" } } } } }, "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" } } } }, "/webhooks/{webhookId}": { "parameters": [ { "name": "webhookId", "in": "path", "required": true, "description": "Unique identifier for the webhook", "schema": { "type": "string", "pattern": "^whk-[0-9a-z]{20}$", "example": "whk-d04m9b1r0fns73ckp94f" } } ], "get": { "summary": "Retrieve a webhook", "description": "Retrieve the webhook with the provided ID", "operationId": "retrieve-webhook", "tags": [ "Webhooks" ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/webhookWithCursor/properties/webhook" } } } }, "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": { "summary": "Update a webhook", "description": "Update the webhook with the provided ID.\n", "operationId": "update-webhook", "tags": [ "Webhooks" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "url": { "type": "string" }, "enabled": { "type": "boolean" }, "eventFilter": { "$ref": "#/components/schemas/webhookWithCursor/properties/webhook/properties/eventFilter" } } } } } }, "responses": { "200": { "description": "Updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/webhookWithCursor/properties/webhook" } } } }, "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": { "summary": "Delete a webhook", "description": "Delete the webhook with the provided ID.\n", "operationId": "delete-webhook", "tags": [ "Webhooks" ], "responses": { "204": { "description": "Webhook deleted" }, "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" } } } }, "/webhooks/{webhookId}/events": { "parameters": [ { "$ref": "#/paths/~1webhooks~1%7BwebhookId%7D/parameters/0" } ], "get": { "summary": "List webhook events", "description": "Retrieve a list of events that have been sent to this webhook, with optional filtering by timestamp.\n", "operationId": "list-webhook-events", "tags": [ "Webhooks" ], "parameters": [ { "name": "sentBefore", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter events sent before this time (specified as an ISO 8601 timestamp)", "example": "2021-06-17T08:15:30Z" }, { "name": "sentAfter", "in": "query", "schema": { "type": "string", "format": "date-time" }, "required": false, "description": "Filter for resources sent after a certain time (specified as an ISO 8601 timestamp)", "example": "2021-02-17T08:15:30Z" }, { "$ref": "#/components/parameters/limitParam" }, { "$ref": "#/components/parameters/cursorParam" } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/webhookEventWithCursor" } } } } }, "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" } } } }, "/workflows": { "get": { "summary": "List workflows", "description": "List workflows that match the provided filters. If no filters are provided, all workflows accessible by the authenticated user are returned.", "tags": [ "Workflows (Beta)" ], "operationId": "listWorkflows", "parameters": [ { "$ref": "#/components/parameters/nameParam" }, { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/workflowIdParam" }, { "$ref": "#/components/parameters/environmentIdParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "List of workflows", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/workflowWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Create a workflow", "description": "Create a new workflow service with the specified configuration.", "tags": [ "Workflows (Beta)" ], "operationId": "createWorkflow", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "ownerId", "region", "runCommand", "buildConfig" ], "properties": { "name": { "type": "string" }, "ownerId": { "type": "string" }, "buildConfig": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow/properties/buildConfig" }, "runCommand": { "type": "string", "description": "The command to run the workflow" }, "region": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow/properties/region" }, "autoDeployTrigger": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow/properties/autoDeployTrigger" } } } } } }, "responses": { "201": { "description": "Workflow created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/workflows/{workflowId}": { "parameters": [ { "name": "workflowId", "in": "path", "description": "The ID of the workflow", "schema": { "type": "string" }, "required": true } ], "get": { "tags": [ "Workflows (Beta)" ], "summary": "Retrieve workflow", "description": "Retrieve the workflow service with the provided ID.", "operationId": "getWorkflow", "responses": { "200": { "description": "Workflow details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "patch": { "summary": "Update workflow", "description": "Update the workflow service with the provided ID.", "tags": [ "Workflows (Beta)" ], "operationId": "updateWorkflow", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "buildConfig": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow/properties/buildConfig" }, "runCommand": { "type": "string", "description": "The command to run the workflow" }, "autoDeployTrigger": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow/properties/autoDeployTrigger" } } } } } }, "responses": { "200": { "description": "Workflow updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/workflowWithCursor/properties/workflow" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Delete workflow", "description": "Delete the workflow service with the provided ID.", "tags": [ "Workflows (Beta)" ], "operationId": "deleteWorkflow", "responses": { "204": { "description": "Workflow deleted" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/workflowversions": { "get": { "summary": "List workflow versions", "description": "List known versions of the workflow service with the provided ID.", "tags": [ "Workflows (Beta)" ], "operationId": "listWorkflowVersions", "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/components/parameters/workflowIdParam" }, { "$ref": "#/components/parameters/workflowVersionIdParam" }, { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "List of workflow versions", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/workflowVersionWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "workflowId" ], "properties": { "workflowId": { "type": "string" }, "commit": { "type": "string" } } } } } }, "summary": "Deploy a workflow version", "description": "Creates and deploys a new version of a workflow.", "tags": [ "Workflows (Beta)" ], "operationId": "createWorkflowVersion", "responses": { "202": { "description": "Workflow version created" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/workflowversions/{workflowVersionId}": { "parameters": [ { "name": "workflowVersionId", "in": "path", "description": "The ID of the workflow version", "schema": { "type": "string" }, "required": true } ], "get": { "summary": "Retrieve workflow version", "description": "Retrieve the specific workflow service version with the provided ID.", "tags": [ "Workflows (Beta)" ], "operationId": "getWorkflowVersion", "responses": { "200": { "description": "Workflow version details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/workflowVersionWithCursor/properties/workflowVersion" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/tasks": { "parameters": [ { "$ref": "#/components/parameters/ownerIdParam" }, { "name": "taskSlug", "in": "query", "description": "An array of task slugs in the format workflow-slug/task-name. An optional version can be appended (workflow-slug/task-name:version). If no version is provided, the latest version is used.", "example": [ "my-workflow-slug/my-task", "my-workflow-slug/my-task:SHA123" ], "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "workflowVersionId", "in": "query", "description": "An array of workflow version IDs", "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "workflowId", "in": "query", "description": "An array of workflow IDs", "schema": { "type": "array", "items": { "type": "string" } } } ], "get": { "summary": "List tasks", "description": "List workflow tasks that match the provided filters. If no filters are provided, all task definitions accessible by the authenticated user are returned.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "listTasks", "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" } ], "responses": { "200": { "description": "List of tasks", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/taskWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/tasks/{taskId}": { "parameters": [ { "name": "taskId", "in": "path", "description": "The ID of the task", "schema": { "type": "string" }, "required": true } ], "get": { "summary": "Retrieve task", "description": "Retrieve the workflow task with the provided ID.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "getTask", "responses": { "200": { "description": "Task details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/taskWithCursor/properties/task" } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/task-runs": { "get": { "summary": "List task runs", "description": "List task runs that match the provided filters. If no filters are provided, all task runs accessible by the authenticated user are returned.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "listTaskRuns", "parameters": [ { "$ref": "#/components/parameters/cursorParam" }, { "$ref": "#/components/parameters/limitParam" }, { "$ref": "#/paths/~1tasks/parameters/1" }, { "name": "rootTaskRunId", "in": "query", "description": "An array of root task run IDs to filter on", "schema": { "type": "array", "items": { "type": "string" } } }, { "$ref": "#/components/parameters/ownerIdParam" }, { "$ref": "#/paths/~1tasks/parameters/2" }, { "$ref": "#/paths/~1tasks/parameters/3" } ], "responses": { "200": { "description": "List of task runs", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/taskRunWithCursor" } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "post": { "summary": "Run task", "description": "Kicks off a run of the workflow task with the provided ID, passing the provided input data.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "createTask", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "required": [ "task", "input" ], "properties": { "task": { "type": "string", "description": "A task slug in the format workflow-slug/task-name. An optional version can be appended (workflow-slug/task-name:version). If no version is provided, the latest version is used.", "example": "my-workflow-slug/my-task, my-workflow-slug/my-task:SHA123" }, "input": { "description": "Input data for a task. Can be either an array (for positional arguments) or an object (for named parameters).", "oneOf": [ { "type": "array", "items": {}, "description": "Positional arguments passed to the task function" }, { "type": "object", "additionalProperties": {}, "description": "Named parameters passed to the task function as keyword arguments" } ] } } } } } }, "responses": { "202": { "description": "Task run created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/taskRunWithCursor/properties/taskRun" } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/task-runs/events": { "get": { "summary": "Stream realtime events (SSE)", "description": "Establishes a unidirectional event stream. The server sends events as lines\nformatted per the SSE spec. Clients SHOULD set `Accept: text/event-stream`\nand keep the connection open.\n", "operationId": "streamTaskRunsEvents", "tags": [ "Workflow Tasks (Beta)" ], "parameters": [ { "name": "taskRunIds", "in": "query", "description": "Filter to a subset of task run IDs.", "required": true, "schema": { "type": "array", "items": { "type": "string" }, "example": [ "trn-1234", "trn-5678" ] } }, { "name": "Accept", "in": "header", "description": "Must be `text/event-stream`.", "required": false, "schema": { "type": "string", "enum": [ "text/event-stream" ] } } ], "responses": { "200": { "description": "Event stream established", "headers": { "Content-Type": { "description": "Always `text/event-stream; charset=utf-8`", "schema": { "type": "string", "example": "text/event-stream; charset=utf-8" } }, "Cache-Control": { "description": "SSE responses should be non-cacheable.", "schema": { "type": "string", "example": "no-cache, no-transform" } }, "Connection": { "description": "Keep-alive for streaming.", "schema": { "type": "string", "example": "keep-alive" } } }, "content": { "text/event-stream": { "schema": { "type": "string", "description": "Stream of SSE frames. Each event may include `id`, `event`, `data`,\nand optional `retry`. Frames are separated by a blank line.\n" }, "examples": { "taskCompleted": { "summary": "Named event with JSON data", "value": "event: task.completed\ndata: {\n \"id\": \"string\",\n \"taskId\": \"string\",\n \"status\": \"pending\",\n \"results\": [\n \"string\"\n ],\n \"error\": \"string\",\n \"startedAt\": \"2025-09-04T17:25:17.979Z\",\n \"completedAt\": \"2025-09-04T17:25:17.979Z\"\n }\n" } } } } }, "400": { "$ref": "#/components/responses/400BadRequest" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } }, "/task-runs/{taskRunId}": { "parameters": [ { "name": "taskRunId", "in": "path", "description": "The ID of the task run", "schema": { "type": "string" }, "required": true } ], "get": { "summary": "Retrieve task run", "description": "Retrieve the workflow task run with the provided ID.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "getTaskRun", "responses": { "200": { "description": "Task run details", "content": { "application/json": { "schema": { "type": "object", "required": [ "id", "taskId", "status", "results", "input", "parentTaskRunId", "rootTaskRunId", "retries", "attempts" ], "properties": { "id": { "type": "string" }, "taskId": { "type": "string" }, "status": { "$ref": "#/components/schemas/taskRunWithCursor/properties/taskRun/properties/status" }, "results": { "type": "array", "items": {} }, "error": { "type": "string", "description": "Error message if the task run failed." }, "startedAt": { "type": "string", "format": "date-time" }, "completedAt": { "type": "string", "format": "date-time" }, "input": { "$ref": "#/paths/~1task-runs/post/requestBody/content/application~1json/schema/properties/input" }, "parentTaskRunId": { "type": "string" }, "rootTaskRunId": { "type": "string" }, "retries": { "type": "integer" }, "attempts": { "type": "array", "items": { "type": "object", "required": [ "status", "startedAt" ], "properties": { "status": { "$ref": "#/components/schemas/taskRunWithCursor/properties/taskRun/properties/status" }, "enqueuedAt": { "type": "string", "format": "date-time" }, "startedAt": { "type": "string", "format": "date-time" }, "completedAt": { "type": "string", "format": "date-time" }, "error": { "type": "string", "description": "Error message if the task attempt failed." }, "results": { "$ref": "#/paths/~1task-runs~1%7BtaskRunId%7D/get/responses/200/content/application~1json/schema/properties/results" } } } } } } } } }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } }, "delete": { "summary": "Cancel task run", "description": "Cancel a running task run with the provided ID.", "tags": [ "Workflow Tasks (Beta)" ], "operationId": "cancelTaskRun", "responses": { "204": { "description": "Task run canceled" }, "401": { "$ref": "#/components/responses/401Unauthorized" }, "403": { "$ref": "#/components/responses/403Forbidden" }, "404": { "$ref": "#/components/responses/404NotFound" }, "429": { "$ref": "#/components/responses/429RateLimit" }, "500": { "$ref": "#/components/responses/500InternalServerError" }, "503": { "$ref": "#/components/responses/503ServiceUnavailable" } } } } }, "components": { "securitySchemes": { "BearerAuth": { "type": "http", "scheme": "bearer" } }, "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" } }, "customDomainIdOrNameParam": { "name": "customDomainIdOrName", "in": "path", "required": true, "description": "The ID or name of the custom domain", "schema": { "type": "string" } }, "deployIdParam": { "name": "deployId", "in": "path", "required": true, "description": "The ID of the deploy", "schema": { "type": "string" } }, "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" } }, "auditLogLimitParam": { "name": "limit", "in": "query", "required": false, "description": "The maximum number of audit log items to return. For details, see [Pagination](https://api-docs.render.com/reference/pagination).", "schema": { "type": "integer", "default": 20, "minimum": 1, "maximum": 1000, "description": "Defaults to 20" } }, "ownerIdPathParam": { "name": "ownerId", "in": "path", "description": "The ID of the workspace to return resources for", "schema": { "type": "string" }, "required": true }, "regionPathParam": { "name": "region", "in": "path", "description": "The region to return resources for", "schema": { "$ref": "#/components/schemas/region" }, "required": true }, "userIdPathParam": { "name": "userId", "in": "path", "required": true, "description": "The ID of the user (Render object ID with a `usr-` prefix).", "schema": { "type": "string", "pattern": "^usr-[0-9a-v]{20}$", "example": "usr-5k6m7n8p9q0r1s2t3u4v" } }, "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 }, "workflowIdParam": { "name": "workflowID", "in": "query", "description": "The IDs of the workflows to return resources for", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false }, "workflowVersionIdParam": { "name": "workflowVersionId", "in": "query", "description": "The IDs of the workflow versions to return resources for", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false }, "resourceIdParam": { "name": "resourceId", "in": "query", "required": false, "description": "IDs of resources (server, cron job, postgres, or redis) to filter by", "schema": { "type": "array", "items": { "type": "string" } } }, "serviceIdParam": { "name": "serviceId", "in": "path", "required": true, "description": "The ID of the service", "schema": { "type": "string" } }, "cronJobIdParam": { "name": "cronJobId", "in": "path", "required": true, "description": "The ID of the cron job", "schema": { "type": "string" } }, "serviceIdsParam": { "name": "serviceId", "in": "query", "description": "Filter for resources by service ID", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "required": false }, "startTimeParam": { "name": "startTime", "in": "query", "schema": { "type": "string", "format": "date-time", "example": "2021-06-17T08:15:30Z" }, "required": false, "description": "Epoch/Unix timestamp of start of time range to return. Defaults to `now() - 1 hour`." }, "endTimeParam": { "name": "endTime", "in": "query", "schema": { "type": "string", "format": "date-time", "example": "2021-06-17T08:30:30Z" }, "required": false, "description": "Epoch/Unix timestamp of end of time range to return. Defaults to `now()`." }, "nameParam": { "name": "name", "in": "query", "schema": { "type": "array", "items": { "type": "string" } }, "style": "form", "explode": false, "required": false, "description": "Filter by name" }, "serviceTypeParam": { "name": "type", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/serviceType" } }, "style": "form", "explode": false, "required": false, "description": "Filter for types of services" }, "envParam": { "name": "env", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/serviceRuntime" } }, "style": "form", "explode": false, "required": false, "deprecated": true, "description": "Filter for environments (runtimes) of services (deprecated; use `runtime` instead)" }, "runtimeParam": { "name": "env", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/serviceRuntime" } }, "style": "form", "explode": false, "required": false, "deprecated": true, "description": "Filter for environments (runtimes) of services" }, "regionParam": { "name": "region", "in": "query", "schema": { "type": "array", "items": { "$ref": "#/components/schemas/region" } }, "style": "form", "explode": false, "required": false, "description": "Filter by resource region" }, "suspendedParam": { "name": "suspended", "in": "query", "schema": { "type": "array", "items": { "type": "string", "enum": [ "suspended", "not_suspended" ] } }, "style": "form", "explode": false, "required": false, "description": "Filter resources based on whether they're suspended or not suspended" }, "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" }, "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" }, "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" }, "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" }, "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" }, "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" }, "includePreviewsParam": { "name": "includePreviews", "in": "query", "schema": { "type": "boolean", "default": true }, "required": false, "description": "Include previews in the response" }, "includeReplicasParam": { "name": "includeReplicas", "in": "query", "schema": { "type": "boolean", "default": true }, "required": false, "description": "Include replicas in the response" }, "envGroupIdParam": { "name": "envGroupId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Filter for resources that belong to an environment group" }, "envVarKeyParam": { "name": "envVarKey", "in": "path", "required": true, "schema": { "type": "string" }, "description": "The name of the environment variable" }, "secretFileNameParam": { "name": "secretFileName", "in": "path", "required": true, "schema": { "type": "string" }, "description": "The name of the secret file" }, "eventTypeParam": { "name": "type", "in": "query", "description": "The type of event to filter to", "required": false, "schema": { "anyOf": [ { "type": "string", "enum": [ "autoscaling_config_changed", "autoscaling_ended", "autoscaling_started", "branch_deleted", "build_ended", "build_started", "commit_ignored", "cron_job_run_ended", "cron_job_run_started", "deploy_ended", "deploy_started", "disk_created", "disk_updated", "disk_deleted", "image_pull_failed", "initial_deploy_hook_ended", "initial_deploy_hook_started", "instance_count_changed", "job_run_ended", "maintenance_mode_enabled", "maintenance_mode_uri_updated", "maintenance_ended", "maintenance_started", "pipeline_minutes_exhausted", "plan_changed", "pre_deploy_ended", "pre_deploy_started", "server_available", "server_failed", "server_hardware_failure", "server_restarted", "service_resumed", "service_suspended", "suspender_added", "suspender_removed", "zero_downtime_redeploy_ended", "zero_downtime_redeploy_started" ] } ] } } }, "schemas": { "cursor": { "type": "string" }, "auditLogWithCursor": { "type": "object", "required": [ "cursor", "auditLog" ], "properties": { "cursor": { "$ref": "#/components/schemas/cursor" }, "auditLog": { "$ref": "#/components/schemas/auditLog" } } }, "auditLog": { "type": "object", "required": [ "id", "timestamp", "event", "status", "actor", "metadata" ], "properties": { "id": { "type": "string", "description": "Unique identifier for the audit log entry", "example": "aud-123456789" }, "timestamp": { "type": "string", "format": "date-time", "description": "When the event occurred (ISO 8601 format)", "example": "2023-10-01T12:00:00Z" }, "event": { "type": "string", "description": "The type of event that occurred", "example": "CreateServerEvent", "enum": [ "AcceptOrgInviteEvent", "AcceptTeamInviteEvent", "AddOrgMemberEvent", "ApplyBlueprintEvent", "ChangeEnvironmentProtectionEvent", "ChangeOrg2FAEnforcementEvent", "ChangeOrgAllowedLoginMethodsEvent", "ChangeOrgRoleEvent", "ChangeTeam2FAEnforcementEvent", "ChangeTeamAllowedLoginMethodsEvent", "ChangeTeamMemberRoleEvent", "ChangeWorkspaceDeployHandlingEvent", "ChangeWorkspacePrivacyEvent", "CreateCronJobEvent", "CreateEnvVarsEvent", "CreateEnvironmentEvent", "CreateOrgDomainEvent", "CreateOtelIntegrationEvent", "CreatePostgresEvent", "CreatePrivateLinkEvent", "CreateProjectEvent", "CreateRedisEvent", "CreateSSOConnectionEvent", "CreateServerDiskEvent", "CreateServerEvent", "CreateWebhookEvent", "CreateWorkspaceEvent", "DeleteCronJobEvent", "DeleteEnvGroupEvent", "DeleteEnvVarsEvent", "DeleteEnvironmentEvent", "DeleteOrgDomainEvent", "DeleteOtelIntegrationEvent", "DeletePostgresEvent", "DeletePrivateLinkEvent", "DeleteProjectEvent", "DeleteRedisEvent", "DeleteSSOConnectionEvent", "DeleteServerDiskEvent", "DeleteServerEvent", "DeleteWebhookEvent", "DeleteWorkspaceEvent", "DocumentDownloadEvent", "DownloadDatabaseBackupEvent", "EnableRedisInternalAuthEvent", "InviteToOrgEvent", "InviteToTeamEvent", "JoinTeamEvent", "LoginEvent", "LogoutEvent", "MaintenanceModeEnabledEvent", "MaintenanceModeURIUpdatedEvent", "MoveEnvironmentResourceEvent", "ProvisionOrganizationSCIMToken", "RemoveOrgMemberEvent", "RemoveUserFromTeamEvent", "RestoreDiskSnapshotEvent", "ResumePostgresEvent", "ResumeServiceEvent", "RevokeOrganizationSCIMToken", "SignNDAEvent", "EndShellEvent", "StartShellEvent", "SuspendPostgresEvent", "SuspendServiceEvent", "UpdateEnvVarsEvent", "UpdateIPAllowListEvent", "UpdateOtelIntegrationEvent", "UpdateSSOConnectionEvent", "UpdateServiceNameEvent", "UpdateWebhookEvent", "VerifyOrgDomainEvent", "ViewConnectionInfoEvent", "ViewEnvVarValuesEvent" ] }, "status": { "type": "string", "description": "The status of the event", "example": "success", "enum": [ "success", "error" ] }, "actor": { "$ref": "#/components/schemas/auditLogActor" }, "metadata": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Additional context information about the event", "example": { "service": "srv-123456789", "field": "env_vars" } } } }, "auditLogActor": { "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "description": "The type of actor that performed the action", "example": "user", "enum": [ "user", "rest_api", "system" ] }, "email": { "type": "string", "description": "Email address of the actor (if applicable)", "example": "user@example.com" }, "id": { "type": "string", "description": "Unique identifier of the actor (if applicable)", "example": "usr-123456789" } } }, "service": { "type": "object", "required": [ "id", "name", "ownerId", "type", "createdAt", "dashboardUrl", "updatedAt", "suspended", "suspenders", "autoDeploy", "notifyOnFail", "slug", "serviceDetails", "rootDir" ], "properties": { "id": { "type": "string" }, "autoDeploy": { "$ref": "#/components/schemas/autoDeploy" }, "branch": { "type": "string" }, "buildFilter": { "$ref": "#/components/schemas/buildFilter" }, "createdAt": { "type": "string", "format": "date-time" }, "dashboardUrl": { "type": "string", "description": "The URL to view the service in the Render Dashboard" }, "environmentId": { "type": "string" }, "imagePath": { "type": "string" }, "name": { "type": "string" }, "notifyOnFail": { "$ref": "#/components/schemas/notifySetting" }, "ownerId": { "type": "string" }, "registryCredential": { "$ref": "#/components/schemas/registryCredentialSummary" }, "repo": { "type": "string", "example": "https://github.com/render-examples/flask-hello-world" }, "rootDir": { "type": "string" }, "slug": { "type": "string" }, "suspended": { "type": "string", "enum": [ "suspended", "not_suspended" ] }, "suspenders": { "type": "array", "items": { "$ref": "#/components/schemas/suspenderType" } }, "type": { "$ref": "#/components/schemas/serviceType" }, "updatedAt": { "type": "string", "format": "date-time" }, "serviceDetails": { "oneOf": [ { "$ref": "#/components/schemas/staticSiteDetails" }, { "$ref": "#/components/schemas/webServiceDetails" }, { "$ref": "#/components/schemas/privateServiceDetails" }, { "$ref": "#/components/schemas/backgroundWorkerDetails" }, { "$ref": "#/components/schemas/cronJobDetails" } ] } } }, "deployList": { "type": "array", "items": { "$ref": "#/components/schemas/deployWithCursor" } }, "workflowVersionWithCursor": { "type": "object", "required": [ "workflowVersion", "cursor" ], "properties": { "workflowVersion": { "type": "object", "required": [ "id", "workflowId", "name", "image", "createdAt", "updatedAt", "status" ], "properties": { "id": { "type": "string" }, "workflowId": { "type": "string" }, "name": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "status": { "type": "string", "enum": [ "created", "building", "registering", "build_failed", "registration_failed", "ready" ] } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "workflowWithCursor": { "type": "object", "required": [ "workflow", "cursor" ], "properties": { "workflow": { "type": "object", "required": [ "id", "name", "createdAt", "updatedAt", "ownerId", "region", "runCommand", "buildConfig" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "buildConfig": { "type": "object", "required": [ "buildCommand", "repo", "runtime" ], "properties": { "branch": { "type": "string", "description": "The branch to use for the build, if applicable." }, "buildCommand": { "type": "string", "description": "The command to run to build the workflow." }, "repo": { "type": "string", "description": "The repository URL to use for the build." }, "rootDir": { "type": "string", "description": "The root directory of the repository to use for the build, if applicable." }, "runtime": { "type": "string", "enum": [ "elixir", "go", "node", "python", "ruby" ], "description": "The runtime environment for the workflow (e.g., node, python, etc.)." } } }, "runCommand": { "type": "string", "description": "Command to run the workflow." }, "region": { "type": "string", "enum": [ "frankfurt", "oregon", "ohio", "singapore", "virginia" ], "default": "oregon", "description": "Defaults to \"oregon\"" }, "environmentId": { "type": "string" }, "slug": { "type": "string" }, "autoDeployTrigger": { "type": "string", "enum": [ "commit", "off", "checksPass" ], "default": "commit", "description": "Controls autodeploy behavior. \"commit\" deploys when a commit is pushed to the branch. \"checksPass\" waits for CI checks to pass before deploying. \"off\" disables autodeploy." } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "taskWithCursor": { "type": "object", "required": [ "task", "cursor" ], "properties": { "task": { "type": "object", "required": [ "id", "name", "createdAt" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "workflowId": { "type": "string" }, "workflowVersionId": { "type": "string" } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "deployWithCursor": { "type": "object", "properties": { "deploy": { "$ref": "#/components/schemas/deploy" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "serviceAndDeploy": { "type": "object", "properties": { "service": { "$ref": "#/components/schemas/service" }, "deployId": { "type": "string" } } }, "autoDeploy": { "type": "string", "enum": [ "yes", "no" ], "default": "yes" }, "autoDeployTrigger": { "type": "string", "enum": [ "commit", "off", "checksPass" ], "description": "Controls autodeploy behavior. commit deploys when a commit is pushed to a branch. checksPass waits for the branch to be green." }, "buildFilter": { "type": "object", "required": [ "paths", "ignoredPaths" ], "properties": { "paths": { "type": "array", "items": { "type": "string" } }, "ignoredPaths": { "type": "array", "items": { "type": "string" } } } }, "registryCredentialSummary": { "type": "object", "required": [ "id", "name" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "registryCredentialRegistry": { "type": "string", "enum": [ "GITHUB", "GITLAB", "DOCKER", "GOOGLE_ARTIFACT", "AWS_ECR" ], "description": "The registry to use this credential with" }, "registryCredential": { "type": "object", "required": [ "id", "name", "username", "registry", "updatedAt" ], "properties": { "id": { "type": "string", "description": "Unique identifier for this credential" }, "name": { "type": "string", "description": "Descriptive name for this credential" }, "registry": { "$ref": "#/components/schemas/registryCredentialRegistry" }, "username": { "type": "string", "description": "The username associated with the credential" }, "updatedAt": { "type": "string", "format": "date-time", "description": "Last updated time for the credential" } } }, "image": { "type": "object", "required": [ "imagePath", "ownerId" ], "properties": { "ownerId": { "type": "string", "description": "The ID of the owner for this image. This should match the owner of the service as well as the owner of any specified registry credential." }, "registryCredentialId": { "type": "string", "description": "Optional reference to the registry credential passed to the image repository to retrieve this image." }, "imagePath": { "type": "string", "description": "Path to the image used for this server (e.g docker.io/library/nginx:latest)." } } }, "dockerDetails": { "type": "object", "required": [ "dockerCommand", "dockerContext", "dockerfilePath" ], "properties": { "dockerCommand": { "type": "string" }, "dockerContext": { "type": "string" }, "dockerfilePath": { "type": "string" }, "preDeployCommand": { "type": "string" }, "registryCredential": { "$ref": "#/components/schemas/registryCredential" } } }, "nativeEnvironmentDetails": { "type": "object", "required": [ "buildCommand", "startCommand" ], "properties": { "buildCommand": { "type": "string" }, "startCommand": { "type": "string" }, "preDeployCommand": { "type": "string" } } }, "staticSiteDetails": { "type": "object", "required": [ "buildCommand", "publishPath", "url", "buildPlan" ], "properties": { "buildCommand": { "type": "string" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "parentServer": { "$ref": "#/components/schemas/resource" }, "publishPath": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "url": { "type": "string" }, "buildPlan": { "$ref": "#/components/schemas/buildPlan" }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" } } }, "maintenanceMode": { "type": "object", "required": [ "enabled", "uri" ], "properties": { "enabled": { "type": "boolean" }, "uri": { "type": "string", "description": "The page to be served when [maintenance mode](https://render.com/docs/maintenance-mode) is enabled. When empty, the default maintenance mode page is served." } } }, "maxShutdownDelaySeconds": { "type": "integer", "description": "The maximum amount of time (in seconds) that Render waits for your application process to exit gracefully after sending it a SIGTERM signal.", "minimum": 1, "maximum": 300, "default": 30 }, "webServiceDetails": { "type": "object", "required": [ "env", "runtime", "envSpecificDetails", "plan", "region", "numInstances", "buildPlan", "healthCheckPath", "openPorts", "url" ], "properties": { "autoscaling": { "type": "object", "required": [ "enabled", "min", "max", "criteria" ], "properties": { "enabled": { "type": "boolean", "default": false }, "min": { "type": "integer", "description": "The minimum number of instances for the service" }, "max": { "type": "integer", "description": "The maximum number of instances for the service" }, "criteria": { "type": "object", "required": [ "cpu", "memory" ], "properties": { "cpu": { "type": "object", "required": [ "enabled", "percentage" ], "properties": { "enabled": { "type": "boolean", "default": false }, "percentage": { "type": "integer", "description": "Determines when your service will be scaled. If the average resource utilization is significantly above/below the target, we will increase/decrease the number of instances.\n" } } }, "memory": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling/properties/criteria/properties/cpu" } } } } }, "cache": { "$ref": "#/components/schemas/cache" }, "disk": { "type": "object", "required": [ "id", "name", "sizeGB", "mountPath" ], "properties": { "id": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" }, "name": { "type": "string" }, "sizeGB": { "type": "integer" }, "mountPath": { "type": "string" } } }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetails" }, "healthCheckPath": { "type": "string" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "maintenanceMode": { "$ref": "#/components/schemas/maintenanceMode" }, "numInstances": { "type": "integer", "description": "For a *manually* scaled service, this is the number of instances the service is scaled to. DOES NOT indicate the number of running instances for an *autoscaled* service." }, "openPorts": { "type": "array", "items": { "$ref": "#/components/schemas/serverPort" } }, "parentServer": { "$ref": "#/components/schemas/resource" }, "plan": { "$ref": "#/components/schemas/plan" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "sshAddress": { "$ref": "#/components/schemas/sshAddress" }, "url": { "type": "string" }, "buildPlan": { "$ref": "#/components/schemas/buildPlan" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" } } }, "envSpecificDetails": { "oneOf": [ { "$ref": "#/components/schemas/dockerDetails" }, { "$ref": "#/components/schemas/nativeEnvironmentDetails" } ] }, "envSpecificDetailsPATCH": { "oneOf": [ { "$ref": "#/components/schemas/dockerDetailsPATCH" }, { "$ref": "#/components/schemas/nativeEnvironmentDetailsPATCH" } ] }, "envSpecificDetailsPOST": { "oneOf": [ { "$ref": "#/components/schemas/dockerDetailsPOST" }, { "$ref": "#/components/schemas/nativeEnvironmentDetailsPOST" } ] }, "resource": { "required": [ "id", "name" ], "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "privateServiceDetails": { "type": "object", "required": [ "env", "runtime", "envSpecificDetails", "plan", "region", "numInstances", "buildPlan", "openPorts", "url" ], "properties": { "autoscaling": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "disk": { "$ref": "#/components/schemas/webServiceDetails/properties/disk" }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetails" }, "numInstances": { "type": "integer", "description": "For a *manually* scaled service, this is the number of instances the service is scaled to. DOES NOT indicate the number of running instances for an *autoscaled* service." }, "openPorts": { "type": "array", "items": { "$ref": "#/components/schemas/serverPort" } }, "parentServer": { "$ref": "#/components/schemas/resource" }, "plan": { "$ref": "#/components/schemas/plan" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "sshAddress": { "$ref": "#/components/schemas/sshAddress" }, "url": { "type": "string" }, "buildPlan": { "$ref": "#/components/schemas/buildPlan" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "serviceDisk": { "type": "object", "required": [ "name", "mountPath" ], "properties": { "name": { "type": "string" }, "mountPath": { "type": "string" }, "sizeGB": { "type": "integer", "minimum": 1, "description": "Defaults to 1" } } }, "cache": { "type": "object", "required": [ "profile" ], "properties": { "profile": { "type": "string", "enum": [ "no-cache", "origin-controlled", "origin-controlled-all" ], "default": "no-cache" } } }, "diskWithCursor": { "required": [ "disk", "cursor" ], "type": "object", "properties": { "disk": { "type": "object", "required": [ "id", "name", "sizeGB", "mountPath", "createdAt", "updatedAt" ], "properties": { "id": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" }, "name": { "type": "string" }, "sizeGB": { "type": "integer" }, "mountPath": { "type": "string" }, "serviceId": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "instanceId": { "description": "When a service with a disk is scaled, the instanceId is used to identify the instance that the disk is attached to. Each instance's disks get their own snapshots, and can be restored separately.", "type": "string" }, "diskSnapshot": { "type": "object", "properties": { "createdAt": { "type": "string", "format": "date-time" }, "snapshotKey": { "type": "string" }, "instanceId": { "$ref": "#/components/schemas/instanceId" } } }, "snapshotRestorePOST": { "type": "object", "required": [ "snapshotKey" ], "properties": { "snapshotKey": { "type": "string" }, "instanceId": { "$ref": "#/components/schemas/instanceId" } } }, "backgroundWorkerDetails": { "type": "object", "required": [ "env", "runtime", "envSpecificDetails", "plan", "region", "numInstances", "buildPlan" ], "properties": { "autoscaling": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "disk": { "$ref": "#/components/schemas/webServiceDetails/properties/disk" }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetails" }, "numInstances": { "type": "integer", "description": "For a *manually* scaled service, this is the number of instances the service is scaled to. DOES NOT indicate the number of running instances for an *autoscaled* service." }, "parentServer": { "$ref": "#/components/schemas/resource" }, "plan": { "$ref": "#/components/schemas/plan" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "sshAddress": { "$ref": "#/components/schemas/sshAddress" }, "buildPlan": { "$ref": "#/components/schemas/buildPlan" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "cronJobDetails": { "required": [ "env", "runtime", "envSpecificDetails", "plan", "region", "schedule", "buildPlan" ], "type": "object", "properties": { "env": { "$ref": "#/components/schemas/serviceEnv" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetails" }, "lastSuccessfulRunAt": { "type": "string", "format": "date-time" }, "plan": { "$ref": "#/components/schemas/plan" }, "region": { "$ref": "#/components/schemas/region" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "schedule": { "type": "string" }, "buildPlan": { "$ref": "#/components/schemas/buildPlan" } } }, "serviceList": { "type": "array", "items": { "$ref": "#/components/schemas/serviceWithCursor" } }, "serviceWithCursor": { "type": "object", "required": [ "service", "cursor" ], "properties": { "service": { "$ref": "#/components/schemas/service" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "servicePOST": { "type": "object", "required": [ "type", "name", "ownerId" ], "properties": { "type": { "$ref": "#/components/schemas/serviceType" }, "name": { "type": "string", "description": "The service's name. Must be unique within the workspace." }, "ownerId": { "type": "string", "description": "The ID of the workspace the service belongs to. Obtain your workspace's ID from its Settings page in the Render Dashboard." }, "repo": { "type": "string", "example": "https://github.com/render-examples/flask-hello-world", "description": "The service's repository URL. Do not specify a branch in this string (use the `branch` parameter instead)." }, "autoDeploy": { "$ref": "#/components/schemas/autoDeploy" }, "branch": { "type": "string", "description": "The repo branch to pull, build, and deploy. If omitted, uses the repository's default branch." }, "image": { "$ref": "#/components/schemas/image" }, "buildFilter": { "$ref": "#/components/schemas/buildFilter" }, "rootDir": { "type": "string" }, "envVars": { "$ref": "#/components/schemas/envVarInputArray" }, "secretFiles": { "type": "array", "items": { "$ref": "#/components/schemas/secretFileInput" } }, "environmentId": { "type": "string", "description": "The ID of the environment the service belongs to, if any. Obtain an environment's ID from its Settings page in the Render Dashboard." }, "serviceDetails": { "oneOf": [ { "$ref": "#/components/schemas/staticSiteDetailsPOST" }, { "$ref": "#/components/schemas/webServiceDetailsPOST" }, { "$ref": "#/components/schemas/privateServiceDetailsPOST" }, { "$ref": "#/components/schemas/backgroundWorkerDetailsPOST" }, { "$ref": "#/components/schemas/cronJobDetailsPOST" } ] } } }, "dockerDetailsPOST": { "type": "object", "properties": { "dockerCommand": { "type": "string" }, "dockerContext": { "type": "string" }, "dockerfilePath": { "type": "string", "description": "Defaults to \"./Dockerfile\"" }, "registryCredentialId": { "type": "string" } } }, "nativeEnvironmentDetailsPOST": { "type": "object", "required": [ "buildCommand", "startCommand" ], "properties": { "buildCommand": { "type": "string" }, "startCommand": { "type": "string" } }, "description": "Fields for native environment (runtime) services" }, "staticSiteDetailsPOST": { "type": "object", "properties": { "buildCommand": { "type": "string" }, "headers": { "type": "array", "items": { "$ref": "#/components/schemas/headerInput" } }, "publishPath": { "type": "string", "description": "Defaults to \"public\"" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "routes": { "type": "array", "items": { "$ref": "#/components/schemas/routePost" } }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "webServiceDetailsPOST": { "type": "object", "required": [ "runtime" ], "properties": { "autoscaling": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "disk": { "$ref": "#/components/schemas/serviceDisk" }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPOST" }, "healthCheckPath": { "type": "string" }, "maintenanceMode": { "$ref": "#/components/schemas/maintenanceMode" }, "numInstances": { "type": "integer", "minimum": 1, "description": "Defaults to 1" }, "plan": { "$ref": "#/components/schemas/plan", "default": "starter", "description": "The instance type to use. If omitted, defaults to `starter` when creating a new service." }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "privateServiceDetailsPOST": { "type": "object", "required": [ "runtime" ], "properties": { "autoscaling": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "disk": { "$ref": "#/components/schemas/serviceDisk" }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPOST" }, "numInstances": { "type": "integer", "minimum": 1, "default": 1, "description": "Defaults to 1" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "backgroundWorkerDetailsPOST": { "type": "object", "required": [ "runtime" ], "properties": { "autoscaling": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "disk": { "$ref": "#/components/schemas/serviceDisk" }, "env": { "$ref": "#/components/schemas/serviceEnv" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPOST" }, "numInstances": { "type": "integer", "minimum": 1, "default": 1, "description": "Defaults to 1" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "region": { "$ref": "#/components/schemas/region" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "cronJobDetailsPOST": { "type": "object", "required": [ "runtime", "schedule" ], "properties": { "env": { "$ref": "#/components/schemas/serviceEnv" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetails" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "region": { "$ref": "#/components/schemas/region" }, "schedule": { "type": "string" } } }, "servicePATCH": { "type": "object", "properties": { "autoDeploy": { "$ref": "#/components/schemas/autoDeploy" }, "repo": { "type": "string" }, "branch": { "type": "string" }, "image": { "$ref": "#/components/schemas/image" }, "name": { "type": "string" }, "buildFilter": { "$ref": "#/components/schemas/buildFilter" }, "rootDir": { "type": "string" }, "serviceDetails": { "oneOf": [ { "$ref": "#/components/schemas/staticSiteDetailsPATCH" }, { "$ref": "#/components/schemas/webServiceDetailsPATCH" }, { "$ref": "#/components/schemas/privateServiceDetailsPATCH" }, { "$ref": "#/components/schemas/backgroundWorkerDetailsPATCH" }, { "$ref": "#/components/schemas/cronJobDetailsPATCH" } ] } } }, "dockerDetailsPATCH": { "type": "object", "properties": { "dockerCommand": { "type": "string" }, "dockerContext": { "type": "string" }, "dockerfilePath": { "type": "string" }, "registryCredentialId": { "type": "string" } } }, "nativeEnvironmentDetailsPATCH": { "type": "object", "properties": { "buildCommand": { "type": "string" }, "startCommand": { "type": "string" } } }, "staticSiteDetailsPATCH": { "type": "object", "properties": { "buildCommand": { "type": "string" }, "publishPath": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "webServiceDetailsPATCH": { "type": "object", "properties": { "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPATCH" }, "healthCheckPath": { "type": "string" }, "maintenanceMode": { "$ref": "#/components/schemas/maintenanceMode" }, "plan": { "$ref": "#/components/schemas/plan" }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" }, "renderSubdomainPolicy": { "$ref": "#/components/schemas/renderSubdomainPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "cache": { "$ref": "#/components/schemas/cache" } } }, "privateServiceDetailsPATCH": { "type": "object", "properties": { "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPATCH" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "backgroundWorkerDetailsPATCH": { "type": "object", "properties": { "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPATCH" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "preDeployCommand": { "type": "string" }, "pullRequestPreviewsEnabled": { "$ref": "#/components/schemas/pullRequestPreviewsEnabled" }, "previews": { "$ref": "#/components/schemas/previews" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" }, "maxShutdownDelaySeconds": { "$ref": "#/components/schemas/maxShutdownDelaySeconds" } } }, "cronJobDetailsPATCH": { "type": "object", "properties": { "envSpecificDetails": { "$ref": "#/components/schemas/envSpecificDetailsPATCH" }, "plan": { "$ref": "#/components/schemas/paidPlan" }, "schedule": { "type": "string" }, "runtime": { "$ref": "#/components/schemas/serviceRuntime" } } }, "envVarInputArray": { "type": "array", "items": { "$ref": "#/components/schemas/envVarInput" } }, "envVarInput": { "type": "object", "oneOf": [ { "$ref": "#/components/schemas/envVarKeyValue" }, { "$ref": "#/components/schemas/envVarKeyGenerateValue" } ] }, "envVarKeyValue": { "type": "object", "required": [ "key", "value" ], "properties": { "key": { "type": "string" }, "value": { "type": "string" } } }, "envVarValue": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string" } } }, "envVarKeyGenerateValue": { "type": "object", "required": [ "key", "generateValue" ], "properties": { "key": { "type": "string" }, "generateValue": { "type": "boolean" } } }, "envVarGenerateValue": { "type": "object", "required": [ "generateValue" ], "properties": { "generateValue": { "type": "boolean" } } }, "addUpdateEnvVarInput": { "type": "object", "oneOf": [ { "$ref": "#/components/schemas/envVarValue" }, { "$ref": "#/components/schemas/envVarGenerateValue" } ] }, "previewInput": { "type": "object", "required": [ "imagePath" ], "properties": { "imagePath": { "type": "string", "example": "docker.io/library/nginx:latest", "description": "Must be either a full URL or the relative path to an image. If a relative path, Render uses the base service's image URL as its root. For example, if the base service's image URL is `docker.io/library/nginx:latest`, then valid values are: `docker.io/library/nginx:`, `library/nginx:`, or `nginx:`. Note that the path must match (only the tag or SHA can vary)." }, "name": { "type": "string", "example": "preview", "description": "A name for the service preview instance. If not specified, Render generates the name using the base service's name and the specified tag or SHA." }, "plan": { "$ref": "#/components/schemas/plan" } } }, "plan": { "type": "string", "enum": [ "starter", "starter_plus", "standard", "standard_plus", "pro", "pro_plus", "pro_max", "pro_ultra", "free", "custom" ], "example": "starter", "description": "The instance type to use. Note that base services on any paid instance type can't create preview instances with the `free` instance type." }, "header": { "type": "object", "required": [ "id", "path", "name", "value" ], "properties": { "id": { "type": "string" }, "path": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" } } }, "headerInput": { "type": "object", "required": [ "path", "name", "value" ], "properties": { "path": { "type": "string", "description": "The request path to add the header to. Wildcards will cause headers to be applied to all matching paths.", "example": "/static/*" }, "name": { "type": "string", "description": "Header name", "example": "Cache-Control" }, "value": { "type": "string", "description": "Header value", "example": "public, max-age=604800" } } }, "notificationOverrideWithCursor": { "required": [ "override", "cursor" ], "type": "object", "properties": { "override": { "type": "object", "required": [ "type", "serviceId", "previewNotificationsEnabled", "notificationsToSend" ], "properties": { "serviceId": { "type": "string" }, "previewNotificationsEnabled": { "type": "string", "enum": [ "default", "false", "true" ] }, "notificationsToSend": { "type": "string", "enum": [ "default", "none", "failure", "all" ] } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "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" ] } } }, "teamMember": { "type": "object", "required": [ "userId", "name", "email", "status", "role", "mfaEnabled" ], "properties": { "userId": { "type": "string" }, "name": { "type": "string" }, "email": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "inactive" ] }, "role": { "$ref": "#/components/schemas/teamMemberRole" }, "mfaEnabled": { "type": "boolean" } } }, "teamMembers": { "type": "array", "items": { "$ref": "#/components/schemas/teamMember" } }, "teamMemberRole": { "type": "string", "description": "The member's workspace role. Values are always returned in uppercase.", "enum": [ "ADMIN", "DEVELOPER", "WORKSPACE_CONTRIBUTOR", "WORKSPACE_BILLING", "WORKSPACE_VIEWER" ], "example": "DEVELOPER" }, "ownerWithCursor": { "type": "object", "properties": { "owner": { "$ref": "#/components/schemas/owner" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "route": { "type": "object", "required": [ "id", "type", "source", "destination", "priority" ], "properties": { "id": { "type": "string" }, "type": { "$ref": "#/components/schemas/routeType" }, "source": { "type": "string" }, "destination": { "type": "string" }, "priority": { "type": "integer", "description": "Redirect and Rewrite Rules are applied in priority order starting at 0" } } }, "headerWithCursor": { "type": "object", "required": [ "header", "cursor" ], "properties": { "header": { "$ref": "#/components/schemas/header" }, "cursor": { "type": "string" } } }, "routeWithCursor": { "type": "object", "required": [ "route", "cursor" ], "properties": { "route": { "$ref": "#/components/schemas/route" }, "cursor": { "type": "string" } } }, "routePost": { "type": "object", "required": [ "type", "source", "destination" ], "properties": { "type": { "$ref": "#/components/schemas/routeType" }, "source": { "type": "string", "example": "/:bar/foo" }, "destination": { "type": "string", "example": "/foo/:bar" }, "priority": { "type": "integer", "description": "Redirect and Rewrite Rules are applied in priority order starting at 0. Defaults to last in the priority list." } } }, "routePatch": { "type": "object", "required": [ "priority" ], "properties": { "priority": { "x-go-type": "*int", "type": "integer", "description": "Redirect and Rewrite Rules are applied in priority order starting at 0. Moves this route to the specified priority and adjusts other route priorities accordingly." } } }, "routePut": { "type": "object", "required": [ "type", "source", "destination" ], "properties": { "type": { "$ref": "#/components/schemas/routeType" }, "source": { "type": "string", "example": "/:bar/foo" }, "destination": { "type": "string", "example": "/foo/:bar" } } }, "routeType": { "type": "string", "enum": [ "redirect", "rewrite" ] }, "serviceType": { "type": "string", "enum": [ "static_site", "web_service", "private_service", "background_worker", "cron_job" ] }, "serviceTypeShort": { "type": "string", "enum": [ "static", "web", "pserv", "worker", "cron" ] }, "serviceRuntime": { "type": "string", "enum": [ "docker", "elixir", "go", "node", "python", "ruby", "rust", "image" ], "description": "Runtime" }, "serviceEnv": { "type": "string", "enum": [ "docker", "elixir", "go", "node", "python", "ruby", "rust", "image" ], "deprecated": true, "description": "This field has been deprecated, runtime should be used in its place." }, "sshAddress": { "type": "string", "description": "The SSH address for the service. Only present for services that have SSH enabled." }, "region": { "type": "string", "enum": [ "frankfurt", "oregon", "ohio", "singapore", "virginia" ], "default": "oregon", "description": "Defaults to \"oregon\"" }, "notifySetting": { "type": "string", "enum": [ "default", "notify", "ignore" ] }, "suspenderType": { "type": "string", "enum": [ "admin", "billing", "user", "parent_service", "stuck_crashlooping", "hipaa_enablement", "unknown" ] }, "deployStatus": { "type": "string", "enum": [ "created", "queued", "build_in_progress", "update_in_progress", "live", "deactivated", "build_failed", "update_failed", "canceled", "pre_deploy_in_progress", "pre_deploy_failed" ] }, "deploy": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" }, "commit": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "image": { "description": "Image information used when creating the deploy. Not present for Git-backed deploys", "type": "object", "properties": { "ref": { "description": "Image reference used when creating the deploy", "type": "string" }, "sha": { "description": "SHA that the image reference was resolved to when creating the deploy", "type": "string" }, "registryCredential": { "description": "Name of credential used to pull the image, if provided", "type": "string" } } }, "status": { "$ref": "#/components/schemas/deployStatus" }, "trigger": { "type": "string", "enum": [ "api", "blueprint_sync", "deploy_hook", "deployed_by_render", "manual", "other", "new_commit", "rollback", "service_resumed", "service_updated" ] }, "startedAt": { "type": "string", "format": "date-time" }, "finishedAt": { "type": "string", "format": "date-time" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "envVar": { "type": "object", "required": [ "key", "value" ], "properties": { "key": { "type": "string" }, "value": { "type": "string" } } }, "envVarWithCursor": { "type": "object", "required": [ "envVar", "cursor" ], "properties": { "envVar": { "$ref": "#/components/schemas/envVar" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "customDomainWithCursor": { "required": [ "customDomain", "cursor" ], "type": "object", "properties": { "customDomain": { "$ref": "#/components/schemas/customDomain" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "customDomain": { "type": "object", "required": [ "id", "name", "domainType", "publicSuffix", "verificationStatus", "createdAt", "redirectForName" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "domainType": { "type": "string", "enum": [ "apex", "subdomain" ] }, "publicSuffix": { "type": "string" }, "redirectForName": { "type": "string" }, "verificationStatus": { "type": "string", "enum": [ "verified", "unverified" ] }, "createdAt": { "type": "string", "format": "date-time" }, "server": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } } } }, "serverPort": { "type": "object", "required": [ "port", "protocol" ], "properties": { "port": { "type": "integer", "example": 10000 }, "protocol": { "type": "string", "enum": [ "TCP", "UDP" ] } } }, "error": { "type": "object", "properties": { "id": { "type": "string" }, "message": { "type": "string" } } }, "pullRequestPreviewsEnabled": { "type": "string", "enum": [ "yes", "no" ], "default": "no", "deprecated": true, "description": "This field has been deprecated. previews.generation should be used in its place." }, "previews": { "type": "object", "properties": { "generation": { "type": "string", "enum": [ "off", "manual", "automatic" ], "default": "off", "description": "Defaults to \"off\"" } } }, "buildPlan": { "type": "string", "enum": [ "starter", "performance" ], "default": "starter" }, "renderSubdomainPolicy": { "type": "string", "enum": [ "enabled", "disabled" ], "description": "Controls whether render.com subdomains are available for the service" }, "keyValuePOSTInput": { "type": "object", "description": "Input type for creating a Key Value instance", "required": [ "name", "ownerId", "plan" ], "properties": { "name": { "type": "string", "description": "The name of the Key Value instance" }, "ownerId": { "type": "string", "description": "The ID of the owner of the Key Value instance" }, "plan": { "$ref": "#/components/schemas/keyValuePlan" }, "region": { "type": "string", "description": "The region where the Key Value instance is located" }, "environmentId": { "type": "string" }, "maxmemoryPolicy": { "$ref": "#/components/schemas/maxmemoryPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "keyValuePATCHInput": { "type": "object", "description": "Input type for updating a Key Value instance", "properties": { "name": { "type": "string", "description": "The name of the Key Value instance" }, "plan": { "$ref": "#/components/schemas/keyValuePlan" }, "maxmemoryPolicy": { "$ref": "#/components/schemas/maxmemoryPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "maxmemoryPolicy": { "type": "string", "description": "The eviction policy for the Key Value instance", "enum": [ "noeviction", "allkeys_lfu", "allkeys_lru", "allkeys_random", "volatile_lfu", "volatile_lru", "volatile_random", "volatile_ttl" ] }, "keyValue": { "type": "object", "description": "A Key Value instance", "required": [ "id", "createdAt", "updatedAt", "status", "region", "plan", "name", "owner", "options", "ipAllowList", "version", "dashboardUrl" ], "properties": { "id": { "description": "The ID of the Key Value instance", "type": "string" }, "createdAt": { "description": "The creation time of the Key Value instance", "type": "string", "format": "date-time" }, "updatedAt": { "description": "The last updated time of the Key Value instance", "type": "string", "format": "date-time" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "region": { "$ref": "#/components/schemas/region" }, "plan": { "$ref": "#/components/schemas/keyValuePlan" }, "name": { "description": "The name of the Key Value instance", "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "options": { "$ref": "#/components/schemas/keyValueOptions" }, "ipAllowList": { "description": "The IP allow list for the Key Value instance", "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "environmentId": { "description": "The ID of the environment the Key Value instance is associated with", "type": "string" }, "version": { "description": "The version of Key Value", "type": "string" }, "dashboardUrl": { "type": "string", "description": "The URL to view the Key Value instance in the Render Dashboard" } } }, "keyValueWithCursor": { "type": "object", "required": [ "keyValue", "cursor" ], "properties": { "keyValue": { "$ref": "#/components/schemas/keyValue" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "keyValueDetail": { "type": "object", "description": "A Key Value instance", "required": [ "id", "createdAt", "updatedAt", "status", "region", "plan", "name", "owner", "options", "ipAllowList", "version" ], "properties": { "id": { "description": "The ID of the Key Value instance", "type": "string" }, "createdAt": { "description": "The creation time of the Key Value instance", "type": "string", "format": "date-time" }, "updatedAt": { "description": "The last updated time of the Key Value instance", "type": "string", "format": "date-time" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "region": { "$ref": "#/components/schemas/region" }, "plan": { "$ref": "#/components/schemas/keyValuePlan" }, "name": { "description": "The name of the Key Value instance", "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "options": { "$ref": "#/components/schemas/keyValueOptions" }, "ipAllowList": { "description": "The IP allow list for the Key Value instance", "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "environmentId": { "description": "The ID of the environment the Key Value instance is associated with", "type": "string" }, "version": { "description": "The version of Key Value", "type": "string" }, "maintenance": { "$ref": "#/components/schemas/redisDetail/properties/maintenance" } } }, "keyValueConnectionInfo": { "type": "object", "description": "A Key Value instance", "required": [ "internalConnectionString", "externalConnectionString", "cliCommand" ], "properties": { "internalConnectionString": { "description": "The connection string to use from within Render", "type": "string" }, "externalConnectionString": { "description": "The connection string to use from outside Render", "type": "string", "format": "password" }, "cliCommand": { "description": "The CLI (redis-cli or valkey-cli) command to connect to the Key Value instance", "type": "string", "format": "password" } } }, "keyValueOptions": { "description": "Options for a Key Value instance", "type": "object", "properties": { "maxmemoryPolicy": { "type": "string" } } }, "cidrBlockAndDescription": { "type": "object", "required": [ "cidrBlock", "description" ], "properties": { "cidrBlock": { "type": "string" }, "description": { "description": "User-provided description of the CIDR block", "type": "string" } } }, "keyValuePlan": { "type": "string", "enum": [ "free", "starter", "standard", "pro", "pro_plus", "custom" ] }, "redisPOSTInput": { "type": "object", "description": "Input type for creating a Redis instance", "required": [ "name", "ownerId", "plan" ], "properties": { "name": { "type": "string", "description": "The name of the Redis instance" }, "ownerId": { "type": "string", "description": "The ID of the owner of the Redis instance" }, "plan": { "$ref": "#/components/schemas/redisPlan" }, "region": { "type": "string", "description": "The region where the Redis instance is located" }, "environmentId": { "type": "string" }, "maxmemoryPolicy": { "$ref": "#/components/schemas/maxmemoryPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "redisPATCHInput": { "type": "object", "description": "Input type for updating a Redis instance", "properties": { "name": { "type": "string", "description": "The name of the Redis instance" }, "plan": { "$ref": "#/components/schemas/redisPlan" }, "maxmemoryPolicy": { "$ref": "#/components/schemas/maxmemoryPolicy" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } } } }, "redis": { "type": "object", "description": "A Redis instance", "required": [ "id", "createdAt", "updatedAt", "status", "region", "plan", "name", "owner", "options", "ipAllowList", "version", "dashboardUrl" ], "properties": { "id": { "description": "The ID of the Redis instance", "type": "string" }, "createdAt": { "description": "The creation time of the Redis instance", "type": "string", "format": "date-time" }, "updatedAt": { "description": "The last updated time of the Redis instance", "type": "string", "format": "date-time" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "region": { "$ref": "#/components/schemas/region" }, "plan": { "$ref": "#/components/schemas/redisPlan" }, "name": { "description": "The name of the Redis instance", "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "options": { "$ref": "#/components/schemas/redisOptions" }, "ipAllowList": { "description": "The IP allow list for the Redis instance", "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "environmentId": { "description": "The ID of the environment the Redis instance is associated with", "type": "string" }, "version": { "description": "The version of Redis", "type": "string" }, "dashboardUrl": { "type": "string", "description": "The URL to view the Redis instance in the Render Dashboard" } } }, "redisWithCursor": { "type": "object", "required": [ "redis", "cursor" ], "properties": { "redis": { "$ref": "#/components/schemas/redis" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "redisDetail": { "type": "object", "description": "A Redis instance", "required": [ "id", "createdAt", "updatedAt", "status", "region", "plan", "name", "owner", "options", "ipAllowList", "version" ], "properties": { "id": { "description": "The ID of the Redis instance", "type": "string" }, "createdAt": { "description": "The creation time of the Redis instance", "type": "string", "format": "date-time" }, "updatedAt": { "description": "The last updated time of the Redis instance", "type": "string", "format": "date-time" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "region": { "$ref": "#/components/schemas/region" }, "plan": { "$ref": "#/components/schemas/redisPlan" }, "name": { "description": "The name of the Redis instance", "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "options": { "$ref": "#/components/schemas/redisOptions" }, "ipAllowList": { "description": "The IP allow list for the Redis instance", "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "environmentId": { "description": "The ID of the environment the Redis instance is associated with", "type": "string" }, "version": { "description": "The version of Redis", "type": "string" }, "maintenance": { "type": "object", "required": [ "id", "type", "scheduledAt", "state" ], "properties": { "id": { "$ref": "#/paths/~1maintenance~1%7BmaintenanceRunParam%7D/get/parameters/0/schema" }, "type": { "type": "string" }, "scheduledAt": { "type": "string", "format": "date-time" }, "pendingMaintenanceBy": { "type": "string", "format": "date-time", "description": "If present, the maintenance run cannot be scheduled for later than this date-time." }, "state": { "$ref": "#/paths/~1maintenance/get/parameters/2/schema/items" } } } } }, "redisConnectionInfo": { "type": "object", "description": "A Redis instance", "required": [ "internalConnectionString", "externalConnectionString", "redisCLICommand" ], "properties": { "internalConnectionString": { "description": "The connection string to use from within Render", "type": "string" }, "externalConnectionString": { "description": "The connection string to use from outside Render", "type": "string", "format": "password" }, "redisCLICommand": { "description": "The Redis CLI command to connect to the Redis instance", "type": "string", "format": "password" } } }, "redisOptions": { "description": "Options for a Redis instance", "type": "object", "properties": { "maxmemoryPolicy": { "type": "string" } } }, "redisPlan": { "type": "string", "enum": [ "free", "starter", "standard", "pro", "pro_plus", "custom" ], "x-enum-varnames": [ "RedisPlanFree", "RedisPlanStarter", "RedisPlanStandard", "RedisPlanPro", "RedisPlanPro_plus", "RedisPlanCustom" ] }, "databaseStatus": { "type": "string", "enum": [ "creating", "available", "unavailable", "config_restart", "suspended", "maintenance_scheduled", "maintenance_in_progress", "recovery_failed", "recovery_in_progress", "unknown", "updating_instance" ] }, "DeployMode": { "type": "string", "enum": [ "deploy_only", "build_and_deploy" ], "description": "Controls deployment behavior when triggering a deploy.\n\n- `deploy_only`: Deploy the last successful build without rebuilding (minimizes downtime)\n- `build_and_deploy`: Build new code and deploy it (default behavior when not specified)\n\n**Note:** `deploy_only` cannot be combined with `commitId`, `imageUrl` or `clearCache` parameters,\nas those are build related fields.\n", "default": "build_and_deploy" }, "projectWithCursor": { "type": "object", "required": [ "project", "cursor" ], "properties": { "project": { "$ref": "#/components/schemas/project" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "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" } } } }, "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" } } } }, "projectPATCHInput": { "description": "Input type for updating a project", "type": "object", "properties": { "name": { "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" } } } }, "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" } } } }, "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" } } } }, "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" } } } }, "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" } } }, "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" ] }, "networkIsolationEnabled": { "type": "boolean", "description": "Indicates whether network connections across environments are allowed." }, "envGroupPOSTInput": { "type": "object", "required": [ "name", "ownerId", "envVars" ], "properties": { "name": { "type": "string" }, "ownerId": { "type": "string" }, "envVars": { "$ref": "#/components/schemas/envVarInputArray" }, "secretFiles": { "type": "array", "items": { "$ref": "#/components/schemas/secretFileInput" } }, "serviceIds": { "type": "array", "items": { "description": "List of serviceIds to link the envGroup to", "type": "string" } }, "environmentId": { "type": "string" } } }, "envGroupPATCHInput": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "secretFileInput": { "type": "object", "required": [ "name", "content" ], "properties": { "name": { "type": "string" }, "content": { "type": "string" } } }, "envGroup": { "allOf": [ { "$ref": "#/components/schemas/envGroupMeta" }, { "type": "object", "required": [ "envVars", "secretFiles" ], "properties": { "envVars": { "type": "array", "items": { "$ref": "#/components/schemas/envVar" } }, "secretFiles": { "type": "array", "items": { "$ref": "#/components/schemas/secretFile" } } } } ] }, "envGroupMeta": { "type": "object", "required": [ "id", "name", "ownerId", "createdAt", "updatedAt", "serviceLinks" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "ownerId": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "serviceLinks": { "description": "List of serviceIds linked to the envGroup", "type": "array", "items": { "$ref": "#/components/schemas/envGroupLink" } }, "environmentId": { "type": "string" } } }, "secretFile": { "type": "object", "required": [ "name", "content" ], "properties": { "name": { "type": "string" }, "content": { "type": "string" } } }, "secretFileWithCursor": { "type": "object", "required": [ "secretFile", "cursor" ], "properties": { "secretFile": { "$ref": "#/components/schemas/secretFile" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "envGroupLink": { "type": "object", "required": [ "id", "name", "type" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "$ref": "#/components/schemas/serviceTypeShort" } } }, "postgresPOSTInput": { "type": "object", "required": [ "name", "plan", "ownerId", "version" ], "properties": { "databaseName": { "type": "string", "default": "randomly generated" }, "databaseUser": { "type": "string", "default": "randomly generated" }, "datadogAPIKey": { "type": "string", "description": "The Datadog API key for the Datadog agent to monitor the new database." }, "datadogSite": { "type": "string", "description": "Datadog region to use for monitoring the new database. Defaults to 'US1'.", "example": "US1" }, "name": { "type": "string", "description": "The name of the database as it will appear in the Render Dashboard" }, "enableHighAvailability": { "type": "boolean", "default": false }, "environmentId": { "type": "string" }, "ownerId": { "type": "string", "description": "The ID of the workspace to create the database for" }, "plan": { "$ref": "#/components/schemas/postgres/properties/plan" }, "diskSizeGB": { "type": "integer", "description": "The number of gigabytes of disk space to allocate for the database" }, "enableDiskAutoscaling": { "type": "boolean", "default": false }, "region": { "type": "string" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "parameterOverrides": { "$ref": "#/components/schemas/postgresParameterOverrides" }, "readReplicas": { "$ref": "#/components/schemas/readReplicasInput" }, "version": { "$ref": "#/components/schemas/postgresVersion" } }, "description": "Input for creating a database" }, "postgresPATCHInput": { "type": "object", "properties": { "name": { "type": "string" }, "plan": { "$ref": "#/components/schemas/postgres/properties/plan" }, "diskSizeGB": { "type": "integer", "description": "The number of gigabytes of disk space to allocate for the database" }, "enableDiskAutoscaling": { "type": "boolean" }, "enableHighAvailability": { "type": "boolean" }, "datadogAPIKey": { "type": "string", "description": "The Datadog API key for the Datadog agent to monitor the database. Pass empty string to remove. Restarts Postgres on change." }, "datadogSite": { "type": "string", "description": "Datadog region to use for monitoring the new database. Defaults to 'US1'.", "example": "US1" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "parameterOverrides": { "$ref": "#/components/schemas/postgresParameterOverrides" }, "readReplicas": { "$ref": "#/components/schemas/readReplicasInput" } } }, "readReplicas": { "type": "array", "items": { "$ref": "#/components/schemas/readReplica" } }, "readReplica": { "type": "object", "properties": { "id": { "type": "string", "description": "The replica instance identifier." }, "name": { "type": "string", "description": "The display name of the replica instance." }, "parameterOverrides": { "$ref": "#/components/schemas/postgresParameterOverrides" } }, "required": [ "id", "name" ] }, "readReplicasInput": { "type": "array", "items": { "$ref": "#/components/schemas/readReplicaInput" } }, "readReplicaInput": { "type": "object", "properties": { "name": { "type": "string", "description": "The display name of the replica instance." }, "parameterOverrides": { "$ref": "#/components/schemas/postgresParameterOverrides" } }, "required": [ "name" ] }, "postgresParameterOverrides": { "type": "object", "additionalProperties": { "type": "string" } }, "postgresConnectionInfo": { "type": "object", "required": [ "password", "internalConnectionString", "externalConnectionString", "psqlCommand" ], "properties": { "password": { "type": "string", "format": "password" }, "internalConnectionString": { "type": "string", "format": "password" }, "externalConnectionString": { "type": "string", "format": "password" }, "psqlCommand": { "type": "string", "format": "password" } } }, "postgresWithCursor": { "type": "object", "required": [ "postgres", "cursor" ], "properties": { "postgres": { "$ref": "#/components/schemas/postgres" }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "postgres": { "type": "object", "required": [ "id", "ipAllowList", "createdAt", "updatedAt", "databaseName", "databaseUser", "highAvailabilityEnabled", "name", "owner", "plan", "region", "readReplicas", "role", "status", "version", "suspended", "suspenders", "dashboardUrl", "diskAutoscalingEnabled" ], "properties": { "id": { "type": "string" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "expiresAt": { "description": "The time at which the database will be expire. Applies to free tier databases only.", "type": "string", "format": "date-time" }, "databaseName": { "type": "string" }, "databaseUser": { "type": "string" }, "environmentId": { "type": "string" }, "highAvailabilityEnabled": { "type": "boolean" }, "name": { "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "plan": { "type": "string", "enum": [ "free", "starter", "standard", "pro", "pro_plus", "custom", "basic_256mb", "basic_1gb", "basic_4gb", "pro_4gb", "pro_8gb", "pro_16gb", "pro_32gb", "pro_64gb", "pro_128gb", "pro_192gb", "pro_256gb", "pro_384gb", "pro_512gb", "accelerated_16gb", "accelerated_32gb", "accelerated_64gb", "accelerated_128gb", "accelerated_256gb", "accelerated_384gb", "accelerated_512gb", "accelerated_768gb", "accelerated_1024gb" ] }, "diskSizeGB": { "type": "integer" }, "primaryPostgresID": { "type": "string" }, "region": { "$ref": "#/components/schemas/region" }, "readReplicas": { "$ref": "#/components/schemas/readReplicas" }, "role": { "$ref": "#/components/schemas/databaseRole" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "version": { "$ref": "#/components/schemas/postgresVersion" }, "suspended": { "type": "string", "enum": [ "suspended", "not_suspended" ] }, "suspenders": { "type": "array", "items": { "$ref": "#/components/schemas/suspenderType" } }, "dashboardUrl": { "type": "string", "description": "The URL to view the Postgres instance in the Render Dashboard" }, "diskAutoscalingEnabled": { "type": "boolean" } } }, "postgresDetail": { "type": "object", "required": [ "id", "ipAllowList", "createdAt", "updatedAt", "dashboardUrl", "databaseName", "databaseUser", "highAvailabilityEnabled", "name", "owner", "project", "plan", "region", "readReplicas", "role", "status", "version", "suspended", "suspenders", "diskAutoscalingEnabled" ], "properties": { "id": { "type": "string" }, "ipAllowList": { "type": "array", "items": { "$ref": "#/components/schemas/cidrBlockAndDescription" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "expiresAt": { "description": "The time at which the database will be expire. Applies to free tier databases only.", "type": "string", "format": "date-time" }, "dashboardUrl": { "type": "string", "description": "The URL to view the Postgres instance in the Render Dashboard" }, "databaseName": { "type": "string" }, "databaseUser": { "type": "string" }, "environmentId": { "type": "string" }, "highAvailabilityEnabled": { "type": "boolean" }, "maintenance": { "$ref": "#/components/schemas/redisDetail/properties/maintenance" }, "name": { "type": "string" }, "owner": { "$ref": "#/components/schemas/owner" }, "plan": { "$ref": "#/components/schemas/postgres/properties/plan" }, "diskSizeGB": { "type": "integer" }, "parameterOverrides": { "$ref": "#/components/schemas/postgresParameterOverrides" }, "primaryPostgresID": { "type": "string" }, "region": { "$ref": "#/components/schemas/region" }, "readReplicas": { "$ref": "#/components/schemas/readReplicas" }, "role": { "$ref": "#/components/schemas/databaseRole" }, "status": { "$ref": "#/components/schemas/databaseStatus" }, "version": { "$ref": "#/components/schemas/postgresVersion" }, "suspended": { "type": "string", "enum": [ "suspended", "not_suspended" ] }, "suspenders": { "type": "array", "items": { "$ref": "#/components/schemas/suspenderType" } }, "diskAutoscalingEnabled": { "type": "boolean" } } }, "postgresVersion": { "type": "string", "description": "The PostgreSQL version", "enum": [ "11", "12", "13", "14", "15", "16", "17", "18" ] }, "databaseRole": { "type": "string", "enum": [ "primary", "replica" ] }, "paidPlan": { "type": "string", "enum": [ "starter", "standard", "pro", "pro_plus", "pro_max", "pro_ultra" ], "default": "starter", "description": "Defaults to `starter` when creating a new database." }, "cronJobRun": { "type": "object", "description": "A run of a cron job", "required": [ "id", "status" ], "properties": { "id": { "description": "The ID of the run", "type": "string" }, "status": { "type": "string", "enum": [ "pending", "successful", "unsuccessful", "canceled" ] }, "startedAt": { "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "triggeredBy": { "type": "string", "description": "user who triggered the cron job run" }, "canceledBy": { "type": "string", "description": "user who cancelled the cron job run" } } }, "blueprintWithCursor": { "type": "object", "description": "A Blueprint with a cursor", "required": [ "blueprint", "cursor" ], "properties": { "blueprint": { "type": "object", "required": [ "id", "name", "status", "autoSync", "repo", "branch", "path" ], "properties": { "id": { "$ref": "#/paths/~1blueprints~1%7BblueprintId%7D/parameters/0/schema" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "created", "paused", "in_sync", "syncing", "error" ] }, "autoSync": { "type": "boolean", "description": "Automatically sync changes to render.yaml" }, "repo": { "type": "string" }, "branch": { "type": "string" }, "path": { "type": "string", "description": "Path to the Blueprint file in the repository", "example": "render.yaml" }, "lastSync": { "type": "string", "format": "date-time" } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "syncWithCursor": { "type": "object", "description": "A Blueprint sync with a cursor", "required": [ "sync", "cursor" ], "properties": { "sync": { "type": "object", "required": [ "id", "commit", "state" ], "properties": { "id": { "type": "string", "pattern": "^exe-[0-9a-z]{20}$", "example": "exe-cph1rs3idesc73a2b2mg" }, "commit": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" } } }, "startedAt": { "type": "string", "format": "date-time" }, "completedAt": { "type": "string", "format": "date-time" }, "state": { "type": "string", "enum": [ "created", "pending", "running", "error", "success" ] } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "serviceEventWithCursor": { "type": "object", "description": "A service event with a cursor", "required": [ "event", "cursor" ], "properties": { "event": { "type": "object", "required": [ "id", "timestamp", "serviceId", "type", "details" ], "properties": { "id": { "$ref": "#/paths/~1events~1%7BeventId%7D/parameters/0/schema" }, "timestamp": { "type": "string", "format": "date-time" }, "serviceId": { "type": "string" }, "type": { "$ref": "#/components/parameters/eventTypeParam/schema/anyOf/0" }, "details": { "title": "Service Event Details", "oneOf": [ { "title": "Autoscaling Config Changed", "type": "object", "required": [ "toConfig" ], "properties": { "fromConfig": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" }, "toConfig": { "$ref": "#/components/schemas/webServiceDetails/properties/autoscaling" } } }, { "title": "Autoscaling Ended", "type": "object", "required": [ "fromInstances", "toInstances" ], "properties": { "fromInstances": { "type": "integer" }, "toInstances": { "type": "integer" } } }, { "title": "Autoscaling Started", "type": "object", "required": [ "fromInstances", "toInstances" ], "properties": { "fromInstances": { "type": "integer" }, "toInstances": { "type": "integer" }, "currentCPU": { "type": "integer", "x-go-type": "int64" }, "targetCPU": { "type": "integer", "x-go-type": "int64" }, "currentMemory": { "type": "integer", "x-go-type": "int64" }, "targetMemory": { "type": "integer", "x-go-type": "int64" } } }, { "title": "Branch Deleted", "type": "object", "required": [ "deletedBranch", "newBranch" ], "properties": { "deletedBranch": { "type": "string" }, "newBranch": { "type": "string" } } }, { "title": "Build Ended", "type": "object", "required": [ "buildId", "status", "reason", "buildStatus" ], "properties": { "buildId": { "type": "string" }, "buildStatus": { "type": "string", "enum": [ "succeeded", "failed", "canceled" ] }, "reason": { "type": "object", "properties": { "buildFailed": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/reason/properties/newBuild" }, "newBuild": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" } } }, "newDeploy": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/reason/properties/newBuild" }, "failure": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/reason" } } }, "status": { "deprecated": true, "type": "integer" } } }, { "title": "Build Started", "type": "object", "required": [ "buildId", "trigger" ], "properties": { "buildId": { "type": "string" }, "trigger": { "type": "object", "required": [ "firstBuild", "envUpdated", "manual", "deployedByRender", "clearCache", "rollback" ], "properties": { "firstBuild": { "description": "Deploy was triggered by service creation", "type": "boolean" }, "envUpdated": { "description": "Deploy was triggered by an environment update", "type": "boolean" }, "manual": { "description": "Deploy was triggered manually from the dashboard", "type": "boolean" }, "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" }, "updatedProperty": { "description": "Updated property that triggered the deploy", "type": "string" }, "newCommit": { "description": "Commit that triggered the deploy", "type": "string" }, "deployedByRender": { "description": "Deploy was triggered by Render", "type": "boolean" }, "clearCache": { "description": "Whether the cache was cleared for the deploy", "type": "boolean" }, "rollback": { "description": "Whether the deploy was triggered by a rollback", "type": "boolean" }, "rollbackTargetDeployId": { "description": "Deploy ID that was rolled back to", "type": "string" } } } } }, { "title": "Commit Ignored", "type": "object", "required": [ "id", "url" ], "properties": { "id": { "description": "the commit id", "type": "string" }, "url": { "description": "the commit url", "type": "string" } } }, { "title": "Cron Job Run Ended", "type": "object", "required": [ "cronJobRunId", "status" ], "properties": { "cronJobRunId": { "type": "string" }, "status": { "type": "string", "enum": [ "canceled", "pending", "successful", "unsuccessful" ] }, "reason": { "type": "object", "required": [ "evicted" ], "properties": { "evicted": { "type": "boolean" }, "nonZeroExit": { "type": "integer", "description": "If present, the application exited with the specified non-zero status." }, "earlyExit": { "type": "boolean", "description": "If true, the application exited early. Services besides cron jobs should not exit unless receiving a `SIGTERM` signal from Render." }, "oomKilled": { "type": "object", "required": [ "memoryLimit" ], "properties": { "memoryLimit": { "type": "string" } } }, "timedOutSeconds": { "type": "integer", "format": "int64" }, "unhealthy": { "type": "string" }, "timedOutReason": { "type": "string" } } }, "user": { "type": "object", "description": "User who triggered the action", "required": [ "id", "email" ], "properties": { "id": { "type": "string" }, "email": { "type": "string" } } } } }, { "title": "Cron Job Run Started", "type": "object", "required": [ "cronJobRunId" ], "properties": { "cronJobRunId": { "type": "string" } } }, { "title": "Deploy Ended", "type": "object", "required": [ "deployId", "reason", "status", "deployStatus" ], "properties": { "deployId": { "type": "string" }, "reason": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/reason" }, "deployStatus": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/buildStatus" }, "status": { "deprecated": true, "type": "integer" } } }, { "title": "Deploy Started", "type": "object", "required": [ "deployId", "trigger" ], "properties": { "deployId": { "type": "string" }, "trigger": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/5/properties/trigger" } } }, { "title": "Disk Created", "type": "object", "required": [ "diskId", "sizeGB" ], "properties": { "diskId": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" }, "sizeGB": { "type": "integer" } } }, { "title": "Disk Updated", "type": "object", "required": [ "diskId", "fromSizeGB", "toSizeGB" ], "properties": { "diskId": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" }, "fromSizeGB": { "type": "integer" }, "toSizeGB": { "type": "integer" } } }, { "title": "Disk Deleted", "type": "object", "required": [ "diskId" ], "properties": { "diskId": { "$ref": "#/paths/~1disks~1%7BdiskId%7D/parameters/0/schema" } } }, { "title": "Image Pull Failed", "type": "object", "required": [ "message", "imageURL" ], "properties": { "message": { "type": "string" }, "imageURL": { "type": "string" } } }, { "title": "Initial Deploy Hook Started", "type": "object", "required": [ "deployId" ], "properties": { "deployId": { "type": "string" } } }, { "title": "Initial Deploy Hook Ended", "type": "object", "required": [ "deployId" ], "properties": { "deployId": { "type": "string" } } }, { "title": "Instance Count Changed", "type": "object", "required": [ "fromInstances", "toInstances" ], "properties": { "fromInstances": { "type": "integer" }, "toInstances": { "type": "integer" } } }, { "title": "Job Run Ended", "type": "object", "required": [ "jobId", "status" ], "properties": { "jobId": { "$ref": "#/paths/~1services~1%7BserviceId%7D~1jobs~1%7BjobId%7D/parameters/1/schema" }, "status": { "$ref": "#/paths/~1services~1%7BserviceId%7D~1jobs/get/parameters/2/schema/items" }, "reason": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/reason" } } }, { "title": "Maintenance Mode Enabled", "type": "object", "required": [ "enabled" ], "properties": { "enabled": { "type": "boolean" } } }, { "title": "Maintenance Mode URI Updated", "type": "object", "required": [ "fromURI", "toURI" ], "properties": { "fromURI": { "type": "string" }, "toURI": { "type": "string" } } }, { "title": "Maintenance Ended", "type": "object" }, { "title": "Maintenance Started", "type": "object", "required": [ "trigger" ], "properties": { "trigger": { "type": "object", "required": [ "manual", "startedByRender" ], "properties": { "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" }, "manual": { "description": "Maintenance was triggered manually", "type": "boolean" }, "startedByRender": { "description": "Maintenance was triggered by Render", "type": "boolean" } } } } }, { "title": "Pipeline Minutes Exhausted", "type": "object", "required": [ "buildId", "trigger" ], "properties": { "buildId": { "type": "string" }, "trigger": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/5/properties/trigger" } } }, { "title": "Instance Type Changed", "type": "object", "required": [ "from", "to" ], "properties": { "from": { "type": "string" }, "to": { "type": "string" } } }, { "title": "Pre Deploy Ended", "type": "object", "required": [ "deployCommandExecutionId", "deployId", "status", "preDeployStatus", "reason" ], "properties": { "deployCommandExecutionId": { "type": "string" }, "deployId": { "type": "string" }, "preDeployStatus": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/buildStatus" }, "reason": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/4/properties/reason" }, "status": { "deprecated": true, "type": "integer" } } }, { "title": "Pre Deploy Started", "type": "object", "required": [ "deployCommandExecutionId", "deployId" ], "properties": { "deployCommandExecutionId": { "type": "string" }, "deployId": { "type": "string" } } }, { "title": "Server Available", "type": "object" }, { "title": "Server Failed", "type": "object", "properties": { "instanceID": { "type": "string", "pattern": "^srv-[0-9a-z]{20}-[0-9a-z]{5}$", "example": "srv-d0cjkelq67qs70c2pugg-sbpkm" }, "reason": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/reason" } } }, { "title": "Server Hardware Failure", "type": "object" }, { "title": "Server Restarted", "type": "object", "required": [ "triggeredByUser" ], "properties": { "triggeredByUser": { "type": "string", "nullable": true } } }, { "title": "Service Resumed", "type": "object" }, { "title": "Service Suspended", "type": "object" }, { "title": "Suspender Added", "type": "object", "required": [ "actor" ], "properties": { "actor": { "type": "string" }, "suspendedByUser": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" } } }, { "title": "Suspender Removed", "type": "object", "required": [ "actor" ], "properties": { "actor": { "type": "string" }, "resumedByUser": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" } } }, { "title": "Zero Downtime Redeploy Ended", "type": "object" }, { "title": "Zero Downtime Redeploy Started", "type": "object", "required": [ "trigger" ], "properties": { "trigger": { "type": "string" } } }, { "title": "Edge Cache Disabled", "type": "object", "required": [ "trigger" ], "properties": { "trigger": { "type": "object", "required": [ "manual", "system" ], "properties": { "manual": { "description": "Edge Cache change was triggered manually from the dashboard", "type": "boolean" }, "user": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/7/properties/user" }, "system": { "description": "Edge Cache Change was triggered by Render", "type": "boolean" } } } } }, { "title": "Edge Cache Enabled", "type": "object", "required": [ "trigger" ], "properties": { "trigger": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/37/properties/trigger" } } }, { "title": "Edge Cache Purged", "required": [ "trigger" ], "properties": { "trigger": { "$ref": "#/components/schemas/serviceEventWithCursor/properties/event/properties/details/oneOf/37/properties/trigger" } } } ] } } } } }, "jobWithCursor": { "type": "object", "required": [ "job", "cursor" ], "properties": { "job": { "type": "object", "required": [ "id", "serviceId", "startCommand", "planId", "createdAt" ], "properties": { "id": { "$ref": "#/paths/~1services~1%7BserviceId%7D~1jobs~1%7BjobId%7D/parameters/1/schema" }, "serviceId": { "type": "string", "example": "srv-xxxxx" }, "startCommand": { "type": "string", "example": "echo 'hello world'" }, "planId": { "type": "string", "example": "plan-srv-004" }, "status": { "$ref": "#/paths/~1services~1%7BserviceId%7D~1jobs/get/parameters/2/schema/items" }, "createdAt": { "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "startedAt": { "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "user": { "type": "object", "required": [ "email", "name" ], "properties": { "email": { "type": "string" }, "name": { "type": "string" } } }, "webhookWithCursor": { "type": "object", "required": [ "webhook", "cursor" ], "properties": { "webhook": { "type": "object", "required": [ "id", "name", "url", "secret", "enabled", "eventFilter" ], "properties": { "id": { "$ref": "#/paths/~1webhooks~1%7BwebhookId%7D/parameters/0/schema" }, "url": { "type": "string" }, "name": { "type": "string" }, "secret": { "type": "string" }, "enabled": { "type": "boolean" }, "eventFilter": { "type": "array", "description": "The event types that will trigger the webhook. An empty list means all event types will trigger the webhook.", "items": { "$ref": "#/components/schemas/webhookEventWithCursor/properties/webhookEvent/properties/eventType" } } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "webhookEventWithCursor": { "type": "object", "required": [ "webhookEvent", "cursor" ], "properties": { "webhookEvent": { "type": "object", "required": [ "id", "eventId", "eventType", "sentAt" ], "properties": { "id": { "type": "string", "description": "the id of the webhook event" }, "eventId": { "type": "string", "description": "the id of the event that triggered the webhook" }, "eventType": { "type": "string", "enum": [ "autoscaling_config_changed", "autoscaling_ended", "autoscaling_started", "branch_deleted", "build_ended", "build_started", "commit_ignored", "cron_job_run_ended", "cron_job_run_started", "deploy_ended", "deploy_started", "disk_created", "disk_updated", "disk_deleted", "image_pull_failed", "instance_count_changed", "job_run_ended", "maintenance_mode_enabled", "maintenance_mode_uri_updated", "maintenance_ended", "maintenance_started", "pipeline_minutes_exhausted", "plan_changed", "pre_deploy_ended", "pre_deploy_started", "server_available", "server_failed", "server_hardware_failure", "server_restarted", "service_resumed", "service_suspended", "zero_downtime_redeploy_ended", "zero_downtime_redeploy_started", "edge_cache_enabled", "edge_cache_disabled", "edge_cache_purged", "postgres_available", "postgres_backup_completed", "postgres_backup_failed", "postgres_backup_started", "postgres_cluster_leader_changed", "postgres_created", "postgres_disk_size_changed", "postgres_disk_autoscaling_enabled_changed", "postgres_ha_status_changed", "postgres_restarted", "postgres_unavailable", "postgres_upgrade_failed", "postgres_upgrade_started", "postgres_upgrade_succeeded", "postgres_restore_failed", "postgres_restore_succeeded", "postgres_read_replicas_changed", "postgres_pitr_checkpoint_started", "postgres_pitr_checkpoint_failed", "postgres_pitr_checkpoint_completed", "postgres_read_replica_stale", "postgres_wal_archive_failed", "key_value_available", "key_value_config_restart", "key_value_unhealthy" ] }, "sentAt": { "type": "string", "format": "date-time" }, "statusCode": { "type": "integer" }, "responseBody": { "type": "string" }, "error": { "type": "string", "description": "error is populated when an error occurs without a response such as a timeout" } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } }, "serviceInstance": { "type": "object", "required": [ "id", "createdAt" ], "properties": { "id": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } }, "taskRunWithCursor": { "type": "object", "required": [ "taskRun", "cursor" ], "properties": { "taskRun": { "type": "object", "required": [ "id", "taskId", "status", "parentTaskRunId", "rootTaskRunId", "retries", "attempts" ], "properties": { "id": { "type": "string" }, "taskId": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "running", "completed", "succeeded", "failed", "canceled", "paused" ] }, "startedAt": { "type": "string", "format": "date-time" }, "completedAt": { "type": "string", "format": "date-time" }, "parentTaskRunId": { "type": "string" }, "rootTaskRunId": { "type": "string" }, "retries": { "type": "integer" }, "attempts": { "type": "array", "items": { "type": "object", "required": [ "status", "startedAt" ], "properties": { "status": { "$ref": "#/components/schemas/taskRunWithCursor/properties/taskRun/properties/status" }, "enqueuedAt": { "type": "string", "format": "date-time" }, "startedAt": { "type": "string", "format": "date-time" }, "completedAt": { "type": "string", "format": "date-time" } } } } } }, "cursor": { "$ref": "#/components/schemas/cursor" } } } }, "responses": { "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" } } } }, "402PaymentRequired": { "description": "You must enter payment information to perform this request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "403Forbidden": { "description": "You do not have permissions for the requested resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "404NotFound": { "description": "Unable to find the requested resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "406NotAcceptable": { "description": "Unable to generate preferred media types as specified by Accept request header.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "409Conflict": { "description": "The current state of the resource conflicts with this request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "410Gone": { "description": "The requested resource is no longer available.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "429RateLimit": { "description": "Rate limit has been surpassed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "500InternalServerError": { "description": "An unexpected server error has occurred.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "503ServiceUnavailable": { "description": "Server currently unavailable.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error" } } } }, "Logs200Response": { "description": "A collection of logs with pagination metadata", "content": { "application/json": { "schema": { "type": "object", "description": "A run of a cron job", "required": [ "hasMore", "nextStartTime", "nextEndTime", "logs" ], "properties": { "hasMore": { "description": "Ture if there are more logs to fetch", "type": "boolean" }, "nextStartTime": { "description": "The start time to use in the next query to fetch the next set of logs", "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "nextEndTime": { "description": "The end time to use in the next query to fetch the next set of logs", "type": "string", "format": "date-time", "example": "2021-07-15T07:20:05.777035-07:00" }, "logs": { "type": "array", "items": { "$ref": "#/paths/~1logs~1subscribe/get/responses/101/content/application~1json/schema" } } } } } } }, "LogsValues200Response": { "description": "An array of possible values for a log label", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }