{"openapi":"3.0.2","info":{"title":"Bex platform API (Render-compatible contract)","description":"Bex's pinned upstream Render public OpenAPI contract, graded against the bex backend's registered REST routes. Served for documentation by api.bex.co; bex.co (this website) executes none of these operations.","version":"1.0.0","contact":{"name":"bex.co","url":"https://bex.co","email":"dev@stargately.com"}},"servers":[{"url":"https://api.bex.co/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":"Dedicated IPs","description":"[Dedicated IPs](https://render.com/docs/dedicated-ips) provide static, outbound IP addresses for 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 receive, 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) allow 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) allow you to manage your Render webhook configuration.\n"},{"name":"Workflows","description":"Create and manage [Render Workflows](https://render.com/docs/workflows) services.\n"},{"name":"Workflow Tasks","description":"Run and manage tasks as part of [Render Workflows](https://render.com/docs/workflows).\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"}},"x-bex-grade":"implemented"}},"/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 request body (including the 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."},"workflows":{"type":"array","items":{"type":"string"},"description":"The names of workflows 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"},"413":{"$ref":"#/components/responses/413RequestEntityTooLarge"},"429":{"$ref":"#/components/responses/429RateLimit"},"500":{"$ref":"#/components/responses/500InternalServerError"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/blueprints/{blueprintId}":{"parameters":[{"name":"blueprintId","in":"path","required":true,"description":"The ID of the Blueprint","schema":{"type":"string","pattern":"^(?:blp|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{blueprintId}/parameters/0/schema"},"name":{"type":"string"},"status":{"type":"string","enum":["created","paused","in_sync","syncing","error"]},"autoSync":{"$ref":"#/paths/~1blueprints~1{blueprintId}/patch/requestBody/content/application~1json/schema/properties/autoSync"},"repo":{"type":"string"},"branch":{"type":"string"},"path":{"$ref":"#/paths/~1blueprints~1{blueprintId}/patch/requestBody/content/application~1json/schema/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","build_source","workflow"]}}}}}}}}},"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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"},"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":{"type":"boolean","description":"Automatically sync changes to render.yaml"},"path":{"type":"string","description":"Path to the Blueprint file in the repository","example":"render.yaml"}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","required":["id","name","status","autoSync","repo","branch","path"],"properties":{"id":{"$ref":"#/paths/~1blueprints~1{blueprintId}/parameters/0/schema"},"name":{"type":"string"},"status":{"$ref":"#/paths/~1blueprints~1{blueprintId}/get/responses/200/content/application~1json/schema/properties/status"},"autoSync":{"$ref":"#/paths/~1blueprints~1{blueprintId}/patch/requestBody/content/application~1json/schema/properties/autoSync"},"repo":{"type":"string"},"branch":{"type":"string"},"path":{"$ref":"#/paths/~1blueprints~1{blueprintId}/patch/requestBody/content/application~1json/schema/properties/path"},"lastSync":{"type":"string","format":"date-time"}}}}}},"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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"},"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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/blueprints/{blueprintId}/syncs":{"parameters":[{"$ref":"#/paths/~1blueprints~1{blueprintId}/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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/dedicated-ips":{"get":{"summary":"List dedicated IPs","description":"List dedicated IP sets for a workspace.\n","operationId":"list-dedicated-ips","tags":["Dedicated IPs"],"parameters":[{"name":"ownerId","in":"query","required":true,"description":"The ID of the workspace to list dedicated IP sets for.","schema":{"type":"string"}},{"name":"environmentId","in":"query","required":false,"description":"Filter dedicated IP sets limited to this environment. Excludes workspace-scoped dedicated IP sets.\n\nThe environment must belong to the workspace named by `ownerId`.\n","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/dedicatedIP"}}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"406":{"$ref":"#/components/responses/406NotAcceptable"},"429":{"$ref":"#/components/responses/429RateLimit"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"post":{"summary":"Create dedicated IP set","description":"Create a dedicated IP set. Provisioning an IP set is asynchronous. The response returns immediately with `status: CREATING` and `ips: []`. When provisioning completes, status changes to `RUNNING` and `ips` contains your assigned addresses.\n\nIf `environmentIds` is omitted or empty, this IP set applies to all services in the workspace in the selected region. Otherwise, it applies only to services in the listed environments in that region.\n","operationId":"create-dedicated-ip","tags":["Dedicated IPs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/dedicatedIPPOST"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dedicatedIP"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"402":{"$ref":"#/components/responses/402PaymentRequired"},"403":{"$ref":"#/components/responses/403Forbidden"},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/dedicated-ips/{dedicatedIpId}":{"parameters":[{"name":"dedicatedIpId","in":"path","required":true,"description":"The ID of the dedicated IP set","schema":{"type":"string"}}],"get":{"summary":"Retrieve dedicated IP set","description":"Retrieve the dedicated IP set with the provided ID.","operationId":"retrieve-dedicated-ip","tags":["Dedicated IPs"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dedicatedIP"}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"patch":{"summary":"Update dedicated IP set","description":"Update the dedicated IP set with the provided ID. All fields are optional. Omitted fields are left unchanged. To switch from environment-scoped to workspace-scoped, provide `environmentIds: []`.\n","operationId":"update-dedicated-ip","tags":["Dedicated IPs"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/dedicatedIPPATCH"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dedicatedIP"}}}},"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"},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"delete":{"summary":"Delete dedicated IP set","description":"Delete the dedicated IP set with the provided ID.\n","operationId":"delete-dedicated-ip","tags":["Dedicated IPs"],"responses":{"204":{"description":"Dedicated IP 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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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{diskId}/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"}},"x-bex-grade":"implemented"},"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":{"type":"object","required":["id","name","sizeGB","mountPath","createdAt","updatedAt"],"properties":{"id":{"$ref":"#/paths/~1disks~1{diskId}/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"}}}}}},"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"}},"x-bex-grade":"implemented"}},"/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":"#/paths/~1disks/post/responses/201/content/application~1json/schema"}}}},"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"}},"x-bex-grade":"implemented"},"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":"#/paths/~1disks/post/responses/201/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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":"#/paths/~1disks/post/responses/201/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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{ownerId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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{ownerId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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":"#/paths/~1notification-settings~1overrides~1services~1{serviceId}/patch/requestBody/content/application~1json/schema/properties/previewNotificationsEnabled"},"notificationsToSend":{"$ref":"#/paths/~1notification-settings~1overrides~1services~1{serviceId}/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"}},"x-bex-grade":"implemented"},"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":{"type":"string","enum":["default","false","true"]},"notificationsToSend":{"type":"string","enum":["default","none","failure","all"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/paths/~1notification-settings~1overrides~1services~1{serviceId}/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Services & lifecycle / §Resource metadata contract: optional truthful metadata and partial serviceDetails projection","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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"},"404":{"$ref":"#/components/responses/404NotFound"},"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"}},"parameters":[{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Services & lifecycle / §Resource metadata contract: optional truthful metadata and partial serviceDetails projection","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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"}},"parameters":[{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"},"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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}}},{"type":"object","required":["key","generateValue"],"properties":{"key":{"type":"string"},"generateValue":{"type":"boolean","description":"If true, Render generates a strong random value for this environment variable on creation. Cannot be combined with `value`."}}}]}}}}},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Environment variables & secret files: list returns names without secret contents","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"content":{"type":"string"}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/services/{serviceId}/secret-files/{envVarKey}":{"parameters":[{"$ref":"#/components/parameters/serviceIdParam"},{"name":"envVarKey","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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Services & lifecycle — Service events / activity feed: deliberate partial event-detail dialect","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"implemented"}},"/services/{serviceId}/routes/{routeId}":{"parameters":[{"$ref":"#/components/parameters/serviceIdParam"},{"name":"routeId","in":"path","required":true,"description":"The id of the route","schema":{"type":"string"}}],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Custom domains: bex exposes pending DNS-instruction state and omits unavailable provider metadata","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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"}},"x-bex-grade":"implemented"}},"/services/{serviceId}/custom-domains/{customDomainNameOrID}":{"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/services/{serviceId}/custom-domains/{customDomainNameOrID}/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"}},"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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":{"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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema/properties/criteria/properties/cpu"}}}}}}}},"responses":{"200":{"description":"Autoscaling configuration updated","content":{"application/json":{"schema":{"$ref":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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":{"type":"object","required":["id","serviceId","startCommand","planId","createdAt"],"properties":{"id":{"$ref":"#/paths/~1services~1{serviceId}~1jobs~1{jobId}/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{serviceId}~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"}}}}}},"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"}},"x-bex-grade":"implemented"}},"/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":"#/paths/~1services~1{serviceId}~1jobs/post/responses/201/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"}},"x-bex-grade":"implemented"}},"/services/{serviceId}/jobs/{jobId}/cancel":{"parameters":[{"$ref":"#/components/parameters/serviceIdParam"},{"$ref":"#/paths/~1services~1{serviceId}~1jobs~1{jobId}/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":"#/paths/~1services~1{serviceId}~1jobs/post/responses/201/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/services/{serviceId}/outbound-ips":{"parameters":[{"$ref":"#/components/parameters/serviceIdParam"}],"get":{"summary":"Retrieve service outbound IPs","description":"Retrieve the IP addresses the service's outbound traffic originates from.\n\nA service uses either a dedicated IP set that applies to it, or the shared Render IPs for its region.\n","operationId":"retrieve-service-outbound-ips","tags":["Services"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/outboundIps"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"406":{"$ref":"#/components/responses/406NotAcceptable"},"429":{"$ref":"#/components/responses/429RateLimit"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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{eventId}/parameters/0/schema"},"timestamp":{"type":"string","format":"date-time"},"serviceId":{"type":"string"},"type":{"type":"string","enum":["artifact_fetch_failed","artifact_source_changed","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","auto_deploy_disabled","auto_deploy_enabled","postgres_available","postgres_backup_completed","postgres_backup_failed","postgres_backup_started","postgres_cluster_leader_changed","postgres_connection_pool_changed","postgres_connection_pool_enabled_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"]},"details":{"oneOf":[{"title":"Service Event Details","oneOf":[{"title":"Artifact Fetch Failed","type":"object","required":["buildId","message"],"properties":{"buildId":{"type":"string","description":"The build published by the build source that could not be fetched."},"message":{"type":"string"}}},{"title":"Artifact Source Changed","type":"object","properties":{"fromBuildSourceId":{"type":"string","description":"The previously linked build source. Absent when the service was newly attached."},"toBuildSourceId":{"type":"string","description":"The newly linked build source. Absent when the service was detached."}}},{"title":"Autoscaling Config Changed","type":"object","required":["toConfig"],"properties":{"fromConfig":{"$ref":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"toConfig":{"$ref":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"}}},{"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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/properties/reason/properties/newBuild"},"newBuild":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"newDeploy":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/properties/reason/properties/newBuild"},"failure":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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"},"evictionReason":{"type":"string","description":"Details about why the application was evicted."},"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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/properties/reason"},"deployStatus":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/properties/buildStatus"},"status":{"deprecated":true,"type":"integer"},"buildId":{"type":"string","description":"Set when the deploy shipped a build published by the service's linked build source."}}},{"title":"Deploy Started","type":"object","required":["deployId","trigger"],"properties":{"deployId":{"type":"string"},"trigger":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/7/properties/trigger"},"buildId":{"type":"string","description":"Set when the deploy ships a build published by the service's linked build source."}}},{"title":"Disk Created","type":"object","required":["diskId","sizeGB"],"properties":{"diskId":{"$ref":"#/paths/~1disks~1{diskId}/parameters/0/schema"},"sizeGB":{"type":"integer"}}},{"title":"Disk Updated","type":"object","required":["diskId","fromSizeGB","toSizeGB"],"properties":{"diskId":{"$ref":"#/paths/~1disks~1{diskId}/parameters/0/schema"},"fromSizeGB":{"type":"integer"},"toSizeGB":{"type":"integer"}}},{"title":"Disk Deleted","type":"object","required":["diskId"],"properties":{"diskId":{"$ref":"#/paths/~1disks~1{diskId}/parameters/0/schema"}}},{"title":"Service Disk Usage High","type":"object","required":["diskId","diskName","mountPath","usagePercent","thresholdPercent"],"properties":{"diskId":{"$ref":"#/paths/~1disks~1{diskId}/parameters/0/schema"},"diskName":{"type":"string"},"mountPath":{"type":"string"},"usagePercent":{"type":"number","format":"double"},"thresholdPercent":{"type":"number","format":"double"}}},{"title":"Service Disk Usage Recovered","type":"object","required":["diskId","diskName","mountPath","usagePercent","thresholdPercent"],"properties":{"diskId":{"$ref":"#/paths/~1disks~1{diskId}/parameters/0/schema"},"diskName":{"type":"string"},"mountPath":{"type":"string"},"usagePercent":{"type":"number","format":"double"},"thresholdPercent":{"type":"number","format":"double"}}},{"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{serviceId}~1jobs~1{jobId}/parameters/1/schema"},"status":{"$ref":"#/paths/~1services~1{serviceId}~1jobs/get/parameters/2/schema/items"},"reason":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/7/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/properties/buildStatus"},"reason":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/6/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/properties/user"}}},{"title":"Suspender Removed","type":"object","required":["actor"],"properties":{"actor":{"type":"string"},"resumedByUser":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/properties/user"},"system":{"description":"Edge Cache Change was triggered by Render","type":"boolean"}}}}},{"title":"Edge Cache Enabled","type":"object","required":["trigger"],"properties":{"trigger":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/41/properties/trigger"}}},{"title":"Edge Cache Purged","required":["trigger"],"properties":{"trigger":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/41/properties/trigger"}}},{"title":"Auto Deploy Disabled","type":"object","required":["reason"],"properties":{"reason":{"description":"Why auto-deploy was disabled (manual_deploy, rollback, or setting_change)","type":"string"},"fromTrigger":{"description":"The auto-deploy trigger value immediately before it was disabled","$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/45/properties/newTrigger"}}},{"title":"Auto Deploy Enabled","type":"object","properties":{"newTrigger":{"description":"The auto-deploy trigger value after it was re-enabled","type":"string","enum":["commit","off","checksPass"]}}}]},{"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 Connection Pool Changed","type":"object","required":["from","to"],"properties":{"user":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/properties/user"},"from":{"type":"string"},"to":{"type":"string"}}},{"title":"Postgres Connection Pool Enabled Changed","type":"object","required":["enabled"],"properties":{"user":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/properties/user"},"enabled":{"type":"boolean"}}},{"title":"Postgres Created","type":"object","properties":{"user":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/properties/user"}}},{"title":"Postgres Disk Size Changed","type":"object","required":["fromDiskSize","toDiskSize"],"properties":{"user":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0/oneOf/9/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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Services & lifecycle — Service events / activity feed: deliberate partial event-detail dialect","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]}},"/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":false},{"$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, workflow, or sandbox group.","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":"sandbox","in":"query","required":false,"description":"Filter logs by sandbox ID.","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"}},"x-bex-grade":"implemented"}},"/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":false},{"$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":"#/paths/~1logs/get/parameters/15"},{"$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","sandbox","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"}},"x-bex-grade":"implemented"}},"/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":false},{"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":"#/paths/~1logs/get/parameters/15"},{"$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"}},"x-bex-grade":"implemented"}},"/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{ownerId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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{ownerId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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{resourceId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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{ownerId}/put/requestBody/content/application~1json/schema/properties/endpoint"},"token":{"$ref":"#/paths/~1logs~1streams~1owner~1{ownerId}/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{resourceId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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{ownerId}/put/responses/200/content/application~1json/schema"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"404":{"description":"metrics stream not found"},"500":{"$ref":"#/components/responses/500InternalServerError"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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","LOGFIRE","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{ownerId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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, such as a time range that predates traffic source\ndata availability. The error body's optional `code` field\nidentifies specific failures that clients can handle\nmachine-readably.\n\nError codes:\n- `too_many_resources`: the query requests more resources than\n  the breakdown supports (maximum 30)\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"message":"bandwidth sources data is only available after 2025-03-09"}}}},"500":{"$ref":"#/components/responses/500InternalServerError"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"parameters":[{"name":"kind","in":"query","description":"Bex extension. Which resource's disk to read: a managed Postgres, a managed Key Value, or a service's attached persistent disk. Omitted, the read targets a managed Postgres.","required":false,"schema":{"type":"string","enum":["database","keyvalue","service"],"default":"database"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"aggregateAllMethod","in":"query","description":"Bex extension. How to combine a multi-replica series into one at each timestamp. Omitted, per-replica series are returned unaggregated.","required":false,"schema":{"type":"string","enum":["MIN","MAX","AVG"]},"x-bex-query-extension":true},{"name":"percentage","in":"query","description":"Bex extension. Report the series as a percentage of the resource's limit rather than an absolute value. Only the literal `true` enables it.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"parameters":[{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/key-value/{redisId}":{"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":"redisId","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"}},"x-bex-grade":"implemented"},"patch":{"tags":["Key Value"],"summary":"Update Key Value instance","description":"Update a Key Value instance by ID. Note that changing your plan, max memory policy, or persistence mode will restart your Key Value instance.\n","operationId":"update-key-value","parameters":[{"in":"path","name":"redisId","required":true,"schema":{"type":"string"}},{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"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"}},"x-bex-grade":"implemented"},"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":"redisId","required":true,"schema":{"type":"string"}},{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"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"}},"x-bex-grade":"implemented"}},"/key-value/{redisId}/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":"redisId","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"}},"x-bex-grade":"implemented"}},"/key-value/{redisId}/suspend":{"parameters":[{"in":"path","name":"redisId","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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/key-value/{redisId}/resume":{"parameters":[{"in":"path","name":"redisId","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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/redis/{redisId}/suspend":{"parameters":[{"in":"path","name":"redisId","required":true,"schema":{"type":"string"}}],"post":{"tags":["Redis (Deprecated)"],"summary":"Suspend Redis instance","deprecated":true,"description":"Suspend a Redis instance by ID. This API is deprecated in favor of the Key Value API.\n","operationId":"suspend-redis","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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/redis/{redisId}/resume":{"parameters":[{"in":"path","name":"redisId","required":true,"schema":{"type":"string"}}],"post":{"tags":["Redis (Deprecated)"],"summary":"Resume Redis instance","deprecated":true,"description":"Resume a Redis instance by ID. This API is deprecated in favor of the Key Value API.\n","operationId":"resume-redis","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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Managed Postgres / §Resource metadata contract: omitted unknown metadata and unsupported advanced provider fields","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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"}},"parameters":[{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"partial","x-bex-grade-reason":"ADR018 §Managed Postgres / §Resource metadata contract: omitted unknown metadata and unsupported advanced provider fields","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"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"}},{"name":"dryRun","in":"query","description":"Bex extension. Resolve and validate the change, then return the preview without writing it. Only the literal `true` enables the preview; it may also be sent as a request-body field.","required":false,"schema":{"type":"boolean","default":false},"x-bex-query-extension":true}],"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"}},"x-bex-grade":"implemented"},"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"}},{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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","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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"parameters":[{"name":"confirm","in":"query","description":"Bex extension. The exact server-issued confirmation phrase required to act on a resource in a protected environment. A free-form string, not a boolean.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/postgres/{postgresId}/query/processes":{"parameters":[{"in":"path","name":"postgresId","required":true,"schema":{"type":"string"}}],"get":{"summary":"List live queries","description":"List currently running queries (from `pg_stat_activity`) on a Postgres instance by ID.\n","operationId":"list-postgres-processes","tags":["Postgres"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["processes"],"properties":{"processes":{"type":"array","items":{"type":"object","properties":{"pid":{"type":"integer"},"databaseName":{"type":"string"},"username":{"type":"string"},"applicationName":{"type":"string"},"clientAddr":{"type":"string"},"backendStart":{"type":"string","format":"date-time"},"queryStart":{"type":"string","format":"date-time"},"state":{"type":"string"},"waitEvent":{"type":"string"},"waitEventType":{"type":"string"},"query":{"type":"string"},"duration":{"type":"number","description":"Duration of the query, in seconds."},"isLeader":{"type":"boolean","description":"Whether this process is running against the primary instance of a highly available database."}},"description":"A single live process from pg_stat_activity."}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/postgres/{postgresId}/query/top-queries":{"parameters":[{"in":"path","name":"postgresId","required":true,"schema":{"type":"string"}}],"get":{"summary":"List top queries","description":"List the top 50 queries by total execution time (from `pg_stat_statements`) on a Postgres instance by ID.\n","operationId":"list-postgres-top-queries","tags":["Postgres"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["topQueries"],"properties":{"topQueries":{"type":"array","items":{"type":"object","properties":{"queryId":{"type":"string"},"query":{"type":"string"},"calls":{"type":"integer"},"totalTimeMs":{"type":"number"},"minTimeMs":{"type":"number"},"maxTimeMs":{"type":"number"},"meanTimeMs":{"type":"number"},"stddevTimeMs":{"type":"number"},"rows":{"type":"integer"},"sharedBlocksHit":{"type":"integer"},"sharedBlocksRead":{"type":"integer"},"sharedBlocksDirtied":{"type":"integer"},"sharedBlocksWritten":{"type":"integer"},"localBlocksHit":{"type":"integer"},"localBlocksRead":{"type":"integer"},"localBlocksDirtied":{"type":"integer"},"localBlocksWritten":{"type":"integer"},"tempBlocksRead":{"type":"integer"},"tempBlocksWritten":{"type":"integer"}},"description":"A single query from pg_stat_statements."}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/postgres/{postgresId}/query/sizes":{"parameters":[{"in":"path","name":"postgresId","required":true,"schema":{"type":"string"}}],"get":{"summary":"List database, table, and index sizes","description":"List the sizes of databases, tables, and indexes on a Postgres instance by ID.\n","operationId":"list-postgres-sizes","tags":["Postgres"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["sizes"],"properties":{"sizes":{"type":"array","items":{"type":"object","properties":{"Database":{"type":"string"},"Schema":{"type":"string"},"Table":{"type":"string"},"Index":{"type":"string"},"Bytes":{"type":"integer"}},"description":"The size of an index, table, or database."}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/postgres/{postgresId}/query/table-scans":{"parameters":[{"in":"path","name":"postgresId","required":true,"schema":{"type":"string"}}],"get":{"summary":"List table scans","description":"List the number of sequential scans performed against each table on a Postgres instance by ID.\n","operationId":"list-postgres-table-scans","tags":["Postgres"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["tableScans"],"properties":{"tableScans":{"type":"array","items":{"type":"object","properties":{"Database":{"type":"string"},"Schema":{"type":"string"},"Table":{"type":"string"},"Scans":{"type":"integer"}},"description":"The number of sequential scans performed against a table."}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/env-groups/{envGroupId}/secret-files/{envVarKey}":{"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"}},"x-bex-grade":"implemented"},"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":"envVarKey","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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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{maintenanceRunID}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/maintenance/{maintenanceRunID}":{"get":{"tags":["Maintenance"],"summary":"Retrieve maintenance run","description":"Retrieve the maintenance run with the provided ID.","operationId":"retrieve-maintenance","parameters":[{"name":"maintenanceRunID","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{maintenanceRunID}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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{maintenanceRunID}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/maintenance/{maintenanceRunID}/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{maintenanceRunID}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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":["name","url"],"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":{"type":"array","description":"The event types that will trigger the webhook. An empty list means all event types will trigger the webhook.","items":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/type"}}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","required":["id","name","url","secret","enabled","eventFilter"],"properties":{"id":{"$ref":"#/paths/~1webhooks~1{webhookId}/parameters/0/schema"},"url":{"type":"string"},"name":{"type":"string"},"secret":{"type":"string"},"enabled":{"type":"boolean"},"eventFilter":{"$ref":"#/paths/~1webhooks/post/requestBody/content/application~1json/schema/properties/eventFilter"}}}}}},"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"}},"x-bex-grade":"implemented"},"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"}},"x-bex-grade":"implemented"}},"/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":"#/paths/~1webhooks/post/responses/201/content/application~1json/schema"}}}},"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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"},"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":"#/paths/~1webhooks/post/requestBody/content/application~1json/schema/properties/eventFilter"}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/paths/~1webhooks/post/responses/201/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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"},"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"}},"parameters":[{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true}],"x-bex-grade":"implemented"}},"/webhooks/{webhookId}/events":{"parameters":[{"$ref":"#/paths/~1webhooks~1{webhookId}/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"},{"name":"ownerId","in":"query","description":"Bex extension. Workspace to address. Omitted, the request resolves to the caller's selected or default workspace; authorization still checks membership.","required":false,"schema":{"type":"string"},"x-bex-query-extension":true},{"name":"status","in":"query","description":"Bex extension. Restrict the attempt history to one immutable outcome. Omitted, the endpoint's attempts are returned unfiltered; any other value is rejected.","required":false,"schema":{"type":"string","enum":["delivered","failed"]},"x-bex-query-extension":true}],"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"}},"x-bex-grade":"implemented"}},"/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"],"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"}},"x-bex-grade":"partial","x-bex-grade-reason":"GET /v1/workflows stub returns []; not a real implementation","x-badges":[{"name":"Partial","position":"before","color":"#d97706"}]},"post":{"summary":"Create a workflow","description":"Create a new workflow service with the specified configuration.","tags":["Workflows"],"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":{"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. Required for every runtime except docker, which builds from its Dockerfile."},"repo":{"type":"string","pattern":"\\S","description":"The repository URL to use for the build. Cannot be blank."},"rootDir":{"type":"string","description":"The root directory of the repository to use for the build, if applicable."},"runtime":{"$ref":"#/paths/~1workflows~1{workflowId}/patch/requestBody/content/application~1json/schema/properties/buildConfig/properties/runtime"}}},"runCommand":{"type":"string","pattern":"\\S","description":"The command to run the workflow. Cannot be blank."},"region":{"type":"string","enum":["frankfurt","oregon","ohio","singapore","virginia"],"default":"oregon","description":"Defaults to \"oregon\""},"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."},"envVars":{"$ref":"#/paths/~1services~1{serviceId}~1env-vars/put/requestBody/content/application~1json/schema"}}}}}},"responses":{"201":{"description":"Workflow created","content":{"application/json":{"schema":{"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":{"$ref":"#/paths/~1workflows/post/requestBody/content/application~1json/schema/properties/buildConfig"},"runCommand":{"type":"string","description":"Command to run the workflow."},"region":{"$ref":"#/paths/~1workflows/post/requestBody/content/application~1json/schema/properties/region"},"environmentId":{"type":"string"},"slug":{"type":"string"},"autoDeployTrigger":{"$ref":"#/paths/~1workflows/post/requestBody/content/application~1json/schema/properties/autoDeployTrigger"}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/workflows/{workflowId}":{"parameters":[{"name":"workflowId","in":"path","description":"The ID of the workflow","schema":{"type":"string"},"required":true}],"get":{"tags":["Workflows"],"summary":"Retrieve workflow","description":"Retrieve the workflow service with the provided ID.","operationId":"getWorkflow","responses":{"200":{"description":"Workflow details","content":{"application/json":{"schema":{"$ref":"#/paths/~1workflows/post/responses/201/content/application~1json/schema"}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"patch":{"summary":"Update workflow","description":"Update the workflow service with the provided ID.","tags":["Workflows"],"operationId":"updateWorkflow","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"buildConfig":{"type":"object","description":"A partial update to a workflow's build config. Every field is optional; omitted fields are left unchanged.","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. Required for every runtime except docker, which builds from its Dockerfile."},"repo":{"type":"string","pattern":"\\S","description":"The repository URL to use for the build. Cannot be blank."},"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","pattern":"\\S","description":"The command to run the workflow. Cannot be blank."},"autoDeployTrigger":{"$ref":"#/paths/~1workflows/post/requestBody/content/application~1json/schema/properties/autoDeployTrigger"}}}}}},"responses":{"200":{"description":"Workflow updated","content":{"application/json":{"schema":{"$ref":"#/paths/~1workflows/post/responses/201/content/application~1json/schema"}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"delete":{"summary":"Delete workflow","description":"Delete the workflow service with the provided ID.","tags":["Workflows"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/workflowversions":{"get":{"summary":"List workflow versions","description":"List known versions of the workflow service with the provided ID.","tags":["Workflows"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"],"operationId":"getWorkflowVersion","responses":{"200":{"description":"Workflow version details","content":{"application/json":{"schema":{"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"]}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"],"operationId":"getTask","responses":{"200":{"description":"Task details","content":{"application/json":{"schema":{"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"}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"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"],"operationId":"createTask","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task","input"],"properties":{"task":{"type":"string","pattern":"\\S","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. Cannot be blank.","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":{"type":"object","required":["id","taskId","status","parentTaskRunId","rootTaskRunId","retries","attempts"],"properties":{"id":{"type":"string"},"taskId":{"type":"string"},"status":{"$ref":"#/paths/~1task-runs~1{taskRunId}/get/responses/200/content/application~1json/schema/properties/status"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"parentTaskRunId":{"type":"string"},"parentTaskAttempt":{"type":"integer","description":"The 0-indexed attempt of the parent task run that spawned this task run. Omitted for root task runs and for task runs created before this field was introduced."},"rootTaskRunId":{"type":"string"},"retries":{"type":"integer"},"attempts":{"type":"array","items":{"type":"object","required":["status","startedAt","attempt"],"properties":{"taskRunId":{"type":"string","description":"The ID of the task run this attempt belongs to."},"attempt":{"type":"integer","description":"The 0-indexed attempt number."},"status":{"$ref":"#/paths/~1task-runs~1{taskRunId}/get/responses/200/content/application~1json/schema/properties/status"},"enqueuedAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}}}}}}}}},"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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\nThe server sends a `task.completed` event whenever a requested task run reaches\nany terminal state (`completed`, `failed`, or `canceled`).\nThe `status` field of the payload indicates which state was reached.\n\nThe server automatically closes the stream in the following cases:\n\n- All requested task runs have reached a terminal state.\n- The stream has not sent any events for 30 minutes.\n\nFor tasks with a timeout higher than 30 minutes, waiting clients should fall back\nto polling with the [Retrieve task run](https://api-docs.render.com/reference/gettaskrun)\nendpoint.\n","operationId":"streamTaskRunsEvents","tags":["Workflow Tasks"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}},"/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"],"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":{"type":"string","enum":["pending","running","completed","succeeded","failed","canceled","paused"]},"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"},"parentTaskAttempt":{"type":"integer","description":"The 0-indexed attempt of the parent task run that spawned this task run. Omitted for root task runs and for task runs created before this field was introduced."},"rootTaskRunId":{"type":"string"},"retries":{"type":"integer"},"attempts":{"type":"array","items":{"type":"object","required":["status","startedAt","attempt"],"properties":{"taskRunId":{"type":"string","description":"The ID of the task run this attempt belongs to."},"attempt":{"type":"integer","description":"The 0-indexed attempt number."},"status":{"$ref":"#/paths/~1task-runs~1{taskRunId}/get/responses/200/content/application~1json/schema/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{taskRunId}/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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]},"delete":{"summary":"Cancel task run","description":"Cancel a running task run with the provided ID.","tags":["Workflow Tasks"],"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"}},"x-bex-grade":"not-implemented","x-badges":[{"name":"Not implemented","position":"before","color":"#dc2626"}]}}},"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":"customDomainNameOrID","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":"envVarKey","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":["artifact_fetch_failed","artifact_source_changed","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","service_disk_usage_high","service_disk_usage_recovered","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","auto_deploy_disabled","auto_deploy_enabled"]}]}}},"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","ChangeOrgNameEvent","ChangeOrgRoleEvent","ChangeTeam2FAEnforcementEvent","ChangeTeamAllowedLoginMethodsEvent","ChangeTeamMemberRoleEvent","ChangeWorkspaceDeployHandlingEvent","ChangeWorkspacePrivacyEvent","CreateArtifactSourceEvent","CreateCronJobEvent","CreateEnvVarsEvent","CreateEnvironmentEvent","CreateOrgDomainEvent","CreateOtelIntegrationEvent","CreatePostgresEvent","CreatePrivateLinkEvent","CreateProjectEvent","CreateRedisEvent","CreateSSOConnectionEvent","CreateSavedSearchEvent","CreateServerDiskEvent","CreateServerEvent","CreateWebhookEvent","CreateWorkspaceEvent","DeleteCronJobEvent","DeleteEnvGroupEvent","DeleteEnvVarsEvent","DeleteEnvironmentEvent","DeleteOrgDomainEvent","DeleteOtelIntegrationEvent","DeletePostgresEvent","DeletePrivateLinkEvent","DeleteProjectEvent","DeleteRedisEvent","DeleteSSOConnectionEvent","DeleteSavedSearchEvent","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","GrantOAuthAccessEvent","RevokeOAuthAccessEvent"]},"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","title":"serviceSuspendedState","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":{"$ref":"#/paths/~1workflowversions~1{workflowVersionId}/get/responses/200/content/application~1json/schema"},"cursor":{"$ref":"#/components/schemas/cursor"}}},"workflowWithCursor":{"type":"object","required":["workflow","cursor"],"properties":{"workflow":{"$ref":"#/paths/~1workflows/post/responses/201/content/application~1json/schema"},"cursor":{"$ref":"#/components/schemas/cursor"}}},"taskWithCursor":{"type":"object","required":["task","cursor"],"properties":{"task":{"$ref":"#/paths/~1tasks~1{taskId}/get/responses/200/content/application~1json/schema"},"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"},"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"}}},"dedicatedIPStatus":{"type":"string","description":"Current status of a dedicated IP set.","enum":["UNKNOWN","CREATING","PENDING","RUNNING","FAILED","DELETING","DELETED"]},"dedicatedIP":{"type":"object","required":["id","name","description","ownerId","region","environmentIds","ips","status","createdAt"],"properties":{"id":{"type":"string","description":"Unique identifier for this dedicated IP set."},"name":{"type":"string","description":"Descriptive name for this dedicated IP set."},"description":{"type":"string","description":"Free-form description for this dedicated IP set."},"ownerId":{"type":"string","description":"The ID of the workspace that owns this dedicated IP set."},"region":{"$ref":"#/components/schemas/region"},"environmentIds":{"type":"array","description":"Environments this dedicated IP set applies to. If empty, it applies to all services in the workspace within its region.\n","items":{"type":"string"}},"ips":{"type":"array","description":"The IPv4 addresses assigned to this dedicated IP set.\n","items":{"type":"string"}},"status":{"$ref":"#/components/schemas/dedicatedIPStatus"},"createdAt":{"type":"string","format":"date-time","description":"Time the dedicated IP set was created."},"updatedAt":{"type":"string","format":"date-time","description":"Time the dedicated IP set was last updated."}}},"dedicatedIPPOST":{"type":"object","description":"Input for creating a dedicated IP set.","required":["name","ownerId","region"],"properties":{"name":{"type":"string","description":"Name for the dedicated IP set."},"description":{"type":"string","description":"Free-form description for the dedicated IP set."},"ownerId":{"type":"string","description":"The ID of the workspace that will own this dedicated IP set."},"region":{"$ref":"#/components/schemas/region"},"environmentIds":{"type":"array","description":"Environments to scope the dedicated IP set to. If omitted or empty, it applies to all services in the workspace within its region.\n","items":{"type":"string"}}}},"dedicatedIPPATCH":{"type":"object","description":"Input for updating a dedicated IP set. All fields are optional. Omitted fields are left unchanged. Provide `environmentIds: []` to switch from environment-scoped to workspace-scoped.\n","properties":{"name":{"type":"string"},"description":{"type":"string"},"environmentIds":{"type":"array","items":{"type":"string"}}}},"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":{"$ref":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"cache":{"$ref":"#/components/schemas/cache"},"disk":{"type":"object","required":["id","name","sizeGB","mountPath"],"properties":{"id":{"$ref":"#/paths/~1disks~1{diskId}/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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"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":{"$ref":"#/paths/~1disks/post/responses/201/content/application~1json/schema"},"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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"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":["name"],"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":"#/paths/~1services~1{serviceId}~1env-vars/put/requestBody/content/application~1json/schema"},"secretFiles":{"type":"array","items":{"$ref":"#/paths/~1services~1{serviceId}~1secret-files/put/requestBody/content/application~1json/schema/items"}},"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":{"anyOf":[{"$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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"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":"0.5c-512mb","description":"The compute plan to use. If omitted, defaults to `0.5c-512mb` 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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"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":"#/paths/~1services~1{serviceId}~1autoscaling/put/requestBody/content/application~1json/schema"},"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":{"anyOf":[{"$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","description":"Optional reference to the registry credential for this build. Omit the field to leave the stored credential unchanged; send an empty string to clear it."}}},"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"}}},"envVarValue":{"type":"object","required":["value"],"properties":{"value":{"type":"string"}}},"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:<any tag or SHA>`, `library/nginx:<any tag or SHA>`, or `nginx:<any tag or SHA>`. 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","starter_legacy","standard_legacy","standard_plus_legacy","pro_legacy","pro_plus_legacy","0.5c-512mb","1c-2g","2c-4g","2c-8g","2c-16g","4c-8g","4c-16g","4c-32g","8c-16g","8c-32g","8c-64g","12c-24g","12c-48g","12c-96g"],"example":"starter","description":"The compute plan to use. Legacy variants (`*_legacy`) identify grandfathered plans no longer offered for new services. Note that base services on any paid compute plan can't create preview instances with the `free` plan."},"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":{"$ref":"#/paths/~1notification-settings~1overrides~1services~1{serviceId}/patch/requestBody/content/application~1json/schema/properties/previewNotificationsEnabled"},"notificationsToSend":{"$ref":"#/paths/~1notification-settings~1overrides~1services~1{serviceId}/patch/requestBody/content/application~1json/schema/properties/notificationsToSend"}}},"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"},"code":{"type":"string","description":"A stable, machine-readable identifier present on specific errors that clients can handle specially. Each endpoint documents the codes it can return. The errorCode schema lists the full vocabulary of codes."}}},"errorCode":{"type":"string","description":"The machine-readable codes that can appear in the error object's \"code\" field. The field is a plain string so new codes are not breaking changes; this vocabulary exists so generated clients get typed constants. OpenAPI cannot deprecate individual enum values, so deprecation notes live in x-enum-descriptions.","enum":["multiple_regions","duplicate_saved_search_name","too_many_resources","preauth_consent_required","preauth_declined","preauth_attempt_spent","preauth_no_payment_method","preauth_unavailable","cursor_origin_receipt_expired","cursor_origin_receipt_invalid","sandbox_not_running","snapshot_creating","snapshot_not_available","snapshot_plan_mismatch","snapshot_not_found","invalid_sandbox_group_id","invalid_snapshot_id","invalid_owner_id","invalid_status","invalid_cursor","invalid_limit","invalid_snapshot_name"],"x-enum-varnames":["ErrorCodeMultipleRegions","ErrorCodeDuplicateSavedSearchName","ErrorCodeTooManyResources","ErrorCodePreauthConsentRequired","ErrorCodePreauthDeclined","ErrorCodePreauthAttemptSpent","ErrorCodePreauthNoPaymentMethod","ErrorCodePreauthUnavailable","ErrorCodeCursorOriginReceiptExpired","ErrorCodeCursorOriginReceiptInvalid","ErrorCodeSandboxNotRunning","ErrorCodeSnapshotCreating","ErrorCodeSnapshotNotAvailable","ErrorCodeSnapshotPlanMismatch","ErrorCodeSnapshotNotFound","ErrorCodeInvalidSandboxGroupID","ErrorCodeInvalidSnapshotID","ErrorCodeInvalidOwnerID","ErrorCodeInvalidStatus","ErrorCodeInvalidCursor","ErrorCodeInvalidLimit","ErrorCodeInvalidSnapshotName"],"x-enum-descriptions":["A metrics query over resources spanning multiple regions is not supported.","A saved-search create or rename hit a name already used in the project.","A metrics query over more resources than the query supports; the bandwidth per-source breakdown caps at 30.","The plan needs a spend authorization the requester has not accepted.","The owner's card declined the spend authorization.","The owner's one authorization attempt has already been declined.","The plan needs a spend authorization and no payment method is on file.","The authorization could not be attempted; the operation can be retried.","The Cursor Origin installation receipt was past its five-minute expiry.","The Cursor Origin installation receipt failed verification.","A snapshot capture was requested on a sandbox that is not running.","A snapshot delete was requested while the capture is still in progress.","A sandbox create named a source snapshot that is not available.","A sandbox create named a runtime source snapshot with a different plan.","A sandbox create named a source snapshot that does not exist.","A request path named a sandbox group ID that is not a well-formed sbg- identifier.","A request path named a snapshot ID that is not a well-formed snp- identifier.","A list request omitted ownerId or named more than one.","A list request filtered on a status value outside the resource's status vocabulary.","A list request passed a cursor that is malformed or not visible to the caller.","A list request passed a limit that is not a positive integer within the route's maximum.","A snapshot name is empty, longer than 64 characters, or starts with snp-."]},"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"],"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":{"$ref":"#/components/schemas/region"},"environmentId":{"type":"string"},"maxmemoryPolicy":{"$ref":"#/components/schemas/maxmemoryPolicy"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"},"ipAllowList":{"type":"array","items":{"$ref":"#/components/schemas/cidrBlockAndDescription"}},"public":{"type":"boolean"}}},"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"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"},"ipAllowList":{"type":"array","items":{"$ref":"#/components/schemas/cidrBlockAndDescription"}}}},"persistenceMode":{"type":"string","description":"The persistence mode for the Key Value instance. The default for paid instances is journal_snapshot (both journaling and snapshots). Only turn off persistence if you're using this Key Value instance as a cache and are okay with losing data. Free instances do not have persistence.","enum":["journal_snapshot","snapshot","off"]},"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"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"}}},"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","256mb","1g","5g","10g","20g","40g"]},"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":{"$ref":"#/components/schemas/region"},"environmentId":{"type":"string"},"maxmemoryPolicy":{"$ref":"#/components/schemas/maxmemoryPolicy"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"},"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"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"},"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{maintenanceRunID}/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"},"persistenceMode":{"$ref":"#/components/schemas/persistenceMode"}}},"redisPlan":{"type":"string","enum":["free","starter","standard","pro","pro_plus","custom","256mb","1g","5g","10g","20g","40g"],"x-enum-varnames":["RedisPlanFree","RedisPlanStarter","RedisPlanStandard","RedisPlanPro","RedisPlanPro_plus","RedisPlanCustom","RedisPlan256mb","RedisPlan1g","RedisPlan5g","RedisPlan10g","RedisPlan20g","RedisPlan40g"]},"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"],"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"],"properties":{"name":{"type":"string"},"ownerId":{"type":"string"},"envVars":{"$ref":"#/paths/~1services~1{serviceId}~1env-vars/put/requestBody/content/application~1json/schema"},"secretFiles":{"type":"array","items":{"$ref":"#/paths/~1services~1{serviceId}~1secret-files/put/requestBody/content/application~1json/schema/items"}},"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"}}},"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"],"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":{"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","0.1c-256mb","0.5c-1g","1c-2g","1c-4g","2c-4g","2c-8g","2c-16g","4c-16g","4c-32g","8c-32g","8c-64g","16c-64g","16c-128g","32c-128g","32c-256g","48c-192g","48c-384g","64c-256g","64c-512g","96c-384g","96c-768g","128c-512g","128c-1024g","basic-256mb","basic-1gb"]},"diskSizeGB":{"type":"integer","description":"The number of gigabytes of disk space to allocate for the database"},"enableDiskAutoscaling":{"type":"boolean","default":false},"connectionPool":{"type":"string","default":"none","description":"What connection pool to use (if any) out of 'pgbouncer' and 'none'"},"region":{"$ref":"#/components/schemas/region"},"ipAllowList":{"type":"array","items":{"$ref":"#/components/schemas/cidrBlockAndDescription"}},"parameterOverrides":{"$ref":"#/components/schemas/postgresParameterOverrides"},"readReplicas":{"$ref":"#/components/schemas/readReplicasInput"},"version":{"$ref":"#/components/schemas/postgresVersion"},"public":{"type":"boolean"}},"description":"Input for creating a database"},"postgresPATCHInput":{"type":"object","properties":{"name":{"type":"string"},"plan":{"$ref":"#/components/schemas/postgresPOSTInput/properties/plan"},"diskSizeGB":{"type":"integer","description":"The number of gigabytes of disk space to allocate for the database"},"enableDiskAutoscaling":{"type":"boolean"},"connectionPool":{"type":"string","default":"none","description":"What connection pool to use (if any) out of 'pgbouncer' and 'none'"},"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"},"internalConnectionPoolString":{"type":"string","format":"password"},"externalConnectionPoolString":{"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","connectionPool"],"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":{"$ref":"#/components/schemas/postgresPOSTInput/properties/plan"},"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"},"connectionPool":{"type":"string","description":"What connection pool to use (if any) out of 'pgbouncer' and 'none'"}}},"postgresDetail":{"type":"object","required":["id","ipAllowList","createdAt","updatedAt","dashboardUrl","databaseName","databaseUser","highAvailabilityEnabled","name","owner","project","plan","region","readReplicas","role","status","version","suspended","suspenders","diskAutoscalingEnabled","connectionPool"],"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/postgresPOSTInput/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"},"connectionPool":{"type":"string","description":"What connection pool to use (if any) out of 'pgbouncer' and 'none'"}}},"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","0.5c-512mb","1c-2g","2c-4g","2c-8g","2c-16g","4c-8g","4c-16g","4c-32g","8c-16g","8c-32g","8c-64g","12c-24g","12c-48g","12c-96g"],"default":"0.5c-512mb","description":"Defaults to `0.5c-512mb` when creating a new service."},"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":{"$ref":"#/paths/~1blueprints~1{blueprintId}/patch/responses/200/content/application~1json/schema"},"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{eventId}/parameters/0/schema"},"timestamp":{"type":"string","format":"date-time"},"serviceId":{"type":"string"},"type":{"$ref":"#/components/parameters/eventTypeParam/schema/anyOf/0"},"details":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/details/oneOf/0"}}}}},"jobWithCursor":{"type":"object","required":["job","cursor"],"properties":{"job":{"$ref":"#/paths/~1services~1{serviceId}~1jobs/post/responses/201/content/application~1json/schema"},"cursor":{"$ref":"#/components/schemas/cursor"}}},"user":{"type":"object","required":["id","email","name"],"properties":{"id":{"type":"string","description":"The authenticated user's ID."},"email":{"type":"string"},"name":{"type":"string"}}},"webhookWithCursor":{"type":"object","required":["webhook","cursor"],"properties":{"webhook":{"$ref":"#/paths/~1webhooks/post/responses/201/content/application~1json/schema"},"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":{"$ref":"#/paths/~1events~1{eventId}/get/responses/200/content/application~1json/schema/properties/type"},"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"}}},"outboundIps":{"type":"object","required":["type","ips"],"properties":{"type":{"type":"string","enum":["shared","dedicated"],"x-enum-varnames":["OutboundIpsTypeShared","OutboundIpsTypeDedicated"],"description":"`dedicated` if a dedicated IP set applies to the resource, `shared` if its traffic originates from the shared Render IPs for its region.\n"},"dedicatedIpId":{"type":"string","description":"The dedicated IP set the traffic originates from. Only present when `type` is `dedicated`.","example":"egs-abc123"},"ips":{"type":"array","description":"The IP addresses the resource's outbound traffic originates from.","items":{"type":"string"}}}},"taskRunWithCursor":{"type":"object","required":["taskRun","cursor"],"properties":{"taskRun":{"$ref":"#/paths/~1task-runs/post/responses/202/content/application~1json/schema"},"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"}}}},"413RequestEntityTooLarge":{"description":"The request body exceeded the maximum allowed size.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"}}}},"429RateLimit":{"description":"Rate limit has been surpassed.\n\nRate-limited endpoints also return `RateLimit-Limit`, `RateLimit-Remaining`, and\n`RateLimit-Reset` on successful responses so clients can track their remaining quota.\n","headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"integer","example":30}},"RateLimit-Limit":{"description":"Maximum number of requests allowed in the current window.","schema":{"type":"integer","example":100}},"RateLimit-Remaining":{"description":"Number of requests remaining in the current window. Always `0` for this response.","schema":{"type":"integer","example":0}},"RateLimit-Reset":{"description":"Seconds until the current rate limit window resets.","schema":{"type":"integer","example":30}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/error"},"example":{"message":"rate limit exceeded"}}}},"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":"True 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"}}}}}}}}