Prisma Postgres Management API

The provider-published REST control plane for Prisma. 115 operations across 72 paths covering workspaces, projects, Prisma Postgres databases, connection strings, backups, usage, object-store buckets and keys, service tokens, integrations and regions, plus the Prisma Compute surface (apps, services, deployments, branches, builds, domains, environment variables and source repositories) marked experimental in the contract itself. Authenticated with a never-expiring service token or OAuth 2.0 + PKCE against auth.prisma.io.

Operations 115

GET /v1/apps List apps #
POST /v1/apps Create app #
GET /v1/apps/{appId} Get app #
PATCH /v1/apps/{appId} Update app #
DELETE /v1/apps/{appId} Delete app #
POST /v1/apps/{appId}/promote Promote deployment #
POST /v1/apps/{appId}/rollback Roll an app back to an existing deployment #
GET /v1/apps/{appId}/domains List custom domains for an app #
POST /v1/apps/{appId}/domains Create a custom domain #
GET /v1/apps/{appId}/deployments List deployments #
POST /v1/apps/{appId}/deployments Create deployment #
GET /v1/services List services #
POST /v1/services Create service #
GET /v1/services/{serviceId} Get service #
PATCH /v1/services/{serviceId} Update service #
DELETE /v1/services/{serviceId} Delete service #
POST /v1/services/{serviceId}/promote Promote deployment #
POST /v1/services/{serviceId}/rollback Roll a service back to an existing deployment #
GET /v1/services/{serviceId}/domains List custom domains for a service #
POST /v1/services/{serviceId}/domains Create a custom domain #
GET /v1/services/{serviceId}/deployments List deployments #
POST /v1/services/{serviceId}/deployments Create deployment #
POST /v1/projects/{projectId}/branches Create a branch #
GET /v1/projects/{projectId}/branches List branches in a project #
GET /v1/branches/{branchId} Get a branch #
PATCH /v1/branches/{branchId} Update a branch #
DELETE /v1/branches/{branchId} Soft-delete a branch #
GET /v1/buckets List buckets #
POST /v1/buckets Create bucket #
GET /v1/buckets/{bucketId} Get bucket #
DELETE /v1/buckets/{bucketId} Delete bucket #
GET /v1/buckets/{bucketId}/keys List bucket keys #
POST /v1/buckets/{bucketId}/keys Create bucket key #
DELETE /v1/buckets/{bucketId}/keys/{keyId} Delete bucket key #
POST /v1/builds Report a build #
GET /v1/builds List builds #
PATCH /v1/builds/{buildId} Update a build #
GET /v1/builds/{buildId} Get a build #
PUT /v1/builds/{buildId}/resources/{resourceType}/{resourceId} Report a resource a build acted on #
GET /v1/builds/{buildId}/logs Stream build logs #
GET /v1/domains/{domainId} Get a custom domain #
DELETE /v1/domains/{domainId} Delete a custom domain #
POST /v1/domains/{domainId}/retry Retry custom domain provisioning #
GET /v1/connections List connections #
POST /v1/connections Create connection #
GET /v1/connections/{id} Get connection #
DELETE /v1/connections/{id} Delete connection #
POST /v1/connections/{id}/rotate Rotate connection credentials #
GET /v1/databases List databases #
POST /v1/databases Create database #
GET /v1/databases/{databaseId} Get database #
PATCH /v1/databases/{databaseId} Update database #
DELETE /v1/databases/{databaseId} Delete database #
GET /v1/databases/{databaseId}/connections Get list of database connections #
POST /v1/databases/{databaseId}/connections Create database connection string #
GET /v1/databases/{databaseId}/backups Get list of backups #
POST /v1/databases/{targetDatabaseId}/restore Restore database (destructive) #
GET /v1/databases/{databaseId}/usage Get database usage metrics #
GET /v1/deployments/{deploymentId} Get deployment #
DELETE /v1/deployments/{deploymentId} Delete deployment #
POST /v1/deployments/{deploymentId}/start Start deployment #
POST /v1/deployments/{deploymentId}/stop Stop deployment #
GET /v1/deployments/{deploymentId}/logs Get deployment logs #
GET /v1/projects Get list of projects #
POST /v1/projects Create project with a postgres database #
DELETE /v1/projects/{id} Delete project #
GET /v1/projects/{id} Get project #
PATCH /v1/projects/{id} Update project #
POST /v1/projects/{id}/transfer Transfer project #
POST /v1/projects/{projectId}/branches/{branchId}/alchemy-state/lease Acquire Alchemy deploy lease #
PATCH /v1/projects/{projectId}/branches/{branchId}/alchemy-state/lease Heartbeat Alchemy deploy lease #
DELETE /v1/projects/{projectId}/branches/{branchId}/alchemy-state/lease Release Alchemy deploy lease #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/version Alchemy state store version #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks List Alchemy stacks #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages List Alchemy stages #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/resources List Alchemy resources #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/resources/{fqn} Get Alchemy resource state #
PUT /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/resources/{fqn} Set Alchemy resource state #
DELETE /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/resources/{fqn} Delete Alchemy resource state #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/replaced-resources List replaced Alchemy resources #
GET /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/output Get Alchemy stack output #
PUT /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack}/stages/{stage}/output Set Alchemy stack output #
DELETE /v1/projects/{projectId}/branches/{branchId}/alchemy-state/state/stacks/{stack} Delete Alchemy stack state #
PUT /v1/projects/{projectId}/branches/{branchId}/application-topology Replace branch topology #
GET /v1/projects/{projectId}/branches/{branchId}/application-topology Get branch topology #
GET /v1/projects/{projectId}/databases Get list of databases #
POST /v1/projects/{projectId}/databases Create database #
POST /v1/environment-variables Create an environment variable #
GET /v1/environment-variables List environment variables #
PATCH /v1/environment-variables/{envVarId} Update an environment variable's value #
GET /v1/environment-variables/{envVarId} Get an environment variable #
DELETE /v1/environment-variables/{envVarId} Delete an environment variable #
GET /v1/integrations Get list of integrations #
GET /v1/integrations/{id} Get integration by ID #
DELETE /v1/integrations/{id} Delete integration #
GET /v1/me Get current authenticated principal #
GET /v1/workspaces/{workspaceId}/integrations Get list of integrations #
DELETE /v1/workspaces/{workspaceId}/integrations/{clientId} Revoke integration tokens #
GET /v1/workspaces/{workspaceId}/service-tokens List service tokens #
POST /v1/workspaces/{workspaceId}/service-tokens Create service token #
DELETE /v1/workspaces/{workspaceId}/service-tokens/{serviceTokenId} Delete service token #
POST /v1/auth/github-actions/token Exchange a GitHub Actions OIDC token for a workspace service token #
GET /v1/regions Get all regions #
GET /v1/regions/postgres Get Prisma Postgres regions #
GET /v1/regions/accelerate Get Prisma Accelerate regions #
GET /v1/scm-installations List SCM installations for a workspace #
POST /v1/scm-installations/install-intents Create an SCM App installation intent #
GET /v1/scm-installations/{installationId}/repositories List repositories accessible to an SCM installation #
POST /v1/source-repositories Link a source repository to a project #
GET /v1/source-repositories List source repositories #
DELETE /v1/source-repositories/{id} Disconnect a source repository #
GET /v1/source-repositories/{id} Get a source repository #
GET /v1/workspaces Get list of workspaces #
GET /v1/workspaces/{id} Get workspace #
GET /v1/workspaces/{id}/subscription Get workspace subscription #

