{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://planetscale.com/schemas/planetscale/database.json", "title": "PlanetScale Database", "description": "A PlanetScale serverless MySQL-compatible database with branching, deploy requests, and schema management capabilities.", "type": "object", "required": ["name"], "properties": { "id": { "type": "string", "description": "The unique identifier of the database." }, "name": { "type": "string", "description": "The name of the database. Must be unique within the organization.", "pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$", "minLength": 3, "maxLength": 63 }, "state": { "type": "string", "description": "The current operational state of the database.", "enum": ["pending", "ready", "sleeping", "awaking"] }, "plan": { "type": "string", "description": "The billing plan for the database.", "enum": ["hobby", "scaler", "scaler_pro"] }, "cluster_size": { "type": "string", "description": "The cluster size identifier for the production branch." }, "region": { "$ref": "#/$defs/Region" }, "default_branch": { "type": "string", "description": "The name of the default production branch.", "default": "main" }, "production_branch_web_console": { "type": "boolean", "description": "Whether the web console is enabled for production branches.", "default": false }, "insights_enabled": { "type": "boolean", "description": "Whether PlanetScale Insights analytics is enabled for the database." }, "migration_framework": { "type": "string", "description": "The migration framework configured for tracking schema changes." }, "migration_table_name": { "type": "string", "description": "The name of the migration tracking table." }, "require_approval_for_deploy": { "type": "boolean", "description": "Whether deploy requests require approval before deployment.", "default": true }, "allow_data_branching": { "type": "boolean", "description": "Whether data branching is enabled, allowing branches to include data copies." }, "created_at": { "type": "string", "format": "date-time", "description": "The ISO 8601 timestamp when the database was created." }, "updated_at": { "type": "string", "format": "date-time", "description": "The ISO 8601 timestamp when the database was last updated." }, "html_url": { "type": "string", "format": "uri", "description": "The URL to the database in the PlanetScale dashboard." } }, "$defs": { "Region": { "type": "object", "description": "A geographic region where PlanetScale databases and branches can be hosted.", "properties": { "slug": { "type": "string", "description": "The region slug identifier used in API requests." }, "display_name": { "type": "string", "description": "The human-readable name of the region." } } }, "Branch": { "type": "object", "description": "A database branch representing an isolated copy of the schema for development, testing, or production use.", "required": ["name"], "properties": { "id": { "type": "string", "description": "The unique identifier of the branch." }, "name": { "type": "string", "description": "The name of the branch.", "pattern": "^[a-z0-9][a-z0-9-]*[a-z0-9]$", "minLength": 3, "maxLength": 63 }, "production": { "type": "boolean", "description": "Whether this is a production branch." }, "ready": { "type": "boolean", "description": "Whether the branch is ready to accept connections." }, "shard_count": { "type": "integer", "description": "The number of shards in the branch.", "minimum": 1 }, "sharded": { "type": "boolean", "description": "Whether the branch uses sharding." }, "cluster_rate_name": { "type": "string", "description": "The cluster size identifier for the branch." }, "region": { "$ref": "#/$defs/Region" }, "parent_branch": { "type": "string", "description": "The name of the parent branch this was forked from." }, "schema_last_updated_at": { "type": "string", "format": "date-time", "description": "The timestamp when the branch schema was last modified." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the branch was created." }, "updated_at": { "type": "string", "format": "date-time", "description": "The timestamp when the branch was last updated." } } }, "DeployRequest": { "type": "object", "description": "A deploy request for applying schema changes from a development branch to a target branch, similar to a pull request workflow.", "required": ["branch"], "properties": { "id": { "type": "string", "description": "The unique identifier of the deploy request." }, "number": { "type": "integer", "description": "The sequential deploy request number within the database.", "minimum": 1 }, "branch": { "type": "string", "description": "The name of the source branch containing schema changes." }, "into_branch": { "type": "string", "description": "The name of the target branch to deploy into." }, "state": { "type": "string", "description": "The current state of the deploy request lifecycle.", "enum": [ "open", "closed", "pending", "queued", "in_progress", "complete", "complete_pending_revert", "complete_reverted", "complete_error" ] }, "approved": { "type": "boolean", "description": "Whether the deploy request has been approved for deployment." }, "notes": { "type": "string", "description": "Notes or description accompanying the deploy request." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the deploy request was created." }, "updated_at": { "type": "string", "format": "date-time", "description": "The timestamp when the deploy request was last updated." }, "closed_at": { "type": ["string", "null"], "format": "date-time", "description": "The timestamp when the deploy request was closed, or null if still open." } } }, "Password": { "type": "object", "description": "A connection credential for authenticating to a database branch.", "properties": { "id": { "type": "string", "description": "The unique identifier of the password." }, "name": { "type": "string", "description": "A descriptive name for the password." }, "role": { "type": "string", "description": "The access role that determines read/write permissions.", "enum": ["admin", "reader", "writer", "readwriter"] }, "hostname": { "type": "string", "description": "The hostname for connecting to the database with this password." }, "username": { "type": "string", "description": "The username for the database connection." }, "database_branch": { "type": "string", "description": "The branch this password provides access to." }, "region": { "$ref": "#/$defs/Region" }, "expires_at": { "type": ["string", "null"], "format": "date-time", "description": "The expiration timestamp, or null for non-expiring passwords." }, "renewable": { "type": "boolean", "description": "Whether the password expiration can be renewed." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the password was created." } } }, "ServiceToken": { "type": "object", "description": "A service token for authenticating PlanetScale API requests programmatically.", "properties": { "id": { "type": "string", "description": "The unique identifier of the service token." }, "name": { "type": "string", "description": "A descriptive name for the service token." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the service token was created." } } }, "ServiceTokenAccess": { "type": "object", "description": "A permission grant associated with a service token, scoped to a database or organization.", "required": ["access"], "properties": { "id": { "type": "string", "description": "The unique identifier of the access grant." }, "access": { "type": "string", "description": "The permission identifier, such as read_branch, write_branch, or delete_branch." }, "database": { "type": ["string", "null"], "description": "The database the access is scoped to. Null for organization-wide access." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the access was granted." } } }, "Backup": { "type": "object", "description": "A point-in-time backup of a database branch.", "properties": { "id": { "type": "string", "description": "The unique identifier of the backup." }, "name": { "type": "string", "description": "The name of the backup." }, "state": { "type": "string", "description": "The current state of the backup process.", "enum": ["pending", "running", "success", "failed"] }, "size": { "type": "integer", "description": "The size of the backup in bytes.", "minimum": 0 }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the backup was initiated." }, "completed_at": { "type": ["string", "null"], "format": "date-time", "description": "The timestamp when the backup completed, or null if in progress." }, "expires_at": { "type": ["string", "null"], "format": "date-time", "description": "The timestamp when the backup will expire." } } }, "WebhookConfig": { "type": "object", "description": "A webhook configuration for receiving event notifications from a PlanetScale database.", "required": ["url", "events"], "properties": { "id": { "type": "string", "description": "The unique identifier of the webhook." }, "url": { "type": "string", "format": "uri", "description": "The HTTPS URL that receives webhook POST callbacks." }, "events": { "type": "array", "description": "The list of event types the webhook subscribes to.", "items": { "type": "string", "enum": [ "branch.ready", "branch.sleeping", "branch.anomaly", "branch.start_maintenance", "branch.out_of_memory", "deploy_request.opened", "deploy_request.queued", "deploy_request.in_progress", "deploy_request.schema_applied", "deploy_request.errored", "deploy_request.reverted", "deploy_request.closed", "webhook.test" ] }, "minItems": 1, "maxItems": 13 }, "active": { "type": "boolean", "description": "Whether the webhook is currently active." }, "created_at": { "type": "string", "format": "date-time", "description": "The timestamp when the webhook was created." }, "updated_at": { "type": "string", "format": "date-time", "description": "The timestamp when the webhook was last updated." } } } } }