Documentation

Specifications

Other Resources

🔗
SDKs
https://www.prisma.io/docs/rest-api/sdk
🔗
Overlay
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/overlays/prisma-postgres-management-api-overlay.yaml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/data-model/prisma-data-model.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/errors/prisma-problem-types.yml
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/conventions/prisma-conventions.yml
🔗
Idempotency
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/conventions/prisma-conventions.yml
🔗
OAuthScopes
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/scopes/prisma-scopes.yml
🔗
ToolCrosswalk
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/mcp/prisma-tool-crosswalk.yml
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/apis.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-accelerate-query-and-invalidate-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-client-list-and-count-records-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-client-upsert-record-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-optimize-record-and-analyze-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-platform-bootstrap-environment-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-platform-rotate-api-key-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-postgres-add-database-to-project-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-postgres-backup-and-restore-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-postgres-find-and-delete-project-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-postgres-provision-project-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-postgres-rotate-connection-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/arazzo/prisma-pulse-named-stream-resume-workflow.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/prisma-postgres-management-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

prisma-postgres-management-api-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Prisma Postgres Management API","description":"REST API for managing Prisma Postgres projects, databases, backups, and workspaces.","version":"v1"},"tags":[{"name":"Projects"},{"name":"Databases"},{"name":"Databases Connections"},{"name":"Database Backups"},{"name":"Database Usage"},{"name":"Connections"},{"name":"Integrations"},{"name":"Service Tokens"},{"name":"Workspaces"},{"name":"Regions"},{"name":"Misc"},{"name":"[Experimental]","description":"Experimental endpoints are in active development and may change at any time without notice."}],"security":[{"OAuth2":["workspace:admin","offline_access"]},{"Bearer":[]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","description":"OAuth2 authentication","flows":{"authorizationCode":{"authorizationUrl":"https://auth.prisma.io/authorize","tokenUrl":"https://auth.prisma.io/token","refreshUrl":"https://auth.prisma.io/token","scopes":{"workspace:admin":"Full access to workspace resources","offline_access":"Offline access"}}}},"Bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"OAuth2 token for API authentication"}},"schemas":{}},"paths":{"/v1/apps":{"get":{"responses":{"200":{"description":"Returns the list of apps.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"app"},"url":{"type":"string","format":"uri"},"name":{"type":"string"},"region":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"projectId":{"type":"string"},"branchId":{"type":["string","null"]},"latestDeploymentId":{"type":["string","null"]},"appEndpointDomain":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","url","name","region","projectId","branchId","latestDeploymentId","appEndpointDomain","createdAt"]}},"pagination":{"type":"object","properties":{"nextCursor":{"type":["string","null"],"description":"Next cursor to continue pagination"},"hasMore":{"type":"boolean","description":"Whether there are more items to paginate"}},"required":["nextCursor","hasMore"]}},"required":["data","pagination"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Validation failed (e.g. malformed projectId filter).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"getV1Apps","tags":["[Experimental]"],"parameters":[{"in":"query","name":"cursor","schema":{"type":["string","null"],"description":"Cursor for pagination"}},{"in":"query","name":"limit","schema":{"type":"number","default":100,"description":"Limit for pagination"}},{"in":"query","name":"projectId","schema":{"type":"string","pattern":"^(proj_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"}},{"in":"query","name":"branchId","schema":{"anyOf":[{"type":"string","const":"unassigned"},{"type":"string","pattern":"^(br_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"}]}},{"in":"query","name":"branchGitName","schema":{"type":"string","minLength":1}}],"summary":"List apps","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `GET /v1/services` instead.\n\nReturns all apps the token has access to, ordered by creation time (oldest first). Optionally filter by project ID. Supports cursor-based pagination.","deprecated":true,"x-prisma-stability":"experimental"},"post":{"responses":{"201":{"description":"App created.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"app"},"url":{"type":"string","format":"uri"},"name":{"type":"string"},"region":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"projectId":{"type":"string"},"branchId":{"type":["string","null"]},"latestDeploymentId":{"type":["string","null"]},"appEndpointDomain":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","url","name","region","projectId","branchId","latestDeploymentId","appEndpointDomain","createdAt"]}},"required":["data"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"Project not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"An app with the same `displayName` already exists on the resolved branch. The body includes the existing app's id, name, and branch git name.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","const":"app:already_exists"},"message":{"type":"string"},"existingAppId":{"type":"string"},"name":{"type":"string"},"branchGitName":{"type":"string"}},"required":["code","message","existingAppId","name","branchGitName"]}},"required":["error"]}}}},"422":{"description":"Validation failed (e.g. missing projectId, empty display name, or invalid region).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"postV1Apps","tags":["[Experimental]"],"parameters":[],"summary":"Create app","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `POST /v1/services` instead.\n\nCreates a new app under the specified project. The `projectId` is required in the request body. The app is placed in the given region, or the project's default region if omitted (falling back to us-east-1). Returns `409 Conflict` with the existing app's id, name, and branch if an app with the same name already exists on the resolved branch.","deprecated":true,"x-prisma-stability":"experimental","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":256},"regionId":{"type":"string","enum":["us-east-1","us-west-1","eu-west-3","eu-central-1","ap-northeast-1","ap-southeast-1"],"default":"us-east-1"},"branchId":{"type":["string","null"],"pattern":"^(br_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"branchGitName":{"type":["string","null"],"minLength":1},"projectId":{"type":"string","pattern":"^(proj_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"}},"required":["displayName","projectId"]}}}}}},"/v1/apps/{appId}":{"get":{"responses":{"200":{"description":"App retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"app"},"url":{"type":"string","format":"uri"},"name":{"type":"string"},"region":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"projectId":{"type":"string"},"branchId":{"type":["string","null"]},"latestDeploymentId":{"type":["string","null"]},"appEndpointDomain":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","url","name","region","projectId","branchId","latestDeploymentId","appEndpointDomain","createdAt"]}},"required":["data"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"getV1AppsByAppId","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Get app","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `GET /v1/services/{serviceId}` instead.\n\nReturns an app by ID, including its region and active promoted deployment reference.","deprecated":true,"x-prisma-stability":"experimental"},"patch":{"responses":{"200":{"description":"App updated.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"app"},"url":{"type":"string","format":"uri"},"name":{"type":"string"},"region":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"projectId":{"type":"string"},"branchId":{"type":["string","null"]},"latestDeploymentId":{"type":["string","null"]},"appEndpointDomain":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","url","name","region","projectId","branchId","latestDeploymentId","appEndpointDomain","createdAt"]}},"required":["data"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Validation failed (e.g. empty display name).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"patchV1AppsByAppId","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Update app","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `PATCH /v1/services/{serviceId}` instead.\n\nUpdates the display name of an app.","deprecated":true,"x-prisma-stability":"experimental","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":256},"branchId":{"type":["string","null"],"pattern":"^(br_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"branchGitName":{"type":["string","null"],"minLength":1}}}}}}},"delete":{"responses":{"204":{"description":"App deleted."},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"A deployment could not be deleted, or a concurrent deployment was created while deleting the app.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"deleteV1AppsByAppId","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Delete app","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `DELETE /v1/services/{serviceId}` instead.\n\nDeletes an app. Deployments under the app are deleted before the app is deleted.","deprecated":true,"x-prisma-stability":"experimental"}},"/v1/apps/{appId}/promote":{"post":{"responses":{"200":{"description":"Deployment promoted to app endpoint. The `reassignedDomains` field indicates how many custom domains were moved from the previously-promoted deployment to the new one.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"appEndpointDomain":{"type":"string"},"reassignedDomains":{"type":"number"}},"required":["appEndpointDomain","reassignedDomains"]}},"required":["data"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App or deployment not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The deployment is not running.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Validation failed (e.g. malformed app ID or missing deployment ID).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit or Compute resource limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"postV1AppsByAppIdPromote","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Promote deployment","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `POST /v1/services/{serviceId}/promote` instead.\n\nPromotes a deployment to be the active deployment behind the app's stable endpoint. The deployment must be running. Returns the app endpoint domain.","deprecated":true,"x-prisma-stability":"experimental","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"^(cpv_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"versionId":{"type":"string","pattern":"^(cpv_)?([cC][^\\s-]{8,}|[a-z0-9]+)$","deprecated":true,"description":"Deprecated: use `deploymentId` instead. Ignored when `deploymentId` is also present."}}}}}}}},"/v1/apps/{appId}/rollback":{"post":{"responses":{"200":{"description":"Deployment made live behind the app endpoint. The `reassignedDomains` field indicates how many custom domains were moved from the previously-live deployment to the new one.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"appEndpointDomain":{"type":"string"},"reassignedDomains":{"type":"number"}},"required":["appEndpointDomain","reassignedDomains"]}},"required":["data"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions to access this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App or deployment not found, or the deployment's Foundry artifact no longer exists.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The deployment cannot be made live (e.g. it has no runnable artifact or is mid-teardown and cannot reach a running state).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"Validation failed (e.g. malformed app ID or missing deployment ID).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit or Compute resource limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"postV1AppsByAppIdRollback","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Roll an app back to an existing deployment","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `POST /v1/services/{serviceId}/rollback` instead.\n\nMakes any eligible existing deployment live behind the app's stable endpoint (rollback or roll-forward). Unlike promote, a stopped target is started and waited until it is running before the endpoint is switched, so the currently-live deployment keeps serving with zero downtime. Returns the app endpoint domain.","deprecated":true,"x-prisma-stability":"experimental","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"deploymentId":{"type":"string","pattern":"^(cpv_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"versionId":{"type":"string","pattern":"^(cpv_)?([cC][^\\s-]{8,}|[a-z0-9]+)$","deprecated":true,"description":"Deprecated: use `deploymentId` instead. Ignored when `deploymentId` is also present."}}}}}}}},"/v1/apps/{appId}/domains":{"get":{"responses":{"200":{"description":"List of custom domains.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"custom-domain"},"url":{"type":"string","format":"uri"},"hostname":{"type":"string"},"appId":{"type":"string"},"computeServiceId":{"type":"string","deprecated":true,"description":"Deprecated: use `appId` instead."},"status":{"type":"string","enum":["pending_dns","verifying","verified_routing_blocked","provisioning_tls","active","failed","removing"]},"foundryStatus":{"type":"string"},"failureReason":{"type":["string","null"]},"failureCategory":{"type":["string","null"],"enum":["dns","acme","storage","unknown",null]},"certExpiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"dnsRecords":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"CNAME"},"name":{"type":"string"},"value":{"type":"string"},"ttl":{"type":["number","null"]}},"required":["type","name","value","ttl"]}}},"required":["id","type","url","hostname","appId","computeServiceId","status","foundryStatus","failureReason","failureCategory","certExpiresAt","createdAt","updatedAt","dnsRecords"]}},"pagination":{"type":"object","properties":{"hasMore":{"type":"boolean","const":false},"nextCursor":{"type":"null"}},"required":["hasMore","nextCursor"]}},"required":["data","pagination"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"getV1AppsByAppIdDomains","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"List custom domains for an app","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `GET /v1/services/{serviceId}/domains` instead.\n\nReturns all custom domains attached to any deployment of the app. Domains are aggregated across all deployments since Foundry lists per deployment.","deprecated":true,"x-prisma-stability":"experimental"},"post":{"responses":{"200":{"description":"Custom domain already registered on this app.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"custom-domain"},"url":{"type":"string","format":"uri"},"hostname":{"type":"string"},"appId":{"type":"string"},"computeServiceId":{"type":"string","deprecated":true,"description":"Deprecated: use `appId` instead."},"status":{"type":"string","enum":["pending_dns","verifying","verified_routing_blocked","provisioning_tls","active","failed","removing"]},"foundryStatus":{"type":"string"},"failureReason":{"type":["string","null"]},"failureCategory":{"type":["string","null"],"enum":["dns","acme","storage","unknown",null]},"certExpiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"dnsRecords":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"CNAME"},"name":{"type":"string"},"value":{"type":"string"},"ttl":{"type":["number","null"]}},"required":["type","name","value","ttl"]}}},"required":["id","type","url","hostname","appId","computeServiceId","status","foundryStatus","failureReason","failureCategory","certExpiresAt","createdAt","updatedAt","dnsRecords"]}},"required":["data"]}}}},"201":{"description":"Custom domain created.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","const":"custom-domain"},"url":{"type":"string","format":"uri"},"hostname":{"type":"string"},"appId":{"type":"string"},"computeServiceId":{"type":"string","deprecated":true,"description":"Deprecated: use `appId` instead."},"status":{"type":"string","enum":["pending_dns","verifying","verified_routing_blocked","provisioning_tls","active","failed","removing"]},"foundryStatus":{"type":"string"},"failureReason":{"type":["string","null"]},"failureCategory":{"type":["string","null"],"enum":["dns","acme","storage","unknown",null]},"certExpiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"dnsRecords":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"CNAME"},"name":{"type":"string"},"value":{"type":"string"},"ttl":{"type":["number","null"]}},"required":["type","name","value","ttl"]}}},"required":["id","type","url","hostname","appId","computeServiceId","status","foundryStatus","failureReason","failureCategory","certExpiresAt","createdAt","updatedAt","dnsRecords"]}},"required":["data"]}}}},"400":{"description":"Invalid hostname or DNS verification failed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"Missing or invalid authorization token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"Insufficient permissions.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"App not found.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"Hostname already registered.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"422":{"description":"App has no promoted deployment.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Domain quota exceeded or rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}},"operationId":"postV1AppsByAppIdDomains","tags":["[Experimental]"],"parameters":[{"in":"path","name":"appId","schema":{"type":"string","pattern":"^(cps_)?([cC][^\\s-]{8,}|[a-z0-9]+)$"},"required":true}],"summary":"Create a custom domain","description":"⚠️ Experimental endpoint: this API is in active development and may change at any time without notice. ⚠️\n\nDeprecated: use `POST /v1/services/{serviceId}/domains` instead.\n\nRegisters a custom hostname for the app. The hostname must CNAME to the regional switchboard target before DNS verification can succeed. Returns 429 if the app has reached its domain quota (default: 3).","deprecated":true,"x-prisma-stability":"experimental","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string","pattern":"^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)*[a-z]{2,}$","minLength":1,"maxLength":253}},"required":["hostname"]}}}}}},"/v1/apps/{

# --- truncated at 32 KB (319 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prisma/refs/heads/main/openapi/prisma-postgres-management-api-openapi.json