Skip to main content

AppsGetResponseApp

Struct AppsGetResponseApp 

Source
pub struct AppsGetResponseApp {
Show 20 fields pub active_deployment: Option<AnAppDeployment>, pub created_at: Option<DateTime<Utc>>, pub dedicated_ips: Vec<TheDedicatedEgressIpAddressesAssociatedWithTheAppItem>, pub default_ingress: Option<String>, pub domains: Vec<ContainsAllDomainsForTheAppItem>, pub id: Option<String>, pub in_progress_deployment: Option<AnAppDeployment>, pub last_deployment_created_at: Option<DateTime<Utc>>, pub live_domain: Option<String>, pub live_url: Option<String>, pub live_url_base: Option<String>, pub owner_uuid: Option<String>, pub pending_deployment: Option<AppsGetResponseAppPendingDeployment>, pub pinned_deployment: Option<AppsGetResponseAppPinnedDeployment>, pub project_id: Option<String>, pub region: Option<GeographicalInformationAboutAnAppOrigin>, pub spec: AppSpec, pub tier_slug: Option<String>, pub updated_at: Option<DateTime<Utc>>, pub vpc: Option<AppsGetResponseAppVpc>,
}
Expand description

An application’s configuration and status.

JSON schema
{
 "description": "An application's configuration and status.",
 "type": "object",
 "required": [
   "spec"
 ],
 "properties": {
   "active_deployment": {
     "title": "An app deployment",
     "type": "object",
     "properties": {
       "cause": {
         "title": "What caused this deployment to be created",
         "examples": [
           "commit 9a4df0b pushed to github/digitalocean/sample-golang"
         ],
         "type": "string"
       },
       "cloned_from": {
         "title": "The ID of a previous deployment that this deployment was cloned from",
         "examples": [
           "3aa4d20e-5527-4c00-b496-601fbd22520a"
         ],
         "type": "string"
       },
       "created_at": {
         "title": "The creation time of the deployment",
         "examples": [
           "2020-07-28T18:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "functions": {
         "title": "Functions components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this functions component",
               "examples": [
                 "my-functions-component"
               ],
               "type": "string"
             },
             "namespace": {
               "description": "The namespace where the functions are deployed.",
               "examples": [
                 "ap-b2a93513-8d9b-4223-9d61-5e7272c81c32"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "description": "The commit hash of the repository that was used to build this functions component.",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "id": {
         "title": "The ID of the deployment",
         "examples": [
           "b6bdf840-2854-4f87-a36c-5f231c617c84"
         ],
         "type": "string"
       },
       "jobs": {
         "title": "Job components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this job",
               "examples": [
                 "migrate-db"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this job",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "phase": {
         "default": "UNKNOWN",
         "examples": [
           "ACTIVE"
         ],
         "type": "string",
         "enum": [
           "UNKNOWN",
           "PENDING_BUILD",
           "BUILDING",
           "PENDING_DEPLOY",
           "DEPLOYING",
           "ACTIVE",
           "SUPERSEDED",
           "ERROR",
           "CANCELED"
         ]
       },
       "phase_last_updated_at": {
         "title": "When the deployment phase was last updated",
         "examples": [
           "0001-01-01T00:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "progress": {
         "type": "object",
         "properties": {
           "error_steps": {
             "title": "Number of unsuccessful steps",
             "examples": [
               3
             ],
             "type": "integer",
             "format": "int32"
           },
           "pending_steps": {
             "title": "Number of pending steps",
             "examples": [
               2
             ],
             "type": "integer",
             "format": "int32"
           },
           "running_steps": {
             "title": "Number of currently running steps",
             "examples": [
               2
             ],
             "type": "integer",
             "format": "int32"
           },
           "steps": {
             "title": "The deployment's steps",
             "type": "array",
             "items": {
               "title": "A step that is run as part of the deployment's lifecycle",
               "type": "object",
               "properties": {
                 "component_name": {
                   "title": "The component name that this step is associated with",
                   "examples": [
                     "component"
                   ],
                   "type": "string"
                 },
                 "ended_at": {
                   "title": "The end time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "message_base": {
                   "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                   "examples": [
                     "Building service"
                   ],
                   "type": "string"
                 },
                 "name": {
                   "title": "The name of this step",
                   "examples": [
                     "example_step"
                   ],
                   "type": "string"
                 },
                 "reason": {
                   "type": "object",
                   "properties": {
                     "code": {
                       "title": "The error code",
                       "examples": [
                         "Title of Error"
                       ],
                       "type": "string"
                     },
                     "message": {
                       "title": "The error message",
                       "examples": [
                         "This is an error"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "started_at": {
                   "title": "The start time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "status": {
                   "default": "UNKNOWN",
                   "examples": [
                     "SUCCESS"
                   ],
                   "type": "string",
                   "enum": [
                     "UNKNOWN",
                     "PENDING",
                     "RUNNING",
                     "ERROR",
                     "SUCCESS"
                   ]
                 },
                 "steps": {
                   "title": "Child steps of this step",
                   "type": "array",
                   "items": {
                     "type": "object"
                   }
                 }
               }
             }
           },
           "success_steps": {
             "title": "Number of successful steps",
             "examples": [
               4
             ],
             "type": "integer",
             "format": "int32"
           },
           "summary_steps": {
             "title": "A flattened summary of the steps",
             "type": "array",
             "items": {
               "title": "A step that is run as part of the deployment's lifecycle",
               "type": "object",
               "properties": {
                 "component_name": {
                   "title": "The component name that this step is associated with",
                   "examples": [
                     "component"
                   ],
                   "type": "string"
                 },
                 "ended_at": {
                   "title": "The end time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "message_base": {
                   "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                   "examples": [
                     "Building service"
                   ],
                   "type": "string"
                 },
                 "name": {
                   "title": "The name of this step",
                   "examples": [
                     "example_step"
                   ],
                   "type": "string"
                 },
                 "reason": {
                   "type": "object",
                   "properties": {
                     "code": {
                       "title": "The error code",
                       "examples": [
                         "Title of Error"
                       ],
                       "type": "string"
                     },
                     "message": {
                       "title": "The error message",
                       "examples": [
                         "This is an error"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "started_at": {
                   "title": "The start time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "status": {
                   "default": "UNKNOWN",
                   "examples": [
                     "SUCCESS"
                   ],
                   "type": "string",
                   "enum": [
                     "UNKNOWN",
                     "PENDING",
                     "RUNNING",
                     "ERROR",
                     "SUCCESS"
                   ]
                 },
                 "steps": {
                   "title": "Child steps of this step",
                   "type": "array",
                   "items": {
                     "type": "object"
                   }
                 }
               }
             }
           },
           "total_steps": {
             "title": "Total number of steps",
             "examples": [
               5
             ],
             "type": "integer",
             "format": "int32"
           }
         }
       },
       "services": {
         "title": "Service components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this service",
               "examples": [
                 "web"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this service",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "spec": {
         "title": "AppSpec",
         "description": "The desired configuration of an application.",
         "type": "object",
         "required": [
           "name"
         ],
         "properties": {
           "databases": {
             "description": "Database instances which can provide persistence to workloads within the\napplication.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "cluster_name": {
                   "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned.",
                   "examples": [
                     "cluster_name"
                   ],
                   "type": "string"
                 },
                 "db_name": {
                   "description": "The name of the MySQL or PostgreSQL database to configure.",
                   "examples": [
                     "my_db"
                   ],
                   "type": "string"
                 },
                 "db_user": {
                   "description": "The name of the MySQL or PostgreSQL user to configure.",
                   "examples": [
                     "superuser"
                   ],
                   "type": "string"
                 },
                 "engine": {
                   "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Caching\n- MONGODB: MongoDB\n- KAFKA: Kafka\n- OPENSEARCH: OpenSearch\n- VALKEY: ValKey",
                   "default": "UNSET",
                   "examples": [
                     "PG"
                   ],
                   "type": "string",
                   "enum": [
                     "UNSET",
                     "MYSQL",
                     "PG",
                     "REDIS",
                     "MONGODB",
                     "KAFKA",
                     "OPENSEARCH",
                     "VALKEY"
                   ]
                 },
                 "name": {
                   "description": "The database's name. The name must be unique across all components within the same app and cannot use capital letters.",
                   "examples": [
                     "prod-db"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "production": {
                   "description": "Whether this is a production or dev database.",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "version": {
                   "description": "The version of the database engine",
                   "examples": [
                     "12"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "disable_edge_cache": {
             "description": "If set to `true`, the app will **not** be cached at the edge (CDN). Enable this option if you want to manage CDN configuration yourself—whether by using an external CDN provider or by handling static content and caching within your app. This setting is also recommended for apps that require real-time data or serve dynamic content, such as those using Server-Sent Events (SSE) over GET, or hosting an MCP (Model Context Protocol) Server that utilizes SSE.  \n**Note:** This feature is not available for static site components.  \nFor more information, see [Disable CDN Cache](https://docs.digitalocean.com/products/app-platform/how-to/cache-content/#disable-cdn-cache).",
             "default": false,
             "type": "boolean"
           },
           "disable_email_obfuscation": {
             "description": "If set to `true`, email addresses in the app will not be obfuscated. This is\nuseful for apps that require email addresses to be visible (in the HTML markup).",
             "default": false,
             "type": "boolean"
           },
           "domains": {
             "description": "A set of hostnames where the application will be available.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "domain"
               ],
               "properties": {
                 "domain": {
                   "description": "The hostname for the domain",
                   "examples": [
                     "app.example.com"
                   ],
                   "type": "string",
                   "maxLength": 253,
                   "minLength": 4,
                   "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
                 },
                 "minimum_tls_version": {
                   "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
                   "examples": [
                     "1.3"
                   ],
                   "type": "string",
                   "enum": [
                     "1.2",
                     "1.3"
                   ],
                   "maxLength": 3,
                   "minLength": 3
                 },
                 "type": {
                   "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
                   "default": "UNSPECIFIED",
                   "examples": [
                     "DEFAULT"
                   ],
                   "type": "string",
                   "enum": [
                     "UNSPECIFIED",
                     "DEFAULT",
                     "PRIMARY",
                     "ALIAS"
                   ]
                 },
                 "wildcard": {
                   "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "zone": {
                   "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
                   "examples": [
                     "example.com"
                   ],
                   "type": "string",
                   "format": "hostname"
                 }
               }
             }
           },
           "egress": {
             "description": "Specification for app egress configurations.",
             "type": "object",
             "properties": {
               "type": {
                 "title": "The app egress type.",
                 "default": "AUTOASSIGN",
                 "examples": [
                   "AUTOASSIGN"
                 ],
                 "type": "string",
                 "enum": [
                   "AUTOASSIGN",
                   "DEDICATED_IP"
                 ]
               }
             }
           },
           "enhanced_threat_control_enabled": {
             "description": "If set to `true`, suspicious requests will go through additional security checks to help mitigate layer 7 DDoS attacks.",
             "default": false,
             "type": "boolean"
           },
           "functions": {
             "description": "Workloads which expose publicly-accessible HTTP services via Functions Components.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "alerts": {
                   "type": "array",
                   "items": {
                     "type": "object",
                     "properties": {
                       "disabled": {
                         "description": "Is the alert disabled?",
                         "examples": [
                           false
                         ],
                         "type": "boolean"
                       },
                       "operator": {
                         "default": "UNSPECIFIED_OPERATOR",
                         "examples": [
                           "GREATER_THAN"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_OPERATOR",
                           "GREATER_THAN",
                           "LESS_THAN"
                         ]
                       },
                       "rule": {
                         "default": "UNSPECIFIED_RULE",
                         "examples": [
                           "CPU_UTILIZATION"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_RULE",
                           "CPU_UTILIZATION",
                           "MEM_UTILIZATION",
                           "RESTART_COUNT",
                           "DEPLOYMENT_FAILED",
                           "DEPLOYMENT_LIVE",
                           "DOMAIN_FAILED",
                           "DOMAIN_LIVE",
                           "AUTOSCALE_FAILED",
                           "AUTOSCALE_SUCCEEDED",
                           "FUNCTIONS_ACTIVATION_COUNT",
                           "FUNCTIONS_AVERAGE_DURATION_MS",
                           "FUNCTIONS_ERROR_RATE_PER_MINUTE",
                           "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
                           "FUNCTIONS_ERROR_COUNT",
                           "FUNCTIONS_GB_RATE_PER_SECOND",
                           "REQUESTS_PER_SECOND",
                           "REQUEST_DURATION_P95_MS"
                         ]
                       },
                       "value": {
                         "description": "Threshold value for alert",
                         "examples": [
                           2.32
                         ],
                         "type": "number",
                         "format": "float"
                       },
                       "window": {
                         "default": "UNSPECIFIED_WINDOW",
                         "examples": [
                           "FIVE_MINUTES"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_WINDOW",
                           "FIVE_MINUTES",
                           "TEN_MINUTES",
                           "THIRTY_MINUTES",
                           "ONE_HOUR"
                         ]
                       }
                     }
                   }
                 },
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "cors": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "description": "(Deprecated - Use Ingress Rules instead)."
                     },
                     {
                       "deprecated": true
                     }
                   ]
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "routes": {
                   "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                   "deprecated": true,
                   "type": "array",
                   "items": {
                     "title": "A criterion for routing HTTP traffic to a component.",
                     "type": "object",
                     "properties": {
                       "path": {
                         "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                         "examples": [
                           "/api"
                         ],
                         "type": "string"
                       },
                       "preserve_path_prefix": {
                         "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                         "examples": [
                           true
                         ],
                         "type": "boolean"
                       }
                     }
                   }
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "ingress": {
             "description": "Specification for app ingress configurations.",
             "type": "object",
             "properties": {
               "custom_error_page_url": {
                 "description": "Optional HTTPS URL of a custom error page to display when the app is unreachable. The\npage is shown in a full-viewport iframe. The target must allow framing: avoid\n`X-Frame-Options: DENY` and a restrictive `Content-Security-Policy` `frame-ancestors`\nthat blocks the platform. If omitted, the default platform error page is used.",
                 "examples": [
                   "https://status.example.com/app-unavailable"
                 ],
                 "type": "string",
                 "format": "uri",
                 "pattern": "^https://"
               },
               "rules": {
                 "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "properties": {
                     "component": {
                       "description": "The component to route to. Only one of `component` or `redirect` may be set.",
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "name": {
                           "description": "The name of the component to route to.",
                           "examples": [
                             "web"
                           ],
                           "type": "string"
                         },
                         "preserve_path_prefix": {
                           "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`.",
                           "examples": [
                             "true"
                           ],
                           "type": "string"
                         },
                         "rewrite": {
                           "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`.",
                           "examples": [
                             "/api/v1/"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "cors": {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "match": {
                       "description": "The match configuration for the rule.",
                       "type": "object",
                       "properties": {
                         "authority": {
                           "description": "The authority to match on.",
                           "type": "object",
                           "required": [
                             "exact"
                           ],
                           "properties": {
                             "exact": {
                               "description": "Exact string match. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                               "examples": [
                                 "example.com"
                               ],
                               "type": [
                                 "string",
                                 "null"
                               ],
                               "maxLength": 256
                             }
                           }
                         },
                         "path": {
                           "description": "The path to match on.",
                           "type": "object",
                           "required": [
                             "prefix"
                           ],
                           "properties": {
                             "prefix": {
                               "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`.",
                               "examples": [
                                 "/api"
                               ],
                               "type": [
                                 "string",
                                 "null"
                               ],
                               "maxLength": 256
                             }
                           }
                         }
                       }
                     },
                     "redirect": {
                       "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set.",
                       "type": "object",
                       "properties": {
                         "authority": {
                           "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port.",
                           "examples": [
                             "example.com"
                           ],
                           "type": "string"
                         },
                         "port": {
                           "description": "The port to redirect to.",
                           "examples": [
                             443
                           ],
                           "type": "integer",
                           "format": "int64"
                         },
                         "redirect_code": {
                           "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308.",
                           "examples": [
                             302
                           ],
                           "type": "integer",
                           "format": "int64"
                         },
                         "scheme": {
                           "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`.",
                           "examples": [
                             "https"
                           ],
                           "type": "string"
                         },
                         "uri": {
                           "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched.",
                           "examples": [
                             "/about"
                           ],
                           "type": "string"
                         }
                       }
                     }
                   }
                 }
               }
             }
           },
           "jobs": {
             "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "kind": {
                       "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy.",
                       "default": "UNSPECIFIED",
                       "examples": [
                         "PRE_DEPLOY"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSPECIFIED",
                         "PRE_DEPLOY",
                         "POST_DEPLOY",
                         "FAILED_DEPLOY"
                       ]
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ]
             }
           },
           "maintenance": {
             "description": "Specification to configure maintenance settings for the app, such as maintenance mode and archiving the app.",
             "type": "object",
             "properties": {
               "archive": {
                 "description": "Indicates whether the app should be archived. Setting this to true implies that enabled is set to true.",
                 "examples": [
                   true
                 ],
                 "type": "boolean"
               },
               "enabled": {
                 "description": "Indicates whether maintenance mode should be enabled for the app.",
                 "examples": [
                   true
                 ],
                 "type": "boolean"
               },
               "offline_page_url": {
                 "description": "A custom offline page to display when maintenance mode is enabled or the app is archived.",
                 "examples": [
                   "https://example.com/offline.html"
                 ],
                 "type": "string"
               }
             }
           },
           "name": {
             "description": "The name of the app. Must be unique across all apps in the same account.",
             "examples": [
               "web-app-01"
             ],
             "type": "string",
             "maxLength": 32,
             "minLength": 2,
             "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
           },
           "region": {
             "description": "The slug form of the geographical origin of the app. Default: `nearest available`",
             "examples": [
               "nyc"
             ],
             "type": "string",
             "enum": [
               "atl",
               "nyc",
               "sfo",
               "tor",
               "ams",
               "fra",
               "lon",
               "blr",
               "sgp",
               "syd"
             ]
           },
           "services": {
             "description": "Workloads which expose publicly-accessible HTTP services.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "autoscaling": {
                       "allOf": [
                         {
                           "description": "Configuration for automatically scaling this component based on metrics.",
                           "type": "object",
                           "properties": {
                             "max_instance_count": {
                               "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "maximum": 250.0,
                               "minimum": 1.0
                             },
                             "metrics": {
                               "description": "The metrics that the component is scaled on.",
                               "type": "object",
                               "properties": {
                                 "cpu": {
                                   "description": "Settings for scaling the component based on CPU utilization.",
                                   "type": "object",
                                   "properties": {
                                     "percent": {
                                       "description": "The average target CPU utilization for the component.",
                                       "default": 80,
                                       "examples": [
                                         75
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "maximum": 100.0,
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             },
                             "min_instance_count": {
                               "description": "The minimum amount of instances for this component.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "minimum": 1.0
                             }
                           }
                         },
                         {
                           "type": "object",
                           "properties": {
                             "metrics": {
                               "type": "object",
                               "properties": {
                                 "request_duration": {
                                   "description": "Settings for scaling the component based on request duration.",
                                   "type": "object",
                                   "properties": {
                                     "p95_milliseconds": {
                                       "description": "The p95 target request duration in milliseconds for the component.",
                                       "examples": [
                                         500
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "minimum": 1.0
                                     }
                                   }
                                 },
                                 "requests_per_second": {
                                   "description": "Settings for scaling the component based on requests per second.",
                                   "type": "object",
                                   "properties": {
                                     "per_instance": {
                                       "description": "The target number of requests per second per instance for the component.",
                                       "examples": [
                                         100
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             }
                           }
                         }
                       ]
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             60
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "port": {
                           "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             3
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             45
                           ],
                           "type": "integer",
                           "format": "int32"
                         }
                       }
                     },
                     "http_port": {
                       "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field.",
                       "examples": [
                         3000
                       ],
                       "type": "integer",
                       "format": "int64",
                       "maximum": 65535.0,
                       "minimum": 1.0
                     },
                     "internal_ports": {
                       "description": "The ports on which this service will listen for internal traffic.",
                       "examples": [
                         [
                           80,
                           443
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "integer",
                         "format": "int64"
                       }
                     },
                     "liveness_health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             18
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 50.0,
                           "minimum": 1.0
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 3600.0,
                           "minimum": 0.0
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             10
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 300.0,
                           "minimum": 1.0
                         },
                         "port": {
                           "description": "The port on which the health check will be performed.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 1.0,
                           "minimum": 1.0
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 120.0,
                           "minimum": 1.0
                         }
                       }
                     },
                     "protocol": {
                       "description": "The protocol which the service uses to serve traffic on the http_port.\n\n- `HTTP`: The app is serving the HTTP protocol. Default.\n- `HTTP2`: The app is serving the HTTP/2 protocol. Currently, this needs to be implemented in the service by serving HTTP/2 cleartext (h2c).\n",
                       "examples": [
                         "HTTP"
                       ],
                       "type": "string",
                       "enum": [
                         "HTTP",
                         "HTTP2"
                       ]
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "drain_seconds": {
                           "description": "The number of seconds to wait between selecting a container instance for termination and issuing the TERM signal. Selecting a container instance for termination begins an asynchronous drain of new requests on upstream load-balancers. (Default 15)",
                           "examples": [
                             15
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 110.0,
                           "minimum": 1.0
                         },
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ]
             }
           },
           "static_sites": {
             "description": "Content which can be rendered to static web assets.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "catchall_document": {
                       "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set.",
                       "examples": [
                         "index.html"
                       ],
                       "type": "string"
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "error_document": {
                       "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one.",
                       "default": "404.html",
                       "examples": [
                         "error.html"
                       ],
                       "type": "string"
                     },
                     "index_document": {
                       "description": "The name of the index document to use when serving this static site. Default: index.html",
                       "default": "index.html",
                       "examples": [
                         "main.html"
                       ],
                       "type": "string"
                     },
                     "output_dir": {
                       "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`.",
                       "examples": [
                         "dist/"
                       ],
                       "type": "string"
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     }
                   }
                 }
               ],
               "required": [
                 "name"
               ]
             }
           },
           "vpc": {
             "readOnly": true,
             "type": "object",
             "properties": {
               "egress_ips": {
                 "title": "The egress ips associated with the VPC.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "properties": {
                     "ip": {
                       "examples": [
                         "10.0.0.1"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "id": {
                 "title": "The ID of the VPC.",
                 "examples": [
                   "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
                 ],
                 "type": "string"
               }
             }
           },
           "workers": {
             "description": "Workloads which do not expose publicly-accessible HTTP services.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "autoscaling": {
                       "description": "Configuration for automatically scaling this component based on metrics.",
                       "type": "object",
                       "properties": {
                         "max_instance_count": {
                           "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                           "examples": [
                             3
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "maximum": 250.0,
                           "minimum": 1.0
                         },
                         "metrics": {
                           "description": "The metrics that the component is scaled on.",
                           "type": "object",
                           "properties": {
                             "cpu": {
                               "description": "Settings for scaling the component based on CPU utilization.",
                               "type": "object",
                               "properties": {
                                 "percent": {
                                   "description": "The average target CPU utilization for the component.",
                                   "default": 80,
                                   "examples": [
                                     75
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "maximum": 100.0,
                                   "minimum": 1.0
                                 }
                               }
                             }
                           }
                         },
                         "min_instance_count": {
                           "description": "The minimum amount of instances for this component.",
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "minimum": 1.0
                         }
                       }
                     },
                     "liveness_health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             18
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 50.0,
                           "minimum": 1.0
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 3600.0,
                           "minimum": 0.0
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             10
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 300.0,
                           "minimum": 1.0
                         },
                         "port": {
                           "description": "The port on which the health check will be performed.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 1.0,
                           "minimum": 1.0
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 120.0,
                           "minimum": 1.0
                         }
                       }
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ],
               "required": [
                 "name"
               ]
             }
           }
         }
       },
       "static_sites": {
         "title": "Static Site components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this static site",
               "examples": [
                 "web"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this static site",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "tier_slug": {
         "title": "The current pricing tier slug of the deployment",
         "readOnly": true,
         "examples": [
           "basic"
         ],
         "type": "string"
       },
       "updated_at": {
         "title": "When the deployment was last updated",
         "examples": [
           "2020-07-28T18:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "workers": {
         "title": "Worker components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this worker",
               "examples": [
                 "queue-runner"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this worker",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       }
     }
   },
   "created_at": {
     "title": "The creation time of the app",
     "readOnly": true,
     "examples": [
       "2020-11-19T20:27:18Z"
     ],
     "type": "string",
     "format": "date-time"
   },
   "dedicated_ips": {
     "title": "The dedicated egress IP addresses associated with the app.",
     "readOnly": true,
     "type": "array",
     "items": {
       "readOnly": true,
       "type": "object",
       "properties": {
         "id": {
           "title": "The ID of the dedicated egress IP.",
           "examples": [
             "9e7bc2ac-205a-45d6-919c-e1ac5e73f962"
           ],
           "type": "string"
         },
         "ip": {
           "title": "The IP address of the dedicated egress IP.",
           "examples": [
             "192.168.1.1"
           ],
           "type": "string"
         },
         "status": {
           "title": "The status of the dedicated egress IP.",
           "default": "UNKNOWN",
           "readOnly": true,
           "examples": [
             "ASSIGNED"
           ],
           "type": "string",
           "enum": [
             "UNKNOWN",
             "ASSIGNING",
             "ASSIGNED",
             "REMOVED"
           ]
         }
       }
     }
   },
   "default_ingress": {
     "title": "The default hostname on which the app is accessible",
     "readOnly": true,
     "examples": [
       "digitalocean.com"
     ],
     "type": "string"
   },
   "domains": {
     "title": "Contains all domains for the app",
     "readOnly": true,
     "type": "array",
     "items": {
       "type": "object",
       "properties": {
         "certificate_expires_at": {
           "title": "Current SSL certificate expiration time",
           "readOnly": true,
           "examples": [
             "2024-01-29T23:59:59Z"
           ],
           "type": "string",
           "format": "date-time"
         },
         "id": {
           "title": "The ID of the domain",
           "examples": [
             "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"
           ],
           "type": "string"
         },
         "phase": {
           "default": "UNKNOWN",
           "examples": [
             "ACTIVE"
           ],
           "type": "string",
           "enum": [
             "UNKNOWN",
             "PENDING",
             "CONFIGURING",
             "ACTIVE",
             "ERROR"
           ]
         },
         "progress": {
           "type": "object",
           "properties": {
             "steps": {
               "title": "The steps of the domain's progress",
               "type": "array",
               "items": {
                 "type": "object"
               }
             }
           }
         },
         "rotate_validation_records": {
           "title": "Validation values have changed and require manual intervention",
           "readOnly": true,
           "type": "boolean"
         },
         "spec": {
           "type": "object",
           "required": [
             "domain"
           ],
           "properties": {
             "domain": {
               "description": "The hostname for the domain",
               "examples": [
                 "app.example.com"
               ],
               "type": "string",
               "maxLength": 253,
               "minLength": 4,
               "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
             },
             "minimum_tls_version": {
               "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
               "examples": [
                 "1.3"
               ],
               "type": "string",
               "enum": [
                 "1.2",
                 "1.3"
               ],
               "maxLength": 3,
               "minLength": 3
             },
             "type": {
               "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
               "default": "UNSPECIFIED",
               "examples": [
                 "DEFAULT"
               ],
               "type": "string",
               "enum": [
                 "UNSPECIFIED",
                 "DEFAULT",
                 "PRIMARY",
                 "ALIAS"
               ]
             },
             "wildcard": {
               "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
               "examples": [
                 true
               ],
               "type": "boolean"
             },
             "zone": {
               "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
               "examples": [
                 "example.com"
               ],
               "type": "string",
               "format": "hostname"
             }
           }
         },
         "validations": {
           "title": "List of TXT validation records",
           "type": "array",
           "items": {
             "properties": {
               "txt_name": {
                 "title": "TXT record name",
                 "readOnly": true,
                 "examples": [
                   "_acme-challenge.app.example.com"
                 ],
                 "type": "string"
               },
               "txt_value": {
                 "title": "TXT record value",
                 "readOnly": true,
                 "examples": [
                   "lXLOcN6cPv0nproViNcUHcahD9TrIPlNgdwesj0pYpk"
                 ],
                 "type": "string"
               }
             }
           }
         }
       }
     }
   },
   "id": {
     "title": "The ID of the application",
     "readOnly": true,
     "examples": [
       "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"
     ],
     "type": "string"
   },
   "in_progress_deployment": {
     "title": "An app deployment",
     "type": "object",
     "properties": {
       "cause": {
         "title": "What caused this deployment to be created",
         "examples": [
           "commit 9a4df0b pushed to github/digitalocean/sample-golang"
         ],
         "type": "string"
       },
       "cloned_from": {
         "title": "The ID of a previous deployment that this deployment was cloned from",
         "examples": [
           "3aa4d20e-5527-4c00-b496-601fbd22520a"
         ],
         "type": "string"
       },
       "created_at": {
         "title": "The creation time of the deployment",
         "examples": [
           "2020-07-28T18:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "functions": {
         "title": "Functions components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this functions component",
               "examples": [
                 "my-functions-component"
               ],
               "type": "string"
             },
             "namespace": {
               "description": "The namespace where the functions are deployed.",
               "examples": [
                 "ap-b2a93513-8d9b-4223-9d61-5e7272c81c32"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "description": "The commit hash of the repository that was used to build this functions component.",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "id": {
         "title": "The ID of the deployment",
         "examples": [
           "b6bdf840-2854-4f87-a36c-5f231c617c84"
         ],
         "type": "string"
       },
       "jobs": {
         "title": "Job components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this job",
               "examples": [
                 "migrate-db"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this job",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "phase": {
         "default": "UNKNOWN",
         "examples": [
           "ACTIVE"
         ],
         "type": "string",
         "enum": [
           "UNKNOWN",
           "PENDING_BUILD",
           "BUILDING",
           "PENDING_DEPLOY",
           "DEPLOYING",
           "ACTIVE",
           "SUPERSEDED",
           "ERROR",
           "CANCELED"
         ]
       },
       "phase_last_updated_at": {
         "title": "When the deployment phase was last updated",
         "examples": [
           "0001-01-01T00:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "progress": {
         "type": "object",
         "properties": {
           "error_steps": {
             "title": "Number of unsuccessful steps",
             "examples": [
               3
             ],
             "type": "integer",
             "format": "int32"
           },
           "pending_steps": {
             "title": "Number of pending steps",
             "examples": [
               2
             ],
             "type": "integer",
             "format": "int32"
           },
           "running_steps": {
             "title": "Number of currently running steps",
             "examples": [
               2
             ],
             "type": "integer",
             "format": "int32"
           },
           "steps": {
             "title": "The deployment's steps",
             "type": "array",
             "items": {
               "title": "A step that is run as part of the deployment's lifecycle",
               "type": "object",
               "properties": {
                 "component_name": {
                   "title": "The component name that this step is associated with",
                   "examples": [
                     "component"
                   ],
                   "type": "string"
                 },
                 "ended_at": {
                   "title": "The end time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "message_base": {
                   "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                   "examples": [
                     "Building service"
                   ],
                   "type": "string"
                 },
                 "name": {
                   "title": "The name of this step",
                   "examples": [
                     "example_step"
                   ],
                   "type": "string"
                 },
                 "reason": {
                   "type": "object",
                   "properties": {
                     "code": {
                       "title": "The error code",
                       "examples": [
                         "Title of Error"
                       ],
                       "type": "string"
                     },
                     "message": {
                       "title": "The error message",
                       "examples": [
                         "This is an error"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "started_at": {
                   "title": "The start time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "status": {
                   "default": "UNKNOWN",
                   "examples": [
                     "SUCCESS"
                   ],
                   "type": "string",
                   "enum": [
                     "UNKNOWN",
                     "PENDING",
                     "RUNNING",
                     "ERROR",
                     "SUCCESS"
                   ]
                 },
                 "steps": {
                   "title": "Child steps of this step",
                   "type": "array",
                   "items": {
                     "type": "object"
                   }
                 }
               }
             }
           },
           "success_steps": {
             "title": "Number of successful steps",
             "examples": [
               4
             ],
             "type": "integer",
             "format": "int32"
           },
           "summary_steps": {
             "title": "A flattened summary of the steps",
             "type": "array",
             "items": {
               "title": "A step that is run as part of the deployment's lifecycle",
               "type": "object",
               "properties": {
                 "component_name": {
                   "title": "The component name that this step is associated with",
                   "examples": [
                     "component"
                   ],
                   "type": "string"
                 },
                 "ended_at": {
                   "title": "The end time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "message_base": {
                   "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                   "examples": [
                     "Building service"
                   ],
                   "type": "string"
                 },
                 "name": {
                   "title": "The name of this step",
                   "examples": [
                     "example_step"
                   ],
                   "type": "string"
                 },
                 "reason": {
                   "type": "object",
                   "properties": {
                     "code": {
                       "title": "The error code",
                       "examples": [
                         "Title of Error"
                       ],
                       "type": "string"
                     },
                     "message": {
                       "title": "The error message",
                       "examples": [
                         "This is an error"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "started_at": {
                   "title": "The start time of this step",
                   "examples": [
                     "2020-11-19T20:27:18Z"
                   ],
                   "type": "string",
                   "format": "date-time"
                 },
                 "status": {
                   "default": "UNKNOWN",
                   "examples": [
                     "SUCCESS"
                   ],
                   "type": "string",
                   "enum": [
                     "UNKNOWN",
                     "PENDING",
                     "RUNNING",
                     "ERROR",
                     "SUCCESS"
                   ]
                 },
                 "steps": {
                   "title": "Child steps of this step",
                   "type": "array",
                   "items": {
                     "type": "object"
                   }
                 }
               }
             }
           },
           "total_steps": {
             "title": "Total number of steps",
             "examples": [
               5
             ],
             "type": "integer",
             "format": "int32"
           }
         }
       },
       "services": {
         "title": "Service components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this service",
               "examples": [
                 "web"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this service",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "spec": {
         "title": "AppSpec",
         "description": "The desired configuration of an application.",
         "type": "object",
         "required": [
           "name"
         ],
         "properties": {
           "databases": {
             "description": "Database instances which can provide persistence to workloads within the\napplication.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "cluster_name": {
                   "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned.",
                   "examples": [
                     "cluster_name"
                   ],
                   "type": "string"
                 },
                 "db_name": {
                   "description": "The name of the MySQL or PostgreSQL database to configure.",
                   "examples": [
                     "my_db"
                   ],
                   "type": "string"
                 },
                 "db_user": {
                   "description": "The name of the MySQL or PostgreSQL user to configure.",
                   "examples": [
                     "superuser"
                   ],
                   "type": "string"
                 },
                 "engine": {
                   "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Caching\n- MONGODB: MongoDB\n- KAFKA: Kafka\n- OPENSEARCH: OpenSearch\n- VALKEY: ValKey",
                   "default": "UNSET",
                   "examples": [
                     "PG"
                   ],
                   "type": "string",
                   "enum": [
                     "UNSET",
                     "MYSQL",
                     "PG",
                     "REDIS",
                     "MONGODB",
                     "KAFKA",
                     "OPENSEARCH",
                     "VALKEY"
                   ]
                 },
                 "name": {
                   "description": "The database's name. The name must be unique across all components within the same app and cannot use capital letters.",
                   "examples": [
                     "prod-db"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "production": {
                   "description": "Whether this is a production or dev database.",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "version": {
                   "description": "The version of the database engine",
                   "examples": [
                     "12"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "disable_edge_cache": {
             "description": "If set to `true`, the app will **not** be cached at the edge (CDN). Enable this option if you want to manage CDN configuration yourself—whether by using an external CDN provider or by handling static content and caching within your app. This setting is also recommended for apps that require real-time data or serve dynamic content, such as those using Server-Sent Events (SSE) over GET, or hosting an MCP (Model Context Protocol) Server that utilizes SSE.  \n**Note:** This feature is not available for static site components.  \nFor more information, see [Disable CDN Cache](https://docs.digitalocean.com/products/app-platform/how-to/cache-content/#disable-cdn-cache).",
             "default": false,
             "type": "boolean"
           },
           "disable_email_obfuscation": {
             "description": "If set to `true`, email addresses in the app will not be obfuscated. This is\nuseful for apps that require email addresses to be visible (in the HTML markup).",
             "default": false,
             "type": "boolean"
           },
           "domains": {
             "description": "A set of hostnames where the application will be available.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "domain"
               ],
               "properties": {
                 "domain": {
                   "description": "The hostname for the domain",
                   "examples": [
                     "app.example.com"
                   ],
                   "type": "string",
                   "maxLength": 253,
                   "minLength": 4,
                   "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
                 },
                 "minimum_tls_version": {
                   "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
                   "examples": [
                     "1.3"
                   ],
                   "type": "string",
                   "enum": [
                     "1.2",
                     "1.3"
                   ],
                   "maxLength": 3,
                   "minLength": 3
                 },
                 "type": {
                   "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
                   "default": "UNSPECIFIED",
                   "examples": [
                     "DEFAULT"
                   ],
                   "type": "string",
                   "enum": [
                     "UNSPECIFIED",
                     "DEFAULT",
                     "PRIMARY",
                     "ALIAS"
                   ]
                 },
                 "wildcard": {
                   "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "zone": {
                   "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
                   "examples": [
                     "example.com"
                   ],
                   "type": "string",
                   "format": "hostname"
                 }
               }
             }
           },
           "egress": {
             "description": "Specification for app egress configurations.",
             "type": "object",
             "properties": {
               "type": {
                 "title": "The app egress type.",
                 "default": "AUTOASSIGN",
                 "examples": [
                   "AUTOASSIGN"
                 ],
                 "type": "string",
                 "enum": [
                   "AUTOASSIGN",
                   "DEDICATED_IP"
                 ]
               }
             }
           },
           "enhanced_threat_control_enabled": {
             "description": "If set to `true`, suspicious requests will go through additional security checks to help mitigate layer 7 DDoS attacks.",
             "default": false,
             "type": "boolean"
           },
           "functions": {
             "description": "Workloads which expose publicly-accessible HTTP services via Functions Components.",
             "type": "array",
             "items": {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "alerts": {
                   "type": "array",
                   "items": {
                     "type": "object",
                     "properties": {
                       "disabled": {
                         "description": "Is the alert disabled?",
                         "examples": [
                           false
                         ],
                         "type": "boolean"
                       },
                       "operator": {
                         "default": "UNSPECIFIED_OPERATOR",
                         "examples": [
                           "GREATER_THAN"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_OPERATOR",
                           "GREATER_THAN",
                           "LESS_THAN"
                         ]
                       },
                       "rule": {
                         "default": "UNSPECIFIED_RULE",
                         "examples": [
                           "CPU_UTILIZATION"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_RULE",
                           "CPU_UTILIZATION",
                           "MEM_UTILIZATION",
                           "RESTART_COUNT",
                           "DEPLOYMENT_FAILED",
                           "DEPLOYMENT_LIVE",
                           "DOMAIN_FAILED",
                           "DOMAIN_LIVE",
                           "AUTOSCALE_FAILED",
                           "AUTOSCALE_SUCCEEDED",
                           "FUNCTIONS_ACTIVATION_COUNT",
                           "FUNCTIONS_AVERAGE_DURATION_MS",
                           "FUNCTIONS_ERROR_RATE_PER_MINUTE",
                           "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
                           "FUNCTIONS_ERROR_COUNT",
                           "FUNCTIONS_GB_RATE_PER_SECOND",
                           "REQUESTS_PER_SECOND",
                           "REQUEST_DURATION_P95_MS"
                         ]
                       },
                       "value": {
                         "description": "Threshold value for alert",
                         "examples": [
                           2.32
                         ],
                         "type": "number",
                         "format": "float"
                       },
                       "window": {
                         "default": "UNSPECIFIED_WINDOW",
                         "examples": [
                           "FIVE_MINUTES"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSPECIFIED_WINDOW",
                           "FIVE_MINUTES",
                           "TEN_MINUTES",
                           "THIRTY_MINUTES",
                           "ONE_HOUR"
                         ]
                       }
                     }
                   }
                 },
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "cors": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "description": "(Deprecated - Use Ingress Rules instead)."
                     },
                     {
                       "deprecated": true
                     }
                   ]
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "routes": {
                   "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                   "deprecated": true,
                   "type": "array",
                   "items": {
                     "title": "A criterion for routing HTTP traffic to a component.",
                     "type": "object",
                     "properties": {
                       "path": {
                         "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                         "examples": [
                           "/api"
                         ],
                         "type": "string"
                       },
                       "preserve_path_prefix": {
                         "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                         "examples": [
                           true
                         ],
                         "type": "boolean"
                       }
                     }
                   }
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "ingress": {
             "description": "Specification for app ingress configurations.",
             "type": "object",
             "properties": {
               "custom_error_page_url": {
                 "description": "Optional HTTPS URL of a custom error page to display when the app is unreachable. The\npage is shown in a full-viewport iframe. The target must allow framing: avoid\n`X-Frame-Options: DENY` and a restrictive `Content-Security-Policy` `frame-ancestors`\nthat blocks the platform. If omitted, the default platform error page is used.",
                 "examples": [
                   "https://status.example.com/app-unavailable"
                 ],
                 "type": "string",
                 "format": "uri",
                 "pattern": "^https://"
               },
               "rules": {
                 "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "properties": {
                     "component": {
                       "description": "The component to route to. Only one of `component` or `redirect` may be set.",
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "name": {
                           "description": "The name of the component to route to.",
                           "examples": [
                             "web"
                           ],
                           "type": "string"
                         },
                         "preserve_path_prefix": {
                           "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`.",
                           "examples": [
                             "true"
                           ],
                           "type": "string"
                         },
                         "rewrite": {
                           "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`.",
                           "examples": [
                             "/api/v1/"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "cors": {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "match": {
                       "description": "The match configuration for the rule.",
                       "type": "object",
                       "properties": {
                         "authority": {
                           "description": "The authority to match on.",
                           "type": "object",
                           "required": [
                             "exact"
                           ],
                           "properties": {
                             "exact": {
                               "description": "Exact string match. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                               "examples": [
                                 "example.com"
                               ],
                               "type": [
                                 "string",
                                 "null"
                               ],
                               "maxLength": 256
                             }
                           }
                         },
                         "path": {
                           "description": "The path to match on.",
                           "type": "object",
                           "required": [
                             "prefix"
                           ],
                           "properties": {
                             "prefix": {
                               "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`.",
                               "examples": [
                                 "/api"
                               ],
                               "type": [
                                 "string",
                                 "null"
                               ],
                               "maxLength": 256
                             }
                           }
                         }
                       }
                     },
                     "redirect": {
                       "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set.",
                       "type": "object",
                       "properties": {
                         "authority": {
                           "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port.",
                           "examples": [
                             "example.com"
                           ],
                           "type": "string"
                         },
                         "port": {
                           "description": "The port to redirect to.",
                           "examples": [
                             443
                           ],
                           "type": "integer",
                           "format": "int64"
                         },
                         "redirect_code": {
                           "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308.",
                           "examples": [
                             302
                           ],
                           "type": "integer",
                           "format": "int64"
                         },
                         "scheme": {
                           "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`.",
                           "examples": [
                             "https"
                           ],
                           "type": "string"
                         },
                         "uri": {
                           "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched.",
                           "examples": [
                             "/about"
                           ],
                           "type": "string"
                         }
                       }
                     }
                   }
                 }
               }
             }
           },
           "jobs": {
             "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "kind": {
                       "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy.",
                       "default": "UNSPECIFIED",
                       "examples": [
                         "PRE_DEPLOY"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSPECIFIED",
                         "PRE_DEPLOY",
                         "POST_DEPLOY",
                         "FAILED_DEPLOY"
                       ]
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ]
             }
           },
           "maintenance": {
             "description": "Specification to configure maintenance settings for the app, such as maintenance mode and archiving the app.",
             "type": "object",
             "properties": {
               "archive": {
                 "description": "Indicates whether the app should be archived. Setting this to true implies that enabled is set to true.",
                 "examples": [
                   true
                 ],
                 "type": "boolean"
               },
               "enabled": {
                 "description": "Indicates whether maintenance mode should be enabled for the app.",
                 "examples": [
                   true
                 ],
                 "type": "boolean"
               },
               "offline_page_url": {
                 "description": "A custom offline page to display when maintenance mode is enabled or the app is archived.",
                 "examples": [
                   "https://example.com/offline.html"
                 ],
                 "type": "string"
               }
             }
           },
           "name": {
             "description": "The name of the app. Must be unique across all apps in the same account.",
             "examples": [
               "web-app-01"
             ],
             "type": "string",
             "maxLength": 32,
             "minLength": 2,
             "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
           },
           "region": {
             "description": "The slug form of the geographical origin of the app. Default: `nearest available`",
             "examples": [
               "nyc"
             ],
             "type": "string",
             "enum": [
               "atl",
               "nyc",
               "sfo",
               "tor",
               "ams",
               "fra",
               "lon",
               "blr",
               "sgp",
               "syd"
             ]
           },
           "services": {
             "description": "Workloads which expose publicly-accessible HTTP services.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "autoscaling": {
                       "allOf": [
                         {
                           "description": "Configuration for automatically scaling this component based on metrics.",
                           "type": "object",
                           "properties": {
                             "max_instance_count": {
                               "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "maximum": 250.0,
                               "minimum": 1.0
                             },
                             "metrics": {
                               "description": "The metrics that the component is scaled on.",
                               "type": "object",
                               "properties": {
                                 "cpu": {
                                   "description": "Settings for scaling the component based on CPU utilization.",
                                   "type": "object",
                                   "properties": {
                                     "percent": {
                                       "description": "The average target CPU utilization for the component.",
                                       "default": 80,
                                       "examples": [
                                         75
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "maximum": 100.0,
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             },
                             "min_instance_count": {
                               "description": "The minimum amount of instances for this component.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "minimum": 1.0
                             }
                           }
                         },
                         {
                           "type": "object",
                           "properties": {
                             "metrics": {
                               "type": "object",
                               "properties": {
                                 "request_duration": {
                                   "description": "Settings for scaling the component based on request duration.",
                                   "type": "object",
                                   "properties": {
                                     "p95_milliseconds": {
                                       "description": "The p95 target request duration in milliseconds for the component.",
                                       "examples": [
                                         500
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "minimum": 1.0
                                     }
                                   }
                                 },
                                 "requests_per_second": {
                                   "description": "Settings for scaling the component based on requests per second.",
                                   "type": "object",
                                   "properties": {
                                     "per_instance": {
                                       "description": "The target number of requests per second per instance for the component.",
                                       "examples": [
                                         100
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             }
                           }
                         }
                       ]
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             60
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "port": {
                           "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             3
                           ],
                           "type": "integer",
                           "format": "int32"
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             45
                           ],
                           "type": "integer",
                           "format": "int32"
                         }
                       }
                     },
                     "http_port": {
                       "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field.",
                       "examples": [
                         3000
                       ],
                       "type": "integer",
                       "format": "int64",
                       "maximum": 65535.0,
                       "minimum": 1.0
                     },
                     "internal_ports": {
                       "description": "The ports on which this service will listen for internal traffic.",
                       "examples": [
                         [
                           80,
                           443
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "integer",
                         "format": "int64"
                       }
                     },
                     "liveness_health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             18
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 50.0,
                           "minimum": 1.0
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 3600.0,
                           "minimum": 0.0
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             10
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 300.0,
                           "minimum": 1.0
                         },
                         "port": {
                           "description": "The port on which the health check will be performed.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 1.0,
                           "minimum": 1.0
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 120.0,
                           "minimum": 1.0
                         }
                       }
                     },
                     "protocol": {
                       "description": "The protocol which the service uses to serve traffic on the http_port.\n\n- `HTTP`: The app is serving the HTTP protocol. Default.\n- `HTTP2`: The app is serving the HTTP/2 protocol. Currently, this needs to be implemented in the service by serving HTTP/2 cleartext (h2c).\n",
                       "examples": [
                         "HTTP"
                       ],
                       "type": "string",
                       "enum": [
                         "HTTP",
                         "HTTP2"
                       ]
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "drain_seconds": {
                           "description": "The number of seconds to wait between selecting a container instance for termination and issuing the TERM signal. Selecting a container instance for termination begins an asynchronous drain of new requests on upstream load-balancers. (Default 15)",
                           "examples": [
                             15
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 110.0,
                           "minimum": 1.0
                         },
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ]
             }
           },
           "static_sites": {
             "description": "Content which can be rendered to static web assets.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "catchall_document": {
                       "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set.",
                       "examples": [
                         "index.html"
                       ],
                       "type": "string"
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "error_document": {
                       "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one.",
                       "default": "404.html",
                       "examples": [
                         "error.html"
                       ],
                       "type": "string"
                     },
                     "index_document": {
                       "description": "The name of the index document to use when serving this static site. Default: index.html",
                       "default": "index.html",
                       "examples": [
                         "main.html"
                       ],
                       "type": "string"
                     },
                     "output_dir": {
                       "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`.",
                       "examples": [
                         "dist/"
                       ],
                       "type": "string"
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     }
                   }
                 }
               ],
               "required": [
                 "name"
               ]
             }
           },
           "vpc": {
             "readOnly": true,
             "type": "object",
             "properties": {
               "egress_ips": {
                 "title": "The egress ips associated with the VPC.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "properties": {
                     "ip": {
                       "examples": [
                         "10.0.0.1"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "id": {
                 "title": "The ID of the VPC.",
                 "examples": [
                   "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
                 ],
                 "type": "string"
               }
             }
           },
           "workers": {
             "description": "Workloads which do not expose publicly-accessible HTTP services.",
             "type": "array",
             "items": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "build_command": {
                       "description": "An optional build command to run while building this component from source.",
                       "examples": [
                         "npm run build"
                       ],
                       "type": "string"
                     },
                     "dockerfile_path": {
                       "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                       "examples": [
                         "path/to/Dockerfile"
                       ],
                       "type": "string"
                     },
                     "environment_slug": {
                       "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                       "examples": [
                         "node-js"
                       ],
                       "type": "string"
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "image": {
                       "type": "object",
                       "properties": {
                         "deploy_on_push": {
                           "type": "object",
                           "properties": {
                             "enabled": {
                               "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             }
                           }
                         },
                         "digest": {
                           "description": "The image digest. Cannot be specified if tag is provided.",
                           "examples": [
                             "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                           ],
                           "type": "string"
                         },
                         "registry": {
                           "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                           "examples": [
                             "registry.hub.docker.com"
                           ],
                           "type": "string"
                         },
                         "registry_credentials": {
                           "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                           "examples": [
                             "my-dockerhub-username:dckr_pat_the_access_token"
                           ],
                           "type": "string"
                         },
                         "registry_type": {
                           "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                           "examples": [
                             "DOCR"
                           ],
                           "type": "string",
                           "enum": [
                             "DOCKER_HUB",
                             "DOCR",
                             "GHCR"
                           ]
                         },
                         "repository": {
                           "description": "The repository name.",
                           "examples": [
                             "origin/master"
                           ],
                           "type": "string"
                         },
                         "tag": {
                           "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                           "default": "latest",
                           "examples": [
                             "latest"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "run_command": {
                       "description": "An optional run command to override the component's default.",
                       "examples": [
                         "bin/api"
                       ],
                       "type": "string"
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "instance_count": {
                       "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                       "default": 1,
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int64",
                       "minimum": 1.0
                     },
                     "instance_size_slug": {
                       "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "oneOf": [
                         {
                           "title": "Size slug",
                           "default": "apps-s-1vcpu-0.5gb",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "type": "string",
                           "enum": [
                             "apps-s-1vcpu-0.5gb",
                             "apps-s-1vcpu-1gb-fixed",
                             "apps-s-1vcpu-1gb",
                             "apps-s-1vcpu-2gb",
                             "apps-s-2vcpu-4gb",
                             "apps-d-1vcpu-0.5gb",
                             "apps-d-1vcpu-1gb",
                             "apps-d-1vcpu-2gb",
                             "apps-d-1vcpu-4gb",
                             "apps-d-2vcpu-4gb",
                             "apps-d-2vcpu-8gb",
                             "apps-d-4vcpu-8gb",
                             "apps-d-4vcpu-16gb",
                             "apps-d-8vcpu-32gb"
                           ]
                         },
                         {
                           "title": "Deprecated",
                           "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                           "deprecated": true,
                           "examples": [
                             "basic-xxs"
                           ],
                           "type": "string",
                           "enum": [
                             "basic-xxs",
                             "basic-xs",
                             "basic-s",
                             "basic-m",
                             "professional-xs",
                             "professional-s",
                             "professional-m",
                             "professional-1l",
                             "professional-l",
                             "professional-xl"
                           ]
                         }
                       ]
                     }
                   }
                 },
                 {
                   "type": "object",
                   "properties": {
                     "autoscaling": {
                       "description": "Configuration for automatically scaling this component based on metrics.",
                       "type": "object",
                       "properties": {
                         "max_instance_count": {
                           "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                           "examples": [
                             3
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "maximum": 250.0,
                           "minimum": 1.0
                         },
                         "metrics": {
                           "description": "The metrics that the component is scaled on.",
                           "type": "object",
                           "properties": {
                             "cpu": {
                               "description": "Settings for scaling the component based on CPU utilization.",
                               "type": "object",
                               "properties": {
                                 "percent": {
                                   "description": "The average target CPU utilization for the component.",
                                   "default": 80,
                                   "examples": [
                                     75
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "maximum": 100.0,
                                   "minimum": 1.0
                                 }
                               }
                             }
                           }
                         },
                         "min_instance_count": {
                           "description": "The minimum amount of instances for this component.",
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "minimum": 1.0
                         }
                       }
                     },
                     "liveness_health_check": {
                       "type": "object",
                       "properties": {
                         "failure_threshold": {
                           "description": "The number of failed health checks before considered unhealthy.",
                           "examples": [
                             18
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 50.0,
                           "minimum": 1.0
                         },
                         "http_path": {
                           "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                           "examples": [
                             "/health"
                           ],
                           "type": "string"
                         },
                         "initial_delay_seconds": {
                           "description": "The number of seconds to wait before beginning health checks.",
                           "examples": [
                             30
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 3600.0,
                           "minimum": 0.0
                         },
                         "period_seconds": {
                           "description": "The number of seconds to wait between health checks.",
                           "examples": [
                             10
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 300.0,
                           "minimum": 1.0
                         },
                         "port": {
                           "description": "The port on which the health check will be performed.",
                           "examples": [
                             80
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "success_threshold": {
                           "description": "The number of successful health checks before considered healthy.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 1.0,
                           "minimum": 1.0
                         },
                         "timeout_seconds": {
                           "description": "The number of seconds after which the check times out.",
                           "examples": [
                             1
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 120.0,
                           "minimum": 1.0
                         }
                       }
                     },
                     "termination": {
                       "type": "object",
                       "properties": {
                         "grace_period_seconds": {
                           "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                           "examples": [
                             120
                           ],
                           "type": "integer",
                           "format": "int32",
                           "maximum": 600.0,
                           "minimum": 1.0
                         }
                       }
                     }
                   }
                 }
               ],
               "required": [
                 "name"
               ]
             }
           }
         }
       },
       "static_sites": {
         "title": "Static Site components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this static site",
               "examples": [
                 "web"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this static site",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       },
       "tier_slug": {
         "title": "The current pricing tier slug of the deployment",
         "readOnly": true,
         "examples": [
           "basic"
         ],
         "type": "string"
       },
       "updated_at": {
         "title": "When the deployment was last updated",
         "examples": [
           "2020-07-28T18:00:00Z"
         ],
         "type": "string",
         "format": "date-time"
       },
       "workers": {
         "title": "Worker components that are part of this deployment",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "name": {
               "title": "The name of this worker",
               "examples": [
                 "queue-runner"
               ],
               "type": "string"
             },
             "source_commit_hash": {
               "title": "The commit hash of the repository that was used to build this worker",
               "examples": [
                 "54d4a727f457231062439895000d45437c7bb405"
               ],
               "type": "string"
             }
           }
         }
       }
     }
   },
   "last_deployment_created_at": {
     "title": "The creation time of the last deployment",
     "readOnly": true,
     "examples": [
       "2020-11-19T20:27:18Z"
     ],
     "type": "string",
     "format": "date-time"
   },
   "live_domain": {
     "title": "The live domain of the app",
     "readOnly": true,
     "examples": [
       "live_domain"
     ],
     "type": "string"
   },
   "live_url": {
     "title": "The live URL of the app",
     "readOnly": true,
     "examples": [
       "google.com"
     ],
     "type": "string"
   },
   "live_url_base": {
     "title": "The live URL base of the app, the URL excluding the path",
     "readOnly": true,
     "examples": [
       "digitalocean.com"
     ],
     "type": "string"
   },
   "owner_uuid": {
     "title": "The ID of the account to which the application belongs",
     "readOnly": true,
     "examples": [
       "4f6c71e2-1e90-4762-9fee-6cc4a0a9f2cf"
     ],
     "type": "string"
   },
   "pending_deployment": {
     "allOf": [
       {
         "description": "The most recent pending deployment. For CreateApp and UpdateApp transactions this is guaranteed to reflect the associated deployment."
       },
       {
         "title": "An app deployment",
         "type": "object",
         "properties": {
           "cause": {
             "title": "What caused this deployment to be created",
             "examples": [
               "commit 9a4df0b pushed to github/digitalocean/sample-golang"
             ],
             "type": "string"
           },
           "cloned_from": {
             "title": "The ID of a previous deployment that this deployment was cloned from",
             "examples": [
               "3aa4d20e-5527-4c00-b496-601fbd22520a"
             ],
             "type": "string"
           },
           "created_at": {
             "title": "The creation time of the deployment",
             "examples": [
               "2020-07-28T18:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "functions": {
             "title": "Functions components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this functions component",
                   "examples": [
                     "my-functions-component"
                   ],
                   "type": "string"
                 },
                 "namespace": {
                   "description": "The namespace where the functions are deployed.",
                   "examples": [
                     "ap-b2a93513-8d9b-4223-9d61-5e7272c81c32"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "description": "The commit hash of the repository that was used to build this functions component.",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "id": {
             "title": "The ID of the deployment",
             "examples": [
               "b6bdf840-2854-4f87-a36c-5f231c617c84"
             ],
             "type": "string"
           },
           "jobs": {
             "title": "Job components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this job",
                   "examples": [
                     "migrate-db"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this job",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "phase": {
             "default": "UNKNOWN",
             "examples": [
               "ACTIVE"
             ],
             "type": "string",
             "enum": [
               "UNKNOWN",
               "PENDING_BUILD",
               "BUILDING",
               "PENDING_DEPLOY",
               "DEPLOYING",
               "ACTIVE",
               "SUPERSEDED",
               "ERROR",
               "CANCELED"
             ]
           },
           "phase_last_updated_at": {
             "title": "When the deployment phase was last updated",
             "examples": [
               "0001-01-01T00:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "progress": {
             "type": "object",
             "properties": {
               "error_steps": {
                 "title": "Number of unsuccessful steps",
                 "examples": [
                   3
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "pending_steps": {
                 "title": "Number of pending steps",
                 "examples": [
                   2
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "running_steps": {
                 "title": "Number of currently running steps",
                 "examples": [
                   2
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "steps": {
                 "title": "The deployment's steps",
                 "type": "array",
                 "items": {
                   "title": "A step that is run as part of the deployment's lifecycle",
                   "type": "object",
                   "properties": {
                     "component_name": {
                       "title": "The component name that this step is associated with",
                       "examples": [
                         "component"
                       ],
                       "type": "string"
                     },
                     "ended_at": {
                       "title": "The end time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "message_base": {
                       "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                       "examples": [
                         "Building service"
                       ],
                       "type": "string"
                     },
                     "name": {
                       "title": "The name of this step",
                       "examples": [
                         "example_step"
                       ],
                       "type": "string"
                     },
                     "reason": {
                       "type": "object",
                       "properties": {
                         "code": {
                           "title": "The error code",
                           "examples": [
                             "Title of Error"
                           ],
                           "type": "string"
                         },
                         "message": {
                           "title": "The error message",
                           "examples": [
                             "This is an error"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "started_at": {
                       "title": "The start time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "status": {
                       "default": "UNKNOWN",
                       "examples": [
                         "SUCCESS"
                       ],
                       "type": "string",
                       "enum": [
                         "UNKNOWN",
                         "PENDING",
                         "RUNNING",
                         "ERROR",
                         "SUCCESS"
                       ]
                     },
                     "steps": {
                       "title": "Child steps of this step",
                       "type": "array",
                       "items": {
                         "type": "object"
                       }
                     }
                   }
                 }
               },
               "success_steps": {
                 "title": "Number of successful steps",
                 "examples": [
                   4
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "summary_steps": {
                 "title": "A flattened summary of the steps",
                 "type": "array",
                 "items": {
                   "title": "A step that is run as part of the deployment's lifecycle",
                   "type": "object",
                   "properties": {
                     "component_name": {
                       "title": "The component name that this step is associated with",
                       "examples": [
                         "component"
                       ],
                       "type": "string"
                     },
                     "ended_at": {
                       "title": "The end time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "message_base": {
                       "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                       "examples": [
                         "Building service"
                       ],
                       "type": "string"
                     },
                     "name": {
                       "title": "The name of this step",
                       "examples": [
                         "example_step"
                       ],
                       "type": "string"
                     },
                     "reason": {
                       "type": "object",
                       "properties": {
                         "code": {
                           "title": "The error code",
                           "examples": [
                             "Title of Error"
                           ],
                           "type": "string"
                         },
                         "message": {
                           "title": "The error message",
                           "examples": [
                             "This is an error"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "started_at": {
                       "title": "The start time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "status": {
                       "default": "UNKNOWN",
                       "examples": [
                         "SUCCESS"
                       ],
                       "type": "string",
                       "enum": [
                         "UNKNOWN",
                         "PENDING",
                         "RUNNING",
                         "ERROR",
                         "SUCCESS"
                       ]
                     },
                     "steps": {
                       "title": "Child steps of this step",
                       "type": "array",
                       "items": {
                         "type": "object"
                       }
                     }
                   }
                 }
               },
               "total_steps": {
                 "title": "Total number of steps",
                 "examples": [
                   5
                 ],
                 "type": "integer",
                 "format": "int32"
               }
             }
           },
           "services": {
             "title": "Service components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this service",
                   "examples": [
                     "web"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this service",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "spec": {
             "title": "AppSpec",
             "description": "The desired configuration of an application.",
             "type": "object",
             "required": [
               "name"
             ],
             "properties": {
               "databases": {
                 "description": "Database instances which can provide persistence to workloads within the\napplication.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "cluster_name": {
                       "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned.",
                       "examples": [
                         "cluster_name"
                       ],
                       "type": "string"
                     },
                     "db_name": {
                       "description": "The name of the MySQL or PostgreSQL database to configure.",
                       "examples": [
                         "my_db"
                       ],
                       "type": "string"
                     },
                     "db_user": {
                       "description": "The name of the MySQL or PostgreSQL user to configure.",
                       "examples": [
                         "superuser"
                       ],
                       "type": "string"
                     },
                     "engine": {
                       "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Caching\n- MONGODB: MongoDB\n- KAFKA: Kafka\n- OPENSEARCH: OpenSearch\n- VALKEY: ValKey",
                       "default": "UNSET",
                       "examples": [
                         "PG"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSET",
                         "MYSQL",
                         "PG",
                         "REDIS",
                         "MONGODB",
                         "KAFKA",
                         "OPENSEARCH",
                         "VALKEY"
                       ]
                     },
                     "name": {
                       "description": "The database's name. The name must be unique across all components within the same app and cannot use capital letters.",
                       "examples": [
                         "prod-db"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "production": {
                       "description": "Whether this is a production or dev database.",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "version": {
                       "description": "The version of the database engine",
                       "examples": [
                         "12"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "disable_edge_cache": {
                 "description": "If set to `true`, the app will **not** be cached at the edge (CDN). Enable this option if you want to manage CDN configuration yourself—whether by using an external CDN provider or by handling static content and caching within your app. This setting is also recommended for apps that require real-time data or serve dynamic content, such as those using Server-Sent Events (SSE) over GET, or hosting an MCP (Model Context Protocol) Server that utilizes SSE.  \n**Note:** This feature is not available for static site components.  \nFor more information, see [Disable CDN Cache](https://docs.digitalocean.com/products/app-platform/how-to/cache-content/#disable-cdn-cache).",
                 "default": false,
                 "type": "boolean"
               },
               "disable_email_obfuscation": {
                 "description": "If set to `true`, email addresses in the app will not be obfuscated. This is\nuseful for apps that require email addresses to be visible (in the HTML markup).",
                 "default": false,
                 "type": "boolean"
               },
               "domains": {
                 "description": "A set of hostnames where the application will be available.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "domain"
                   ],
                   "properties": {
                     "domain": {
                       "description": "The hostname for the domain",
                       "examples": [
                         "app.example.com"
                       ],
                       "type": "string",
                       "maxLength": 253,
                       "minLength": 4,
                       "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
                     },
                     "minimum_tls_version": {
                       "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
                       "examples": [
                         "1.3"
                       ],
                       "type": "string",
                       "enum": [
                         "1.2",
                         "1.3"
                       ],
                       "maxLength": 3,
                       "minLength": 3
                     },
                     "type": {
                       "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
                       "default": "UNSPECIFIED",
                       "examples": [
                         "DEFAULT"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSPECIFIED",
                         "DEFAULT",
                         "PRIMARY",
                         "ALIAS"
                       ]
                     },
                     "wildcard": {
                       "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "zone": {
                       "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
                       "examples": [
                         "example.com"
                       ],
                       "type": "string",
                       "format": "hostname"
                     }
                   }
                 }
               },
               "egress": {
                 "description": "Specification for app egress configurations.",
                 "type": "object",
                 "properties": {
                   "type": {
                     "title": "The app egress type.",
                     "default": "AUTOASSIGN",
                     "examples": [
                       "AUTOASSIGN"
                     ],
                     "type": "string",
                     "enum": [
                       "AUTOASSIGN",
                       "DEDICATED_IP"
                     ]
                   }
                 }
               },
               "enhanced_threat_control_enabled": {
                 "description": "If set to `true`, suspicious requests will go through additional security checks to help mitigate layer 7 DDoS attacks.",
                 "default": false,
                 "type": "boolean"
               },
               "functions": {
                 "description": "Workloads which expose publicly-accessible HTTP services via Functions Components.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "alerts": {
                       "type": "array",
                       "items": {
                         "type": "object",
                         "properties": {
                           "disabled": {
                             "description": "Is the alert disabled?",
                             "examples": [
                               false
                             ],
                             "type": "boolean"
                           },
                           "operator": {
                             "default": "UNSPECIFIED_OPERATOR",
                             "examples": [
                               "GREATER_THAN"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_OPERATOR",
                               "GREATER_THAN",
                               "LESS_THAN"
                             ]
                           },
                           "rule": {
                             "default": "UNSPECIFIED_RULE",
                             "examples": [
                               "CPU_UTILIZATION"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_RULE",
                               "CPU_UTILIZATION",
                               "MEM_UTILIZATION",
                               "RESTART_COUNT",
                               "DEPLOYMENT_FAILED",
                               "DEPLOYMENT_LIVE",
                               "DOMAIN_FAILED",
                               "DOMAIN_LIVE",
                               "AUTOSCALE_FAILED",
                               "AUTOSCALE_SUCCEEDED",
                               "FUNCTIONS_ACTIVATION_COUNT",
                               "FUNCTIONS_AVERAGE_DURATION_MS",
                               "FUNCTIONS_ERROR_RATE_PER_MINUTE",
                               "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
                               "FUNCTIONS_ERROR_COUNT",
                               "FUNCTIONS_GB_RATE_PER_SECOND",
                               "REQUESTS_PER_SECOND",
                               "REQUEST_DURATION_P95_MS"
                             ]
                           },
                           "value": {
                             "description": "Threshold value for alert",
                             "examples": [
                               2.32
                             ],
                             "type": "number",
                             "format": "float"
                           },
                           "window": {
                             "default": "UNSPECIFIED_WINDOW",
                             "examples": [
                               "FIVE_MINUTES"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_WINDOW",
                               "FIVE_MINUTES",
                               "TEN_MINUTES",
                               "THIRTY_MINUTES",
                               "ONE_HOUR"
                             ]
                           }
                         }
                       }
                     },
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "ingress": {
                 "description": "Specification for app ingress configurations.",
                 "type": "object",
                 "properties": {
                   "custom_error_page_url": {
                     "description": "Optional HTTPS URL of a custom error page to display when the app is unreachable. The\npage is shown in a full-viewport iframe. The target must allow framing: avoid\n`X-Frame-Options: DENY` and a restrictive `Content-Security-Policy` `frame-ancestors`\nthat blocks the platform. If omitted, the default platform error page is used.",
                     "examples": [
                       "https://status.example.com/app-unavailable"
                     ],
                     "type": "string",
                     "format": "uri",
                     "pattern": "^https://"
                   },
                   "rules": {
                     "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects.",
                     "type": "array",
                     "items": {
                       "type": "object",
                       "properties": {
                         "component": {
                           "description": "The component to route to. Only one of `component` or `redirect` may be set.",
                           "type": "object",
                           "required": [
                             "name"
                           ],
                           "properties": {
                             "name": {
                               "description": "The name of the component to route to.",
                               "examples": [
                                 "web"
                               ],
                               "type": "string"
                             },
                             "preserve_path_prefix": {
                               "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`.",
                               "examples": [
                                 "true"
                               ],
                               "type": "string"
                             },
                             "rewrite": {
                               "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`.",
                               "examples": [
                                 "/api/v1/"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "cors": {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "match": {
                           "description": "The match configuration for the rule.",
                           "type": "object",
                           "properties": {
                             "authority": {
                               "description": "The authority to match on.",
                               "type": "object",
                               "required": [
                                 "exact"
                               ],
                               "properties": {
                                 "exact": {
                                   "description": "Exact string match. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                   "examples": [
                                     "example.com"
                                   ],
                                   "type": [
                                     "string",
                                     "null"
                                   ],
                                   "maxLength": 256
                                 }
                               }
                             },
                             "path": {
                               "description": "The path to match on.",
                               "type": "object",
                               "required": [
                                 "prefix"
                               ],
                               "properties": {
                                 "prefix": {
                                   "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`.",
                                   "examples": [
                                     "/api"
                                   ],
                                   "type": [
                                     "string",
                                     "null"
                                   ],
                                   "maxLength": 256
                                 }
                               }
                             }
                           }
                         },
                         "redirect": {
                           "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set.",
                           "type": "object",
                           "properties": {
                             "authority": {
                               "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port.",
                               "examples": [
                                 "example.com"
                               ],
                               "type": "string"
                             },
                             "port": {
                               "description": "The port to redirect to.",
                               "examples": [
                                 443
                               ],
                               "type": "integer",
                               "format": "int64"
                             },
                             "redirect_code": {
                               "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308.",
                               "examples": [
                                 302
                               ],
                               "type": "integer",
                               "format": "int64"
                             },
                             "scheme": {
                               "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`.",
                               "examples": [
                                 "https"
                               ],
                               "type": "string"
                             },
                             "uri": {
                               "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched.",
                               "examples": [
                                 "/about"
                               ],
                               "type": "string"
                             }
                           }
                         }
                       }
                     }
                   }
                 }
               },
               "jobs": {
                 "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "kind": {
                           "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy.",
                           "default": "UNSPECIFIED",
                           "examples": [
                             "PRE_DEPLOY"
                           ],
                           "type": "string",
                           "enum": [
                             "UNSPECIFIED",
                             "PRE_DEPLOY",
                             "POST_DEPLOY",
                             "FAILED_DEPLOY"
                           ]
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
               },
               "maintenance": {
                 "description": "Specification to configure maintenance settings for the app, such as maintenance mode and archiving the app.",
                 "type": "object",
                 "properties": {
                   "archive": {
                     "description": "Indicates whether the app should be archived. Setting this to true implies that enabled is set to true.",
                     "examples": [
                       true
                     ],
                     "type": "boolean"
                   },
                   "enabled": {
                     "description": "Indicates whether maintenance mode should be enabled for the app.",
                     "examples": [
                       true
                     ],
                     "type": "boolean"
                   },
                   "offline_page_url": {
                     "description": "A custom offline page to display when maintenance mode is enabled or the app is archived.",
                     "examples": [
                       "https://example.com/offline.html"
                     ],
                     "type": "string"
                   }
                 }
               },
               "name": {
                 "description": "The name of the app. Must be unique across all apps in the same account.",
                 "examples": [
                   "web-app-01"
                 ],
                 "type": "string",
                 "maxLength": 32,
                 "minLength": 2,
                 "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
               },
               "region": {
                 "description": "The slug form of the geographical origin of the app. Default: `nearest available`",
                 "examples": [
                   "nyc"
                 ],
                 "type": "string",
                 "enum": [
                   "atl",
                   "nyc",
                   "sfo",
                   "tor",
                   "ams",
                   "fra",
                   "lon",
                   "blr",
                   "sgp",
                   "syd"
                 ]
               },
               "services": {
                 "description": "Workloads which expose publicly-accessible HTTP services.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "autoscaling": {
                           "allOf": [
                             {
                               "description": "Configuration for automatically scaling this component based on metrics.",
                               "type": "object",
                               "properties": {
                                 "max_instance_count": {
                                   "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                                   "examples": [
                                     3
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "maximum": 250.0,
                                   "minimum": 1.0
                                 },
                                 "metrics": {
                                   "description": "The metrics that the component is scaled on.",
                                   "type": "object",
                                   "properties": {
                                     "cpu": {
                                       "description": "Settings for scaling the component based on CPU utilization.",
                                       "type": "object",
                                       "properties": {
                                         "percent": {
                                           "description": "The average target CPU utilization for the component.",
                                           "default": 80,
                                           "examples": [
                                             75
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "maximum": 100.0,
                                           "minimum": 1.0
                                         }
                                       }
                                     }
                                   }
                                 },
                                 "min_instance_count": {
                                   "description": "The minimum amount of instances for this component.",
                                   "examples": [
                                     2
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "minimum": 1.0
                                 }
                               }
                             },
                             {
                               "type": "object",
                               "properties": {
                                 "metrics": {
                                   "type": "object",
                                   "properties": {
                                     "request_duration": {
                                       "description": "Settings for scaling the component based on request duration.",
                                       "type": "object",
                                       "properties": {
                                         "p95_milliseconds": {
                                           "description": "The p95 target request duration in milliseconds for the component.",
                                           "examples": [
                                             500
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "minimum": 1.0
                                         }
                                       }
                                     },
                                     "requests_per_second": {
                                       "description": "Settings for scaling the component based on requests per second.",
                                       "type": "object",
                                       "properties": {
                                         "per_instance": {
                                           "description": "The target number of requests per second per instance for the component.",
                                           "examples": [
                                             100
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "minimum": 1.0
                                         }
                                       }
                                     }
                                   }
                                 }
                               }
                             }
                           ]
                         },
                         "cors": {
                           "allOf": [
                             {
                               "type": "object",
                               "properties": {
                                 "allow_credentials": {
                                   "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                                   "examples": [
                                     false
                                   ],
                                   "type": "boolean"
                                 },
                                 "allow_headers": {
                                   "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Type",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_methods": {
                                   "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                                   "examples": [
                                     [
                                       "GET",
                                       "OPTIONS",
                                       "POST",
                                       "PUT",
                                       "PATCH",
                                       "DELETE"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_origins": {
                                   "description": "The set of allowed CORS origins.",
                                   "examples": [
                                     [
                                       {
                                         "exact": "https://www.example.com"
                                       },
                                       {
                                         "regex": "^.*example.com"
                                       }
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "object",
                                     "properties": {
                                       "exact": {
                                         "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "prefix": {
                                         "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                         "deprecated": true,
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "regex": {
                                         "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                         "examples": [
                                           "^.*example.com"
                                         ],
                                         "type": "string",
                                         "maxLength": 256,
                                         "minLength": 1
                                       }
                                     }
                                   }
                                 },
                                 "expose_headers": {
                                   "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Encoding",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "max_age": {
                                   "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                                   "examples": [
                                     "5h30m"
                                   ],
                                   "type": "string"
                                 }
                               }
                             },
                             {
                               "description": "(Deprecated - Use Ingress Rules instead)."
                             },
                             {
                               "deprecated": true
                             }
                           ]
                         },
                         "health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 60
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "port": {
                               "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 45
                               ],
                               "type": "integer",
                               "format": "int32"
                             }
                           }
                         },
                         "http_port": {
                           "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field.",
                           "examples": [
                             3000
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "internal_ports": {
                           "description": "The ports on which this service will listen for internal traffic.",
                           "examples": [
                             [
                               80,
                               443
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "integer",
                             "format": "int64"
                           }
                         },
                         "liveness_health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 18
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 50.0,
                               "minimum": 1.0
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 3600.0,
                               "minimum": 0.0
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 10
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 300.0,
                               "minimum": 1.0
                             },
                             "port": {
                               "description": "The port on which the health check will be performed.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 1.0,
                               "minimum": 1.0
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 120.0,
                               "minimum": 1.0
                             }
                           }
                         },
                         "protocol": {
                           "description": "The protocol which the service uses to serve traffic on the http_port.\n\n- `HTTP`: The app is serving the HTTP protocol. Default.\n- `HTTP2`: The app is serving the HTTP/2 protocol. Currently, this needs to be implemented in the service by serving HTTP/2 cleartext (h2c).\n",
                           "examples": [
                             "HTTP"
                           ],
                           "type": "string",
                           "enum": [
                             "HTTP",
                             "HTTP2"
                           ]
                         },
                         "routes": {
                           "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                           "deprecated": true,
                           "type": "array",
                           "items": {
                             "title": "A criterion for routing HTTP traffic to a component.",
                             "type": "object",
                             "properties": {
                               "path": {
                                 "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                                 "examples": [
                                   "/api"
                                 ],
                                 "type": "string"
                               },
                               "preserve_path_prefix": {
                                 "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                                 "examples": [
                                   true
                                 ],
                                 "type": "boolean"
                               }
                             }
                           }
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "drain_seconds": {
                               "description": "The number of seconds to wait between selecting a container instance for termination and issuing the TERM signal. Selecting a container instance for termination begins an asynchronous drain of new requests on upstream load-balancers. (Default 15)",
                               "examples": [
                                 15
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 110.0,
                               "minimum": 1.0
                             },
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
               },
               "static_sites": {
                 "description": "Content which can be rendered to static web assets.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "catchall_document": {
                           "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set.",
                           "examples": [
                             "index.html"
                           ],
                           "type": "string"
                         },
                         "cors": {
                           "allOf": [
                             {
                               "type": "object",
                               "properties": {
                                 "allow_credentials": {
                                   "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                                   "examples": [
                                     false
                                   ],
                                   "type": "boolean"
                                 },
                                 "allow_headers": {
                                   "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Type",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_methods": {
                                   "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                                   "examples": [
                                     [
                                       "GET",
                                       "OPTIONS",
                                       "POST",
                                       "PUT",
                                       "PATCH",
                                       "DELETE"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_origins": {
                                   "description": "The set of allowed CORS origins.",
                                   "examples": [
                                     [
                                       {
                                         "exact": "https://www.example.com"
                                       },
                                       {
                                         "regex": "^.*example.com"
                                       }
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "object",
                                     "properties": {
                                       "exact": {
                                         "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "prefix": {
                                         "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                         "deprecated": true,
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "regex": {
                                         "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                         "examples": [
                                           "^.*example.com"
                                         ],
                                         "type": "string",
                                         "maxLength": 256,
                                         "minLength": 1
                                       }
                                     }
                                   }
                                 },
                                 "expose_headers": {
                                   "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Encoding",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "max_age": {
                                   "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                                   "examples": [
                                     "5h30m"
                                   ],
                                   "type": "string"
                                 }
                               }
                             },
                             {
                               "description": "(Deprecated - Use Ingress Rules instead)."
                             },
                             {
                               "deprecated": true
                             }
                           ]
                         },
                         "error_document": {
                           "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one.",
                           "default": "404.html",
                           "examples": [
                             "error.html"
                           ],
                           "type": "string"
                         },
                         "index_document": {
                           "description": "The name of the index document to use when serving this static site. Default: index.html",
                           "default": "index.html",
                           "examples": [
                             "main.html"
                           ],
                           "type": "string"
                         },
                         "output_dir": {
                           "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`.",
                           "examples": [
                             "dist/"
                           ],
                           "type": "string"
                         },
                         "routes": {
                           "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                           "deprecated": true,
                           "type": "array",
                           "items": {
                             "title": "A criterion for routing HTTP traffic to a component.",
                             "type": "object",
                             "properties": {
                               "path": {
                                 "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                                 "examples": [
                                   "/api"
                                 ],
                                 "type": "string"
                               },
                               "preserve_path_prefix": {
                                 "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                                 "examples": [
                                   true
                                 ],
                                 "type": "boolean"
                               }
                             }
                           }
                         }
                       }
                     }
                   ],
                   "required": [
                     "name"
                   ]
                 }
               },
               "vpc": {
                 "readOnly": true,
                 "type": "object",
                 "properties": {
                   "egress_ips": {
                     "title": "The egress ips associated with the VPC.",
                     "type": "array",
                     "items": {
                       "type": "object",
                       "properties": {
                         "ip": {
                           "examples": [
                             "10.0.0.1"
                           ],
                           "type": "string"
                         }
                       }
                     }
                   },
                   "id": {
                     "title": "The ID of the VPC.",
                     "examples": [
                       "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
                     ],
                     "type": "string"
                   }
                 }
               },
               "workers": {
                 "description": "Workloads which do not expose publicly-accessible HTTP services.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "autoscaling": {
                           "description": "Configuration for automatically scaling this component based on metrics.",
                           "type": "object",
                           "properties": {
                             "max_instance_count": {
                               "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "maximum": 250.0,
                               "minimum": 1.0
                             },
                             "metrics": {
                               "description": "The metrics that the component is scaled on.",
                               "type": "object",
                               "properties": {
                                 "cpu": {
                                   "description": "Settings for scaling the component based on CPU utilization.",
                                   "type": "object",
                                   "properties": {
                                     "percent": {
                                       "description": "The average target CPU utilization for the component.",
                                       "default": 80,
                                       "examples": [
                                         75
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "maximum": 100.0,
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             },
                             "min_instance_count": {
                               "description": "The minimum amount of instances for this component.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "minimum": 1.0
                             }
                           }
                         },
                         "liveness_health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 18
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 50.0,
                               "minimum": 1.0
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 3600.0,
                               "minimum": 0.0
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 10
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 300.0,
                               "minimum": 1.0
                             },
                             "port": {
                               "description": "The port on which the health check will be performed.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 1.0,
                               "minimum": 1.0
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 120.0,
                               "minimum": 1.0
                             }
                           }
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ],
                   "required": [
                     "name"
                   ]
                 }
               }
             }
           },
           "static_sites": {
             "title": "Static Site components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this static site",
                   "examples": [
                     "web"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this static site",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "tier_slug": {
             "title": "The current pricing tier slug of the deployment",
             "readOnly": true,
             "examples": [
               "basic"
             ],
             "type": "string"
           },
           "updated_at": {
             "title": "When the deployment was last updated",
             "examples": [
               "2020-07-28T18:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "workers": {
             "title": "Worker components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this worker",
                   "examples": [
                     "queue-runner"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this worker",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           }
         }
       }
     ]
   },
   "pinned_deployment": {
     "allOf": [
       {
         "description": "The deployment that the app is pinned to."
       },
       {
         "title": "An app deployment",
         "type": "object",
         "properties": {
           "cause": {
             "title": "What caused this deployment to be created",
             "examples": [
               "commit 9a4df0b pushed to github/digitalocean/sample-golang"
             ],
             "type": "string"
           },
           "cloned_from": {
             "title": "The ID of a previous deployment that this deployment was cloned from",
             "examples": [
               "3aa4d20e-5527-4c00-b496-601fbd22520a"
             ],
             "type": "string"
           },
           "created_at": {
             "title": "The creation time of the deployment",
             "examples": [
               "2020-07-28T18:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "functions": {
             "title": "Functions components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this functions component",
                   "examples": [
                     "my-functions-component"
                   ],
                   "type": "string"
                 },
                 "namespace": {
                   "description": "The namespace where the functions are deployed.",
                   "examples": [
                     "ap-b2a93513-8d9b-4223-9d61-5e7272c81c32"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "description": "The commit hash of the repository that was used to build this functions component.",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "id": {
             "title": "The ID of the deployment",
             "examples": [
               "b6bdf840-2854-4f87-a36c-5f231c617c84"
             ],
             "type": "string"
           },
           "jobs": {
             "title": "Job components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this job",
                   "examples": [
                     "migrate-db"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this job",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "phase": {
             "default": "UNKNOWN",
             "examples": [
               "ACTIVE"
             ],
             "type": "string",
             "enum": [
               "UNKNOWN",
               "PENDING_BUILD",
               "BUILDING",
               "PENDING_DEPLOY",
               "DEPLOYING",
               "ACTIVE",
               "SUPERSEDED",
               "ERROR",
               "CANCELED"
             ]
           },
           "phase_last_updated_at": {
             "title": "When the deployment phase was last updated",
             "examples": [
               "0001-01-01T00:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "progress": {
             "type": "object",
             "properties": {
               "error_steps": {
                 "title": "Number of unsuccessful steps",
                 "examples": [
                   3
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "pending_steps": {
                 "title": "Number of pending steps",
                 "examples": [
                   2
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "running_steps": {
                 "title": "Number of currently running steps",
                 "examples": [
                   2
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "steps": {
                 "title": "The deployment's steps",
                 "type": "array",
                 "items": {
                   "title": "A step that is run as part of the deployment's lifecycle",
                   "type": "object",
                   "properties": {
                     "component_name": {
                       "title": "The component name that this step is associated with",
                       "examples": [
                         "component"
                       ],
                       "type": "string"
                     },
                     "ended_at": {
                       "title": "The end time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "message_base": {
                       "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                       "examples": [
                         "Building service"
                       ],
                       "type": "string"
                     },
                     "name": {
                       "title": "The name of this step",
                       "examples": [
                         "example_step"
                       ],
                       "type": "string"
                     },
                     "reason": {
                       "type": "object",
                       "properties": {
                         "code": {
                           "title": "The error code",
                           "examples": [
                             "Title of Error"
                           ],
                           "type": "string"
                         },
                         "message": {
                           "title": "The error message",
                           "examples": [
                             "This is an error"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "started_at": {
                       "title": "The start time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "status": {
                       "default": "UNKNOWN",
                       "examples": [
                         "SUCCESS"
                       ],
                       "type": "string",
                       "enum": [
                         "UNKNOWN",
                         "PENDING",
                         "RUNNING",
                         "ERROR",
                         "SUCCESS"
                       ]
                     },
                     "steps": {
                       "title": "Child steps of this step",
                       "type": "array",
                       "items": {
                         "type": "object"
                       }
                     }
                   }
                 }
               },
               "success_steps": {
                 "title": "Number of successful steps",
                 "examples": [
                   4
                 ],
                 "type": "integer",
                 "format": "int32"
               },
               "summary_steps": {
                 "title": "A flattened summary of the steps",
                 "type": "array",
                 "items": {
                   "title": "A step that is run as part of the deployment's lifecycle",
                   "type": "object",
                   "properties": {
                     "component_name": {
                       "title": "The component name that this step is associated with",
                       "examples": [
                         "component"
                       ],
                       "type": "string"
                     },
                     "ended_at": {
                       "title": "The end time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "message_base": {
                       "description": "The base of a human-readable description of the step intended to be combined with the component name for presentation. For example:\n\n`message_base` = \"Building service\"\n`component_name` = \"api\"",
                       "examples": [
                         "Building service"
                       ],
                       "type": "string"
                     },
                     "name": {
                       "title": "The name of this step",
                       "examples": [
                         "example_step"
                       ],
                       "type": "string"
                     },
                     "reason": {
                       "type": "object",
                       "properties": {
                         "code": {
                           "title": "The error code",
                           "examples": [
                             "Title of Error"
                           ],
                           "type": "string"
                         },
                         "message": {
                           "title": "The error message",
                           "examples": [
                             "This is an error"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "started_at": {
                       "title": "The start time of this step",
                       "examples": [
                         "2020-11-19T20:27:18Z"
                       ],
                       "type": "string",
                       "format": "date-time"
                     },
                     "status": {
                       "default": "UNKNOWN",
                       "examples": [
                         "SUCCESS"
                       ],
                       "type": "string",
                       "enum": [
                         "UNKNOWN",
                         "PENDING",
                         "RUNNING",
                         "ERROR",
                         "SUCCESS"
                       ]
                     },
                     "steps": {
                       "title": "Child steps of this step",
                       "type": "array",
                       "items": {
                         "type": "object"
                       }
                     }
                   }
                 }
               },
               "total_steps": {
                 "title": "Total number of steps",
                 "examples": [
                   5
                 ],
                 "type": "integer",
                 "format": "int32"
               }
             }
           },
           "services": {
             "title": "Service components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this service",
                   "examples": [
                     "web"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this service",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "spec": {
             "title": "AppSpec",
             "description": "The desired configuration of an application.",
             "type": "object",
             "required": [
               "name"
             ],
             "properties": {
               "databases": {
                 "description": "Database instances which can provide persistence to workloads within the\napplication.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "cluster_name": {
                       "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned.",
                       "examples": [
                         "cluster_name"
                       ],
                       "type": "string"
                     },
                     "db_name": {
                       "description": "The name of the MySQL or PostgreSQL database to configure.",
                       "examples": [
                         "my_db"
                       ],
                       "type": "string"
                     },
                     "db_user": {
                       "description": "The name of the MySQL or PostgreSQL user to configure.",
                       "examples": [
                         "superuser"
                       ],
                       "type": "string"
                     },
                     "engine": {
                       "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Caching\n- MONGODB: MongoDB\n- KAFKA: Kafka\n- OPENSEARCH: OpenSearch\n- VALKEY: ValKey",
                       "default": "UNSET",
                       "examples": [
                         "PG"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSET",
                         "MYSQL",
                         "PG",
                         "REDIS",
                         "MONGODB",
                         "KAFKA",
                         "OPENSEARCH",
                         "VALKEY"
                       ]
                     },
                     "name": {
                       "description": "The database's name. The name must be unique across all components within the same app and cannot use capital letters.",
                       "examples": [
                         "prod-db"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "production": {
                       "description": "Whether this is a production or dev database.",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "version": {
                       "description": "The version of the database engine",
                       "examples": [
                         "12"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "disable_edge_cache": {
                 "description": "If set to `true`, the app will **not** be cached at the edge (CDN). Enable this option if you want to manage CDN configuration yourself—whether by using an external CDN provider or by handling static content and caching within your app. This setting is also recommended for apps that require real-time data or serve dynamic content, such as those using Server-Sent Events (SSE) over GET, or hosting an MCP (Model Context Protocol) Server that utilizes SSE.  \n**Note:** This feature is not available for static site components.  \nFor more information, see [Disable CDN Cache](https://docs.digitalocean.com/products/app-platform/how-to/cache-content/#disable-cdn-cache).",
                 "default": false,
                 "type": "boolean"
               },
               "disable_email_obfuscation": {
                 "description": "If set to `true`, email addresses in the app will not be obfuscated. This is\nuseful for apps that require email addresses to be visible (in the HTML markup).",
                 "default": false,
                 "type": "boolean"
               },
               "domains": {
                 "description": "A set of hostnames where the application will be available.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "domain"
                   ],
                   "properties": {
                     "domain": {
                       "description": "The hostname for the domain",
                       "examples": [
                         "app.example.com"
                       ],
                       "type": "string",
                       "maxLength": 253,
                       "minLength": 4,
                       "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
                     },
                     "minimum_tls_version": {
                       "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
                       "examples": [
                         "1.3"
                       ],
                       "type": "string",
                       "enum": [
                         "1.2",
                         "1.3"
                       ],
                       "maxLength": 3,
                       "minLength": 3
                     },
                     "type": {
                       "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
                       "default": "UNSPECIFIED",
                       "examples": [
                         "DEFAULT"
                       ],
                       "type": "string",
                       "enum": [
                         "UNSPECIFIED",
                         "DEFAULT",
                         "PRIMARY",
                         "ALIAS"
                       ]
                     },
                     "wildcard": {
                       "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "zone": {
                       "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
                       "examples": [
                         "example.com"
                       ],
                       "type": "string",
                       "format": "hostname"
                     }
                   }
                 }
               },
               "egress": {
                 "description": "Specification for app egress configurations.",
                 "type": "object",
                 "properties": {
                   "type": {
                     "title": "The app egress type.",
                     "default": "AUTOASSIGN",
                     "examples": [
                       "AUTOASSIGN"
                     ],
                     "type": "string",
                     "enum": [
                       "AUTOASSIGN",
                       "DEDICATED_IP"
                     ]
                   }
                 }
               },
               "enhanced_threat_control_enabled": {
                 "description": "If set to `true`, suspicious requests will go through additional security checks to help mitigate layer 7 DDoS attacks.",
                 "default": false,
                 "type": "boolean"
               },
               "functions": {
                 "description": "Workloads which expose publicly-accessible HTTP services via Functions Components.",
                 "type": "array",
                 "items": {
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "alerts": {
                       "type": "array",
                       "items": {
                         "type": "object",
                         "properties": {
                           "disabled": {
                             "description": "Is the alert disabled?",
                             "examples": [
                               false
                             ],
                             "type": "boolean"
                           },
                           "operator": {
                             "default": "UNSPECIFIED_OPERATOR",
                             "examples": [
                               "GREATER_THAN"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_OPERATOR",
                               "GREATER_THAN",
                               "LESS_THAN"
                             ]
                           },
                           "rule": {
                             "default": "UNSPECIFIED_RULE",
                             "examples": [
                               "CPU_UTILIZATION"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_RULE",
                               "CPU_UTILIZATION",
                               "MEM_UTILIZATION",
                               "RESTART_COUNT",
                               "DEPLOYMENT_FAILED",
                               "DEPLOYMENT_LIVE",
                               "DOMAIN_FAILED",
                               "DOMAIN_LIVE",
                               "AUTOSCALE_FAILED",
                               "AUTOSCALE_SUCCEEDED",
                               "FUNCTIONS_ACTIVATION_COUNT",
                               "FUNCTIONS_AVERAGE_DURATION_MS",
                               "FUNCTIONS_ERROR_RATE_PER_MINUTE",
                               "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
                               "FUNCTIONS_ERROR_COUNT",
                               "FUNCTIONS_GB_RATE_PER_SECOND",
                               "REQUESTS_PER_SECOND",
                               "REQUEST_DURATION_P95_MS"
                             ]
                           },
                           "value": {
                             "description": "Threshold value for alert",
                             "examples": [
                               2.32
                             ],
                             "type": "number",
                             "format": "float"
                           },
                           "window": {
                             "default": "UNSPECIFIED_WINDOW",
                             "examples": [
                               "FIVE_MINUTES"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSPECIFIED_WINDOW",
                               "FIVE_MINUTES",
                               "TEN_MINUTES",
                               "THIRTY_MINUTES",
                               "ONE_HOUR"
                             ]
                           }
                         }
                       }
                     },
                     "bitbucket": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "cors": {
                       "allOf": [
                         {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         {
                           "description": "(Deprecated - Use Ingress Rules instead)."
                         },
                         {
                           "deprecated": true
                         }
                       ]
                     },
                     "envs": {
                       "description": "A list of environment variables made available to the component.",
                       "type": "array",
                       "items": {
                         "type": "object",
                         "required": [
                           "key"
                         ],
                         "properties": {
                           "key": {
                             "description": "The variable name",
                             "examples": [
                               "BASE_URL"
                             ],
                             "type": "string",
                             "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                           },
                           "scope": {
                             "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                             "default": "RUN_AND_BUILD_TIME",
                             "examples": [
                               "BUILD_TIME"
                             ],
                             "type": "string",
                             "enum": [
                               "UNSET",
                               "RUN_TIME",
                               "BUILD_TIME",
                               "RUN_AND_BUILD_TIME"
                             ]
                           },
                           "type": {
                             "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                             "default": "GENERAL",
                             "examples": [
                               "GENERAL"
                             ],
                             "type": "string",
                             "enum": [
                               "GENERAL",
                               "SECRET"
                             ]
                           },
                           "value": {
                             "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                             "examples": [
                               "http://example.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     },
                     "git": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "repo_clone_url": {
                           "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                           "examples": [
                             "https://github.com/digitalocean/sample-golang.git"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "github": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "gitlab": {
                       "type": "object",
                       "properties": {
                         "branch": {
                           "description": "The name of the branch to use",
                           "examples": [
                             "main"
                           ],
                           "type": "string"
                         },
                         "deploy_on_push": {
                           "description": "Whether to automatically deploy new commits made to the repo",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         },
                         "repo": {
                           "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                           "examples": [
                             "digitalocean/sample-golang"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     "log_destinations": {
                       "description": "A list of configured log forwarding destinations.",
                       "type": "array",
                       "items": {
                         "title": "Configurations for external logging.",
                         "type": "object",
                         "required": [
                           "name"
                         ],
                         "properties": {
                           "datadog": {
                             "description": "DataDog configuration.",
                             "type": "object",
                             "required": [
                               "api_key"
                             ],
                             "properties": {
                               "api_key": {
                                 "description": "Datadog API key.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "Datadog HTTP log intake endpoint.",
                                 "examples": [
                                   "https://mydatadogendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "logtail": {
                             "description": "Logtail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "token": {
                                 "description": "Logtail token.",
                                 "examples": [
                                   "abcdefghijklmnopqrstuvwxyz0123456789"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "name": {
                             "examples": [
                               "my_log_destination"
                             ],
                             "type": "string",
                             "maxLength": 42,
                             "minLength": 2,
                             "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                           },
                           "open_search": {
                             "description": "OpenSearch configuration.",
                             "type": "object",
                             "properties": {
                               "basic_auth": {
                                 "description": "Configure Username and/or Password for Basic authentication.",
                                 "type": "object",
                                 "properties": {
                                   "password": {
                                     "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                     "examples": [
                                       "password1"
                                     ],
                                     "type": "string"
                                   },
                                   "user": {
                                     "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                     "examples": [
                                       "apps_user"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "cluster_name": {
                                 "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                 "examples": [
                                   "my-opensearch-cluster"
                                 ],
                                 "type": "string"
                               },
                               "endpoint": {
                                 "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                 "examples": [
                                   "https://example.com:9300"
                                 ],
                                 "type": "string"
                               },
                               "index_name": {
                                 "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                 "default": "logs",
                                 "examples": [
                                   "logs"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "papertrail": {
                             "description": "Papertrail configuration.",
                             "type": "object",
                             "required": [
                               "endpoint"
                             ],
                             "properties": {
                               "endpoint": {
                                 "description": "Papertrail syslog endpoint.",
                                 "examples": [
                                   "https://mypapertrailendpoint.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         }
                       }
                     },
                     "name": {
                       "description": "The name. Must be unique across all components within the same app.",
                       "examples": [
                         "api"
                       ],
                       "type": "string",
                       "maxLength": 32,
                       "minLength": 2,
                       "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                     },
                     "routes": {
                       "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                       "deprecated": true,
                       "type": "array",
                       "items": {
                         "title": "A criterion for routing HTTP traffic to a component.",
                         "type": "object",
                         "properties": {
                           "path": {
                             "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                             "examples": [
                               "/api"
                             ],
                             "type": "string"
                           },
                           "preserve_path_prefix": {
                             "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                             "examples": [
                               true
                             ],
                             "type": "boolean"
                           }
                         }
                       }
                     },
                     "source_dir": {
                       "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                       "examples": [
                         "path/to/dir"
                       ],
                       "type": "string"
                     }
                   }
                 }
               },
               "ingress": {
                 "description": "Specification for app ingress configurations.",
                 "type": "object",
                 "properties": {
                   "custom_error_page_url": {
                     "description": "Optional HTTPS URL of a custom error page to display when the app is unreachable. The\npage is shown in a full-viewport iframe. The target must allow framing: avoid\n`X-Frame-Options: DENY` and a restrictive `Content-Security-Policy` `frame-ancestors`\nthat blocks the platform. If omitted, the default platform error page is used.",
                     "examples": [
                       "https://status.example.com/app-unavailable"
                     ],
                     "type": "string",
                     "format": "uri",
                     "pattern": "^https://"
                   },
                   "rules": {
                     "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects.",
                     "type": "array",
                     "items": {
                       "type": "object",
                       "properties": {
                         "component": {
                           "description": "The component to route to. Only one of `component` or `redirect` may be set.",
                           "type": "object",
                           "required": [
                             "name"
                           ],
                           "properties": {
                             "name": {
                               "description": "The name of the component to route to.",
                               "examples": [
                                 "web"
                               ],
                               "type": "string"
                             },
                             "preserve_path_prefix": {
                               "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`.",
                               "examples": [
                                 "true"
                               ],
                               "type": "string"
                             },
                             "rewrite": {
                               "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`.",
                               "examples": [
                                 "/api/v1/"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "cors": {
                           "type": "object",
                           "properties": {
                             "allow_credentials": {
                               "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                               "examples": [
                                 false
                               ],
                               "type": "boolean"
                             },
                             "allow_headers": {
                               "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Type",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_methods": {
                               "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                               "examples": [
                                 [
                                   "GET",
                                   "OPTIONS",
                                   "POST",
                                   "PUT",
                                   "PATCH",
                                   "DELETE"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "allow_origins": {
                               "description": "The set of allowed CORS origins.",
                               "examples": [
                                 [
                                   {
                                     "exact": "https://www.example.com"
                                   },
                                   {
                                     "regex": "^.*example.com"
                                   }
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "object",
                                 "properties": {
                                   "exact": {
                                     "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "prefix": {
                                     "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                     "deprecated": true,
                                     "examples": [
                                       "https://www.example.com"
                                     ],
                                     "type": [
                                       "string",
                                       "null"
                                     ],
                                     "maxLength": 256
                                   },
                                   "regex": {
                                     "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                     "examples": [
                                       "^.*example.com"
                                     ],
                                     "type": "string",
                                     "maxLength": 256,
                                     "minLength": 1
                                   }
                                 }
                               }
                             },
                             "expose_headers": {
                               "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                               "examples": [
                                 [
                                   "Content-Encoding",
                                   "X-Custom-Header"
                                 ]
                               ],
                               "type": "array",
                               "items": {
                                 "type": "string"
                               }
                             },
                             "max_age": {
                               "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                               "examples": [
                                 "5h30m"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "match": {
                           "description": "The match configuration for the rule.",
                           "type": "object",
                           "properties": {
                             "authority": {
                               "description": "The authority to match on.",
                               "type": "object",
                               "required": [
                                 "exact"
                               ],
                               "properties": {
                                 "exact": {
                                   "description": "Exact string match. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                   "examples": [
                                     "example.com"
                                   ],
                                   "type": [
                                     "string",
                                     "null"
                                   ],
                                   "maxLength": 256
                                 }
                               }
                             },
                             "path": {
                               "description": "The path to match on.",
                               "type": "object",
                               "required": [
                                 "prefix"
                               ],
                               "properties": {
                                 "prefix": {
                                   "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`.",
                                   "examples": [
                                     "/api"
                                   ],
                                   "type": [
                                     "string",
                                     "null"
                                   ],
                                   "maxLength": 256
                                 }
                               }
                             }
                           }
                         },
                         "redirect": {
                           "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set.",
                           "type": "object",
                           "properties": {
                             "authority": {
                               "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port.",
                               "examples": [
                                 "example.com"
                               ],
                               "type": "string"
                             },
                             "port": {
                               "description": "The port to redirect to.",
                               "examples": [
                                 443
                               ],
                               "type": "integer",
                               "format": "int64"
                             },
                             "redirect_code": {
                               "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308.",
                               "examples": [
                                 302
                               ],
                               "type": "integer",
                               "format": "int64"
                             },
                             "scheme": {
                               "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`.",
                               "examples": [
                                 "https"
                               ],
                               "type": "string"
                             },
                             "uri": {
                               "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched.",
                               "examples": [
                                 "/about"
                               ],
                               "type": "string"
                             }
                           }
                         }
                       }
                     }
                   }
                 }
               },
               "jobs": {
                 "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "kind": {
                           "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy.",
                           "default": "UNSPECIFIED",
                           "examples": [
                             "PRE_DEPLOY"
                           ],
                           "type": "string",
                           "enum": [
                             "UNSPECIFIED",
                             "PRE_DEPLOY",
                             "POST_DEPLOY",
                             "FAILED_DEPLOY"
                           ]
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
               },
               "maintenance": {
                 "description": "Specification to configure maintenance settings for the app, such as maintenance mode and archiving the app.",
                 "type": "object",
                 "properties": {
                   "archive": {
                     "description": "Indicates whether the app should be archived. Setting this to true implies that enabled is set to true.",
                     "examples": [
                       true
                     ],
                     "type": "boolean"
                   },
                   "enabled": {
                     "description": "Indicates whether maintenance mode should be enabled for the app.",
                     "examples": [
                       true
                     ],
                     "type": "boolean"
                   },
                   "offline_page_url": {
                     "description": "A custom offline page to display when maintenance mode is enabled or the app is archived.",
                     "examples": [
                       "https://example.com/offline.html"
                     ],
                     "type": "string"
                   }
                 }
               },
               "name": {
                 "description": "The name of the app. Must be unique across all apps in the same account.",
                 "examples": [
                   "web-app-01"
                 ],
                 "type": "string",
                 "maxLength": 32,
                 "minLength": 2,
                 "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
               },
               "region": {
                 "description": "The slug form of the geographical origin of the app. Default: `nearest available`",
                 "examples": [
                   "nyc"
                 ],
                 "type": "string",
                 "enum": [
                   "atl",
                   "nyc",
                   "sfo",
                   "tor",
                   "ams",
                   "fra",
                   "lon",
                   "blr",
                   "sgp",
                   "syd"
                 ]
               },
               "services": {
                 "description": "Workloads which expose publicly-accessible HTTP services.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "required": [
                         "name"
                       ],
                       "properties": {
                         "autoscaling": {
                           "allOf": [
                             {
                               "description": "Configuration for automatically scaling this component based on metrics.",
                               "type": "object",
                               "properties": {
                                 "max_instance_count": {
                                   "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                                   "examples": [
                                     3
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "maximum": 250.0,
                                   "minimum": 1.0
                                 },
                                 "metrics": {
                                   "description": "The metrics that the component is scaled on.",
                                   "type": "object",
                                   "properties": {
                                     "cpu": {
                                       "description": "Settings for scaling the component based on CPU utilization.",
                                       "type": "object",
                                       "properties": {
                                         "percent": {
                                           "description": "The average target CPU utilization for the component.",
                                           "default": 80,
                                           "examples": [
                                             75
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "maximum": 100.0,
                                           "minimum": 1.0
                                         }
                                       }
                                     }
                                   }
                                 },
                                 "min_instance_count": {
                                   "description": "The minimum amount of instances for this component.",
                                   "examples": [
                                     2
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "minimum": 1.0
                                 }
                               }
                             },
                             {
                               "type": "object",
                               "properties": {
                                 "metrics": {
                                   "type": "object",
                                   "properties": {
                                     "request_duration": {
                                       "description": "Settings for scaling the component based on request duration.",
                                       "type": "object",
                                       "properties": {
                                         "p95_milliseconds": {
                                           "description": "The p95 target request duration in milliseconds for the component.",
                                           "examples": [
                                             500
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "minimum": 1.0
                                         }
                                       }
                                     },
                                     "requests_per_second": {
                                       "description": "Settings for scaling the component based on requests per second.",
                                       "type": "object",
                                       "properties": {
                                         "per_instance": {
                                           "description": "The target number of requests per second per instance for the component.",
                                           "examples": [
                                             100
                                           ],
                                           "type": "integer",
                                           "format": "uint32",
                                           "minimum": 1.0
                                         }
                                       }
                                     }
                                   }
                                 }
                               }
                             }
                           ]
                         },
                         "cors": {
                           "allOf": [
                             {
                               "type": "object",
                               "properties": {
                                 "allow_credentials": {
                                   "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                                   "examples": [
                                     false
                                   ],
                                   "type": "boolean"
                                 },
                                 "allow_headers": {
                                   "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Type",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_methods": {
                                   "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                                   "examples": [
                                     [
                                       "GET",
                                       "OPTIONS",
                                       "POST",
                                       "PUT",
                                       "PATCH",
                                       "DELETE"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_origins": {
                                   "description": "The set of allowed CORS origins.",
                                   "examples": [
                                     [
                                       {
                                         "exact": "https://www.example.com"
                                       },
                                       {
                                         "regex": "^.*example.com"
                                       }
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "object",
                                     "properties": {
                                       "exact": {
                                         "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "prefix": {
                                         "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                         "deprecated": true,
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "regex": {
                                         "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                         "examples": [
                                           "^.*example.com"
                                         ],
                                         "type": "string",
                                         "maxLength": 256,
                                         "minLength": 1
                                       }
                                     }
                                   }
                                 },
                                 "expose_headers": {
                                   "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Encoding",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "max_age": {
                                   "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                                   "examples": [
                                     "5h30m"
                                   ],
                                   "type": "string"
                                 }
                               }
                             },
                             {
                               "description": "(Deprecated - Use Ingress Rules instead)."
                             },
                             {
                               "deprecated": true
                             }
                           ]
                         },
                         "health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 60
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "port": {
                               "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "int32"
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 45
                               ],
                               "type": "integer",
                               "format": "int32"
                             }
                           }
                         },
                         "http_port": {
                           "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field.",
                           "examples": [
                             3000
                           ],
                           "type": "integer",
                           "format": "int64",
                           "maximum": 65535.0,
                           "minimum": 1.0
                         },
                         "internal_ports": {
                           "description": "The ports on which this service will listen for internal traffic.",
                           "examples": [
                             [
                               80,
                               443
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "integer",
                             "format": "int64"
                           }
                         },
                         "liveness_health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 18
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 50.0,
                               "minimum": 1.0
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 3600.0,
                               "minimum": 0.0
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 10
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 300.0,
                               "minimum": 1.0
                             },
                             "port": {
                               "description": "The port on which the health check will be performed.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 1.0,
                               "minimum": 1.0
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 120.0,
                               "minimum": 1.0
                             }
                           }
                         },
                         "protocol": {
                           "description": "The protocol which the service uses to serve traffic on the http_port.\n\n- `HTTP`: The app is serving the HTTP protocol. Default.\n- `HTTP2`: The app is serving the HTTP/2 protocol. Currently, this needs to be implemented in the service by serving HTTP/2 cleartext (h2c).\n",
                           "examples": [
                             "HTTP"
                           ],
                           "type": "string",
                           "enum": [
                             "HTTP",
                             "HTTP2"
                           ]
                         },
                         "routes": {
                           "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                           "deprecated": true,
                           "type": "array",
                           "items": {
                             "title": "A criterion for routing HTTP traffic to a component.",
                             "type": "object",
                             "properties": {
                               "path": {
                                 "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                                 "examples": [
                                   "/api"
                                 ],
                                 "type": "string"
                               },
                               "preserve_path_prefix": {
                                 "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                                 "examples": [
                                   true
                                 ],
                                 "type": "boolean"
                               }
                             }
                           }
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "drain_seconds": {
                               "description": "The number of seconds to wait between selecting a container instance for termination and issuing the TERM signal. Selecting a container instance for termination begins an asynchronous drain of new requests on upstream load-balancers. (Default 15)",
                               "examples": [
                                 15
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 110.0,
                               "minimum": 1.0
                             },
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ]
                 }
               },
               "static_sites": {
                 "description": "Content which can be rendered to static web assets.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "catchall_document": {
                           "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set.",
                           "examples": [
                             "index.html"
                           ],
                           "type": "string"
                         },
                         "cors": {
                           "allOf": [
                             {
                               "type": "object",
                               "properties": {
                                 "allow_credentials": {
                                   "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                                   "examples": [
                                     false
                                   ],
                                   "type": "boolean"
                                 },
                                 "allow_headers": {
                                   "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Type",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_methods": {
                                   "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                                   "examples": [
                                     [
                                       "GET",
                                       "OPTIONS",
                                       "POST",
                                       "PUT",
                                       "PATCH",
                                       "DELETE"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "allow_origins": {
                                   "description": "The set of allowed CORS origins.",
                                   "examples": [
                                     [
                                       {
                                         "exact": "https://www.example.com"
                                       },
                                       {
                                         "regex": "^.*example.com"
                                       }
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "object",
                                     "properties": {
                                       "exact": {
                                         "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "prefix": {
                                         "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                         "deprecated": true,
                                         "examples": [
                                           "https://www.example.com"
                                         ],
                                         "type": [
                                           "string",
                                           "null"
                                         ],
                                         "maxLength": 256
                                       },
                                       "regex": {
                                         "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                         "examples": [
                                           "^.*example.com"
                                         ],
                                         "type": "string",
                                         "maxLength": 256,
                                         "minLength": 1
                                       }
                                     }
                                   }
                                 },
                                 "expose_headers": {
                                   "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                                   "examples": [
                                     [
                                       "Content-Encoding",
                                       "X-Custom-Header"
                                     ]
                                   ],
                                   "type": "array",
                                   "items": {
                                     "type": "string"
                                   }
                                 },
                                 "max_age": {
                                   "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                                   "examples": [
                                     "5h30m"
                                   ],
                                   "type": "string"
                                 }
                               }
                             },
                             {
                               "description": "(Deprecated - Use Ingress Rules instead)."
                             },
                             {
                               "deprecated": true
                             }
                           ]
                         },
                         "error_document": {
                           "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one.",
                           "default": "404.html",
                           "examples": [
                             "error.html"
                           ],
                           "type": "string"
                         },
                         "index_document": {
                           "description": "The name of the index document to use when serving this static site. Default: index.html",
                           "default": "index.html",
                           "examples": [
                             "main.html"
                           ],
                           "type": "string"
                         },
                         "output_dir": {
                           "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`.",
                           "examples": [
                             "dist/"
                           ],
                           "type": "string"
                         },
                         "routes": {
                           "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                           "deprecated": true,
                           "type": "array",
                           "items": {
                             "title": "A criterion for routing HTTP traffic to a component.",
                             "type": "object",
                             "properties": {
                               "path": {
                                 "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                                 "examples": [
                                   "/api"
                                 ],
                                 "type": "string"
                               },
                               "preserve_path_prefix": {
                                 "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                                 "examples": [
                                   true
                                 ],
                                 "type": "boolean"
                               }
                             }
                           }
                         }
                       }
                     }
                   ],
                   "required": [
                     "name"
                   ]
                 }
               },
               "vpc": {
                 "readOnly": true,
                 "type": "object",
                 "properties": {
                   "egress_ips": {
                     "title": "The egress ips associated with the VPC.",
                     "type": "array",
                     "items": {
                       "type": "object",
                       "properties": {
                         "ip": {
                           "examples": [
                             "10.0.0.1"
                           ],
                           "type": "string"
                         }
                       }
                     }
                   },
                   "id": {
                     "title": "The ID of the VPC.",
                     "examples": [
                       "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
                     ],
                     "type": "string"
                   }
                 }
               },
               "workers": {
                 "description": "Workloads which do not expose publicly-accessible HTTP services.",
                 "type": "array",
                 "items": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "bitbucket": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "build_command": {
                           "description": "An optional build command to run while building this component from source.",
                           "examples": [
                             "npm run build"
                           ],
                           "type": "string"
                         },
                         "dockerfile_path": {
                           "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                           "examples": [
                             "path/to/Dockerfile"
                           ],
                           "type": "string"
                         },
                         "environment_slug": {
                           "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                           "examples": [
                             "node-js"
                           ],
                           "type": "string"
                         },
                         "envs": {
                           "description": "A list of environment variables made available to the component.",
                           "type": "array",
                           "items": {
                             "type": "object",
                             "required": [
                               "key"
                             ],
                             "properties": {
                               "key": {
                                 "description": "The variable name",
                                 "examples": [
                                   "BASE_URL"
                                 ],
                                 "type": "string",
                                 "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                               },
                               "scope": {
                                 "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                                 "default": "RUN_AND_BUILD_TIME",
                                 "examples": [
                                   "BUILD_TIME"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "UNSET",
                                   "RUN_TIME",
                                   "BUILD_TIME",
                                   "RUN_AND_BUILD_TIME"
                                 ]
                               },
                               "type": {
                                 "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                                 "default": "GENERAL",
                                 "examples": [
                                   "GENERAL"
                                 ],
                                 "type": "string",
                                 "enum": [
                                   "GENERAL",
                                   "SECRET"
                                 ]
                               },
                               "value": {
                                 "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                                 "examples": [
                                   "http://example.com"
                                 ],
                                 "type": "string"
                               }
                             }
                           }
                         },
                         "git": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "repo_clone_url": {
                               "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                               "examples": [
                                 "https://github.com/digitalocean/sample-golang.git"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "github": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "gitlab": {
                           "type": "object",
                           "properties": {
                             "branch": {
                               "description": "The name of the branch to use",
                               "examples": [
                                 "main"
                               ],
                               "type": "string"
                             },
                             "deploy_on_push": {
                               "description": "Whether to automatically deploy new commits made to the repo",
                               "examples": [
                                 true
                               ],
                               "type": "boolean"
                             },
                             "repo": {
                               "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                               "examples": [
                                 "digitalocean/sample-golang"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "image": {
                           "type": "object",
                           "properties": {
                             "deploy_on_push": {
                               "type": "object",
                               "properties": {
                                 "enabled": {
                                   "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                                   "examples": [
                                     true
                                   ],
                                   "type": "boolean"
                                 }
                               }
                             },
                             "digest": {
                               "description": "The image digest. Cannot be specified if tag is provided.",
                               "examples": [
                                 "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                               ],
                               "type": "string"
                             },
                             "registry": {
                               "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                               "examples": [
                                 "registry.hub.docker.com"
                               ],
                               "type": "string"
                             },
                             "registry_credentials": {
                               "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                               "examples": [
                                 "my-dockerhub-username:dckr_pat_the_access_token"
                               ],
                               "type": "string"
                             },
                             "registry_type": {
                               "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                               "examples": [
                                 "DOCR"
                               ],
                               "type": "string",
                               "enum": [
                                 "DOCKER_HUB",
                                 "DOCR",
                                 "GHCR"
                               ]
                             },
                             "repository": {
                               "description": "The repository name.",
                               "examples": [
                                 "origin/master"
                               ],
                               "type": "string"
                             },
                             "tag": {
                               "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                               "default": "latest",
                               "examples": [
                                 "latest"
                               ],
                               "type": "string"
                             }
                           }
                         },
                         "log_destinations": {
                           "description": "A list of configured log forwarding destinations.",
                           "type": "array",
                           "items": {
                             "title": "Configurations for external logging.",
                             "type": "object",
                             "required": [
                               "name"
                             ],
                             "properties": {
                               "datadog": {
                                 "description": "DataDog configuration.",
                                 "type": "object",
                                 "required": [
                                   "api_key"
                                 ],
                                 "properties": {
                                   "api_key": {
                                     "description": "Datadog API key.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "Datadog HTTP log intake endpoint.",
                                     "examples": [
                                       "https://mydatadogendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "logtail": {
                                 "description": "Logtail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "token": {
                                     "description": "Logtail token.",
                                     "examples": [
                                       "abcdefghijklmnopqrstuvwxyz0123456789"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "name": {
                                 "examples": [
                                   "my_log_destination"
                                 ],
                                 "type": "string",
                                 "maxLength": 42,
                                 "minLength": 2,
                                 "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                               },
                               "open_search": {
                                 "description": "OpenSearch configuration.",
                                 "type": "object",
                                 "properties": {
                                   "basic_auth": {
                                     "description": "Configure Username and/or Password for Basic authentication.",
                                     "type": "object",
                                     "properties": {
                                       "password": {
                                         "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                         "examples": [
                                           "password1"
                                         ],
                                         "type": "string"
                                       },
                                       "user": {
                                         "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                         "examples": [
                                           "apps_user"
                                         ],
                                         "type": "string"
                                       }
                                     }
                                   },
                                   "cluster_name": {
                                     "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                                     "examples": [
                                       "my-opensearch-cluster"
                                     ],
                                     "type": "string"
                                   },
                                   "endpoint": {
                                     "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                                     "examples": [
                                       "https://example.com:9300"
                                     ],
                                     "type": "string"
                                   },
                                   "index_name": {
                                     "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                                     "default": "logs",
                                     "examples": [
                                       "logs"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               },
                               "papertrail": {
                                 "description": "Papertrail configuration.",
                                 "type": "object",
                                 "required": [
                                   "endpoint"
                                 ],
                                 "properties": {
                                   "endpoint": {
                                     "description": "Papertrail syslog endpoint.",
                                     "examples": [
                                       "https://mypapertrailendpoint.com"
                                     ],
                                     "type": "string"
                                   }
                                 }
                               }
                             }
                           }
                         },
                         "name": {
                           "description": "The name. Must be unique across all components within the same app.",
                           "examples": [
                             "api"
                           ],
                           "type": "string",
                           "maxLength": 32,
                           "minLength": 2,
                           "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                         },
                         "run_command": {
                           "description": "An optional run command to override the component's default.",
                           "examples": [
                             "bin/api"
                           ],
                           "type": "string"
                         },
                         "source_dir": {
                           "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                           "examples": [
                             "path/to/dir"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "instance_count": {
                           "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                           "default": 1,
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "int64",
                           "minimum": 1.0
                         },
                         "instance_size_slug": {
                           "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                           "examples": [
                             "apps-s-1vcpu-0.5gb"
                           ],
                           "oneOf": [
                             {
                               "title": "Size slug",
                               "default": "apps-s-1vcpu-0.5gb",
                               "examples": [
                                 "apps-s-1vcpu-0.5gb"
                               ],
                               "type": "string",
                               "enum": [
                                 "apps-s-1vcpu-0.5gb",
                                 "apps-s-1vcpu-1gb-fixed",
                                 "apps-s-1vcpu-1gb",
                                 "apps-s-1vcpu-2gb",
                                 "apps-s-2vcpu-4gb",
                                 "apps-d-1vcpu-0.5gb",
                                 "apps-d-1vcpu-1gb",
                                 "apps-d-1vcpu-2gb",
                                 "apps-d-1vcpu-4gb",
                                 "apps-d-2vcpu-4gb",
                                 "apps-d-2vcpu-8gb",
                                 "apps-d-4vcpu-8gb",
                                 "apps-d-4vcpu-16gb",
                                 "apps-d-8vcpu-32gb"
                               ]
                             },
                             {
                               "title": "Deprecated",
                               "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                               "deprecated": true,
                               "examples": [
                                 "basic-xxs"
                               ],
                               "type": "string",
                               "enum": [
                                 "basic-xxs",
                                 "basic-xs",
                                 "basic-s",
                                 "basic-m",
                                 "professional-xs",
                                 "professional-s",
                                 "professional-m",
                                 "professional-1l",
                                 "professional-l",
                                 "professional-xl"
                               ]
                             }
                           ]
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "autoscaling": {
                           "description": "Configuration for automatically scaling this component based on metrics.",
                           "type": "object",
                           "properties": {
                             "max_instance_count": {
                               "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                               "examples": [
                                 3
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "maximum": 250.0,
                               "minimum": 1.0
                             },
                             "metrics": {
                               "description": "The metrics that the component is scaled on.",
                               "type": "object",
                               "properties": {
                                 "cpu": {
                                   "description": "Settings for scaling the component based on CPU utilization.",
                                   "type": "object",
                                   "properties": {
                                     "percent": {
                                       "description": "The average target CPU utilization for the component.",
                                       "default": 80,
                                       "examples": [
                                         75
                                       ],
                                       "type": "integer",
                                       "format": "uint32",
                                       "maximum": 100.0,
                                       "minimum": 1.0
                                     }
                                   }
                                 }
                               }
                             },
                             "min_instance_count": {
                               "description": "The minimum amount of instances for this component.",
                               "examples": [
                                 2
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "minimum": 1.0
                             }
                           }
                         },
                         "liveness_health_check": {
                           "type": "object",
                           "properties": {
                             "failure_threshold": {
                               "description": "The number of failed health checks before considered unhealthy.",
                               "examples": [
                                 18
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 50.0,
                               "minimum": 1.0
                             },
                             "http_path": {
                               "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                               "examples": [
                                 "/health"
                               ],
                               "type": "string"
                             },
                             "initial_delay_seconds": {
                               "description": "The number of seconds to wait before beginning health checks.",
                               "examples": [
                                 30
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 3600.0,
                               "minimum": 0.0
                             },
                             "period_seconds": {
                               "description": "The number of seconds to wait between health checks.",
                               "examples": [
                                 10
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 300.0,
                               "minimum": 1.0
                             },
                             "port": {
                               "description": "The port on which the health check will be performed.",
                               "examples": [
                                 80
                               ],
                               "type": "integer",
                               "format": "int64",
                               "maximum": 65535.0,
                               "minimum": 1.0
                             },
                             "success_threshold": {
                               "description": "The number of successful health checks before considered healthy.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 1.0,
                               "minimum": 1.0
                             },
                             "timeout_seconds": {
                               "description": "The number of seconds after which the check times out.",
                               "examples": [
                                 1
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 120.0,
                               "minimum": 1.0
                             }
                           }
                         },
                         "termination": {
                           "type": "object",
                           "properties": {
                             "grace_period_seconds": {
                               "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                               "examples": [
                                 120
                               ],
                               "type": "integer",
                               "format": "int32",
                               "maximum": 600.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     }
                   ],
                   "required": [
                     "name"
                   ]
                 }
               }
             }
           },
           "static_sites": {
             "title": "Static Site components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this static site",
                   "examples": [
                     "web"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this static site",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "tier_slug": {
             "title": "The current pricing tier slug of the deployment",
             "readOnly": true,
             "examples": [
               "basic"
             ],
             "type": "string"
           },
           "updated_at": {
             "title": "When the deployment was last updated",
             "examples": [
               "2020-07-28T18:00:00Z"
             ],
             "type": "string",
             "format": "date-time"
           },
           "workers": {
             "title": "Worker components that are part of this deployment",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "name": {
                   "title": "The name of this worker",
                   "examples": [
                     "queue-runner"
                   ],
                   "type": "string"
                 },
                 "source_commit_hash": {
                   "title": "The commit hash of the repository that was used to build this worker",
                   "examples": [
                     "54d4a727f457231062439895000d45437c7bb405"
                   ],
                   "type": "string"
                 }
               }
             }
           }
         }
       }
     ]
   },
   "project_id": {
     "title": "The ID of the project the app is assigned to. This will be empty if there is a lookup failure.",
     "description": "Requires `project:read` scope.",
     "readOnly": true,
     "examples": [
       "88b72d1a-b78a-4d9f-9090-b53c4399073f"
     ],
     "type": "string"
   },
   "region": {
     "title": "Geographical information about an app origin",
     "type": "object",
     "properties": {
       "continent": {
         "title": "The continent that this region is in",
         "readOnly": true,
         "examples": [
           "europe"
         ],
         "type": "string"
       },
       "data_centers": {
         "title": "Data centers that are in this region",
         "readOnly": true,
         "examples": [
           [
             "ams"
           ]
         ],
         "type": "array",
         "items": {
           "examples": [
             "ams"
           ],
           "type": "string"
         }
       },
       "default": {
         "description": "Whether or not the region is presented as the default.",
         "readOnly": true,
         "examples": [
           true
         ],
         "type": "boolean"
       },
       "disabled": {
         "title": "Whether or not the region is open for new apps",
         "readOnly": true,
         "examples": [
           true
         ],
         "type": "boolean"
       },
       "flag": {
         "title": "The flag of this region",
         "readOnly": true,
         "examples": [
           "ams"
         ],
         "type": "string"
       },
       "label": {
         "title": "A human-readable name of the region",
         "readOnly": true,
         "examples": [
           "ams"
         ],
         "type": "string"
       },
       "reason": {
         "title": "Reason that this region is not available",
         "readOnly": true,
         "examples": [
           "to crowded"
         ],
         "type": "string"
       },
       "slug": {
         "title": "The slug form of the region name",
         "readOnly": true,
         "examples": [
           "basic"
         ],
         "type": "string"
       }
     }
   },
   "spec": {
     "title": "AppSpec",
     "description": "The desired configuration of an application.",
     "type": "object",
     "required": [
       "name"
     ],
     "properties": {
       "databases": {
         "description": "Database instances which can provide persistence to workloads within the\napplication.",
         "type": "array",
         "items": {
           "type": "object",
           "required": [
             "name"
           ],
           "properties": {
             "cluster_name": {
               "description": "The name of the underlying DigitalOcean DBaaS cluster. This is required for production databases. For dev databases, if cluster_name is not set, a new cluster will be provisioned.",
               "examples": [
                 "cluster_name"
               ],
               "type": "string"
             },
             "db_name": {
               "description": "The name of the MySQL or PostgreSQL database to configure.",
               "examples": [
                 "my_db"
               ],
               "type": "string"
             },
             "db_user": {
               "description": "The name of the MySQL or PostgreSQL user to configure.",
               "examples": [
                 "superuser"
               ],
               "type": "string"
             },
             "engine": {
               "description": "- MYSQL: MySQL\n- PG: PostgreSQL\n- REDIS: Caching\n- MONGODB: MongoDB\n- KAFKA: Kafka\n- OPENSEARCH: OpenSearch\n- VALKEY: ValKey",
               "default": "UNSET",
               "examples": [
                 "PG"
               ],
               "type": "string",
               "enum": [
                 "UNSET",
                 "MYSQL",
                 "PG",
                 "REDIS",
                 "MONGODB",
                 "KAFKA",
                 "OPENSEARCH",
                 "VALKEY"
               ]
             },
             "name": {
               "description": "The database's name. The name must be unique across all components within the same app and cannot use capital letters.",
               "examples": [
                 "prod-db"
               ],
               "type": "string",
               "maxLength": 32,
               "minLength": 2,
               "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
             },
             "production": {
               "description": "Whether this is a production or dev database.",
               "examples": [
                 true
               ],
               "type": "boolean"
             },
             "version": {
               "description": "The version of the database engine",
               "examples": [
                 "12"
               ],
               "type": "string"
             }
           }
         }
       },
       "disable_edge_cache": {
         "description": "If set to `true`, the app will **not** be cached at the edge (CDN). Enable this option if you want to manage CDN configuration yourself—whether by using an external CDN provider or by handling static content and caching within your app. This setting is also recommended for apps that require real-time data or serve dynamic content, such as those using Server-Sent Events (SSE) over GET, or hosting an MCP (Model Context Protocol) Server that utilizes SSE.  \n**Note:** This feature is not available for static site components.  \nFor more information, see [Disable CDN Cache](https://docs.digitalocean.com/products/app-platform/how-to/cache-content/#disable-cdn-cache).",
         "default": false,
         "type": "boolean"
       },
       "disable_email_obfuscation": {
         "description": "If set to `true`, email addresses in the app will not be obfuscated. This is\nuseful for apps that require email addresses to be visible (in the HTML markup).",
         "default": false,
         "type": "boolean"
       },
       "domains": {
         "description": "A set of hostnames where the application will be available.",
         "type": "array",
         "items": {
           "type": "object",
           "required": [
             "domain"
           ],
           "properties": {
             "domain": {
               "description": "The hostname for the domain",
               "examples": [
                 "app.example.com"
               ],
               "type": "string",
               "maxLength": 253,
               "minLength": 4,
               "pattern": "^((xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\\.)+[a-zA-Z]{2,}\\.?$"
             },
             "minimum_tls_version": {
               "description": "The minimum version of TLS a client application can use to access resources for the domain.  Must be one of the following values wrapped within quotations: `\"1.2\"` or `\"1.3\"`.",
               "examples": [
                 "1.3"
               ],
               "type": "string",
               "enum": [
                 "1.2",
                 "1.3"
               ],
               "maxLength": 3,
               "minLength": 3
             },
             "type": {
               "description": "- DEFAULT: The default `.ondigitalocean.app` domain assigned to this app\n- PRIMARY: The primary domain for this app that is displayed as the default in the control panel, used in bindable environment variables, and any other places that reference an app's live URL. Only one domain may be set as primary.\n- ALIAS: A non-primary domain",
               "default": "UNSPECIFIED",
               "examples": [
                 "DEFAULT"
               ],
               "type": "string",
               "enum": [
                 "UNSPECIFIED",
                 "DEFAULT",
                 "PRIMARY",
                 "ALIAS"
               ]
             },
             "wildcard": {
               "description": "Indicates whether the domain includes all sub-domains, in addition to the given domain",
               "examples": [
                 true
               ],
               "type": "boolean"
             },
             "zone": {
               "description": "Optional. If the domain uses DigitalOcean DNS and you would like App\nPlatform to automatically manage it for you, set this to the name of the\ndomain on your account.\n\nFor example, If the domain you are adding is `app.domain.com`, the zone\ncould be `domain.com`.",
               "examples": [
                 "example.com"
               ],
               "type": "string",
               "format": "hostname"
             }
           }
         }
       },
       "egress": {
         "description": "Specification for app egress configurations.",
         "type": "object",
         "properties": {
           "type": {
             "title": "The app egress type.",
             "default": "AUTOASSIGN",
             "examples": [
               "AUTOASSIGN"
             ],
             "type": "string",
             "enum": [
               "AUTOASSIGN",
               "DEDICATED_IP"
             ]
           }
         }
       },
       "enhanced_threat_control_enabled": {
         "description": "If set to `true`, suspicious requests will go through additional security checks to help mitigate layer 7 DDoS attacks.",
         "default": false,
         "type": "boolean"
       },
       "functions": {
         "description": "Workloads which expose publicly-accessible HTTP services via Functions Components.",
         "type": "array",
         "items": {
           "type": "object",
           "required": [
             "name"
           ],
           "properties": {
             "alerts": {
               "type": "array",
               "items": {
                 "type": "object",
                 "properties": {
                   "disabled": {
                     "description": "Is the alert disabled?",
                     "examples": [
                       false
                     ],
                     "type": "boolean"
                   },
                   "operator": {
                     "default": "UNSPECIFIED_OPERATOR",
                     "examples": [
                       "GREATER_THAN"
                     ],
                     "type": "string",
                     "enum": [
                       "UNSPECIFIED_OPERATOR",
                       "GREATER_THAN",
                       "LESS_THAN"
                     ]
                   },
                   "rule": {
                     "default": "UNSPECIFIED_RULE",
                     "examples": [
                       "CPU_UTILIZATION"
                     ],
                     "type": "string",
                     "enum": [
                       "UNSPECIFIED_RULE",
                       "CPU_UTILIZATION",
                       "MEM_UTILIZATION",
                       "RESTART_COUNT",
                       "DEPLOYMENT_FAILED",
                       "DEPLOYMENT_LIVE",
                       "DOMAIN_FAILED",
                       "DOMAIN_LIVE",
                       "AUTOSCALE_FAILED",
                       "AUTOSCALE_SUCCEEDED",
                       "FUNCTIONS_ACTIVATION_COUNT",
                       "FUNCTIONS_AVERAGE_DURATION_MS",
                       "FUNCTIONS_ERROR_RATE_PER_MINUTE",
                       "FUNCTIONS_AVERAGE_WAIT_TIME_MS",
                       "FUNCTIONS_ERROR_COUNT",
                       "FUNCTIONS_GB_RATE_PER_SECOND",
                       "REQUESTS_PER_SECOND",
                       "REQUEST_DURATION_P95_MS"
                     ]
                   },
                   "value": {
                     "description": "Threshold value for alert",
                     "examples": [
                       2.32
                     ],
                     "type": "number",
                     "format": "float"
                   },
                   "window": {
                     "default": "UNSPECIFIED_WINDOW",
                     "examples": [
                       "FIVE_MINUTES"
                     ],
                     "type": "string",
                     "enum": [
                       "UNSPECIFIED_WINDOW",
                       "FIVE_MINUTES",
                       "TEN_MINUTES",
                       "THIRTY_MINUTES",
                       "ONE_HOUR"
                     ]
                   }
                 }
               }
             },
             "bitbucket": {
               "type": "object",
               "properties": {
                 "branch": {
                   "description": "The name of the branch to use",
                   "examples": [
                     "main"
                   ],
                   "type": "string"
                 },
                 "deploy_on_push": {
                   "description": "Whether to automatically deploy new commits made to the repo",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "repo": {
                   "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                   "examples": [
                     "digitalocean/sample-golang"
                   ],
                   "type": "string"
                 }
               }
             },
             "cors": {
               "allOf": [
                 {
                   "type": "object",
                   "properties": {
                     "allow_credentials": {
                       "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                       "examples": [
                         false
                       ],
                       "type": "boolean"
                     },
                     "allow_headers": {
                       "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                       "examples": [
                         [
                           "Content-Type",
                           "X-Custom-Header"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "allow_methods": {
                       "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                       "examples": [
                         [
                           "GET",
                           "OPTIONS",
                           "POST",
                           "PUT",
                           "PATCH",
                           "DELETE"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "allow_origins": {
                       "description": "The set of allowed CORS origins.",
                       "examples": [
                         [
                           {
                             "exact": "https://www.example.com"
                           },
                           {
                             "regex": "^.*example.com"
                           }
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "object",
                         "properties": {
                           "exact": {
                             "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                             "examples": [
                               "https://www.example.com"
                             ],
                             "type": [
                               "string",
                               "null"
                             ],
                             "maxLength": 256
                           },
                           "prefix": {
                             "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                             "deprecated": true,
                             "examples": [
                               "https://www.example.com"
                             ],
                             "type": [
                               "string",
                               "null"
                             ],
                             "maxLength": 256
                           },
                           "regex": {
                             "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                             "examples": [
                               "^.*example.com"
                             ],
                             "type": "string",
                             "maxLength": 256,
                             "minLength": 1
                           }
                         }
                       }
                     },
                     "expose_headers": {
                       "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                       "examples": [
                         [
                           "Content-Encoding",
                           "X-Custom-Header"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "max_age": {
                       "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                       "examples": [
                         "5h30m"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 {
                   "description": "(Deprecated - Use Ingress Rules instead)."
                 },
                 {
                   "deprecated": true
                 }
               ]
             },
             "envs": {
               "description": "A list of environment variables made available to the component.",
               "type": "array",
               "items": {
                 "type": "object",
                 "required": [
                   "key"
                 ],
                 "properties": {
                   "key": {
                     "description": "The variable name",
                     "examples": [
                       "BASE_URL"
                     ],
                     "type": "string",
                     "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                   },
                   "scope": {
                     "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                     "default": "RUN_AND_BUILD_TIME",
                     "examples": [
                       "BUILD_TIME"
                     ],
                     "type": "string",
                     "enum": [
                       "UNSET",
                       "RUN_TIME",
                       "BUILD_TIME",
                       "RUN_AND_BUILD_TIME"
                     ]
                   },
                   "type": {
                     "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                     "default": "GENERAL",
                     "examples": [
                       "GENERAL"
                     ],
                     "type": "string",
                     "enum": [
                       "GENERAL",
                       "SECRET"
                     ]
                   },
                   "value": {
                     "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                     "examples": [
                       "http://example.com"
                     ],
                     "type": "string"
                   }
                 }
               }
             },
             "git": {
               "type": "object",
               "properties": {
                 "branch": {
                   "description": "The name of the branch to use",
                   "examples": [
                     "main"
                   ],
                   "type": "string"
                 },
                 "repo_clone_url": {
                   "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                   "examples": [
                     "https://github.com/digitalocean/sample-golang.git"
                   ],
                   "type": "string"
                 }
               }
             },
             "github": {
               "type": "object",
               "properties": {
                 "branch": {
                   "description": "The name of the branch to use",
                   "examples": [
                     "main"
                   ],
                   "type": "string"
                 },
                 "deploy_on_push": {
                   "description": "Whether to automatically deploy new commits made to the repo",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "repo": {
                   "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                   "examples": [
                     "digitalocean/sample-golang"
                   ],
                   "type": "string"
                 }
               }
             },
             "gitlab": {
               "type": "object",
               "properties": {
                 "branch": {
                   "description": "The name of the branch to use",
                   "examples": [
                     "main"
                   ],
                   "type": "string"
                 },
                 "deploy_on_push": {
                   "description": "Whether to automatically deploy new commits made to the repo",
                   "examples": [
                     true
                   ],
                   "type": "boolean"
                 },
                 "repo": {
                   "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                   "examples": [
                     "digitalocean/sample-golang"
                   ],
                   "type": "string"
                 }
               }
             },
             "log_destinations": {
               "description": "A list of configured log forwarding destinations.",
               "type": "array",
               "items": {
                 "title": "Configurations for external logging.",
                 "type": "object",
                 "required": [
                   "name"
                 ],
                 "properties": {
                   "datadog": {
                     "description": "DataDog configuration.",
                     "type": "object",
                     "required": [
                       "api_key"
                     ],
                     "properties": {
                       "api_key": {
                         "description": "Datadog API key.",
                         "examples": [
                           "abcdefghijklmnopqrstuvwxyz0123456789"
                         ],
                         "type": "string"
                       },
                       "endpoint": {
                         "description": "Datadog HTTP log intake endpoint.",
                         "examples": [
                           "https://mydatadogendpoint.com"
                         ],
                         "type": "string"
                       }
                     }
                   },
                   "logtail": {
                     "description": "Logtail configuration.",
                     "type": "object",
                     "required": [
                       "endpoint"
                     ],
                     "properties": {
                       "token": {
                         "description": "Logtail token.",
                         "examples": [
                           "abcdefghijklmnopqrstuvwxyz0123456789"
                         ],
                         "type": "string"
                       }
                     }
                   },
                   "name": {
                     "examples": [
                       "my_log_destination"
                     ],
                     "type": "string",
                     "maxLength": 42,
                     "minLength": 2,
                     "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                   },
                   "open_search": {
                     "description": "OpenSearch configuration.",
                     "type": "object",
                     "properties": {
                       "basic_auth": {
                         "description": "Configure Username and/or Password for Basic authentication.",
                         "type": "object",
                         "properties": {
                           "password": {
                             "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                             "examples": [
                               "password1"
                             ],
                             "type": "string"
                           },
                           "user": {
                             "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                             "examples": [
                               "apps_user"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "cluster_name": {
                         "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                         "examples": [
                           "my-opensearch-cluster"
                         ],
                         "type": "string"
                       },
                       "endpoint": {
                         "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                         "examples": [
                           "https://example.com:9300"
                         ],
                         "type": "string"
                       },
                       "index_name": {
                         "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                         "default": "logs",
                         "examples": [
                           "logs"
                         ],
                         "type": "string"
                       }
                     }
                   },
                   "papertrail": {
                     "description": "Papertrail configuration.",
                     "type": "object",
                     "required": [
                       "endpoint"
                     ],
                     "properties": {
                       "endpoint": {
                         "description": "Papertrail syslog endpoint.",
                         "examples": [
                           "https://mypapertrailendpoint.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 }
               }
             },
             "name": {
               "description": "The name. Must be unique across all components within the same app.",
               "examples": [
                 "api"
               ],
               "type": "string",
               "maxLength": 32,
               "minLength": 2,
               "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
             },
             "routes": {
               "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
               "deprecated": true,
               "type": "array",
               "items": {
                 "title": "A criterion for routing HTTP traffic to a component.",
                 "type": "object",
                 "properties": {
                   "path": {
                     "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                     "examples": [
                       "/api"
                     ],
                     "type": "string"
                   },
                   "preserve_path_prefix": {
                     "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                     "examples": [
                       true
                     ],
                     "type": "boolean"
                   }
                 }
               }
             },
             "source_dir": {
               "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
               "examples": [
                 "path/to/dir"
               ],
               "type": "string"
             }
           }
         }
       },
       "ingress": {
         "description": "Specification for app ingress configurations.",
         "type": "object",
         "properties": {
           "custom_error_page_url": {
             "description": "Optional HTTPS URL of a custom error page to display when the app is unreachable. The\npage is shown in a full-viewport iframe. The target must allow framing: avoid\n`X-Frame-Options: DENY` and a restrictive `Content-Security-Policy` `frame-ancestors`\nthat blocks the platform. If omitted, the default platform error page is used.",
             "examples": [
               "https://status.example.com/app-unavailable"
             ],
             "type": "string",
             "format": "uri",
             "pattern": "^https://"
           },
           "rules": {
             "description": "Rules for configuring HTTP ingress for component routes, CORS, rewrites, and redirects.",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "component": {
                   "description": "The component to route to. Only one of `component` or `redirect` may be set.",
                   "type": "object",
                   "required": [
                     "name"
                   ],
                   "properties": {
                     "name": {
                       "description": "The name of the component to route to.",
                       "examples": [
                         "web"
                       ],
                       "type": "string"
                     },
                     "preserve_path_prefix": {
                       "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`. Note: this is not applicable for Functions Components and is mutually exclusive with `rewrite`.",
                       "examples": [
                         "true"
                       ],
                       "type": "string"
                     },
                     "rewrite": {
                       "description": "An optional field that will rewrite the path of the component to be what is specified here. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If you specified the rewrite to be `/v1/`, requests to `/api/list` would be rewritten to `/v1/list`. Note: this is mutually exclusive with `preserve_path_prefix`.",
                       "examples": [
                         "/api/v1/"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "cors": {
                   "type": "object",
                   "properties": {
                     "allow_credentials": {
                       "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                       "examples": [
                         false
                       ],
                       "type": "boolean"
                     },
                     "allow_headers": {
                       "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                       "examples": [
                         [
                           "Content-Type",
                           "X-Custom-Header"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "allow_methods": {
                       "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                       "examples": [
                         [
                           "GET",
                           "OPTIONS",
                           "POST",
                           "PUT",
                           "PATCH",
                           "DELETE"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "allow_origins": {
                       "description": "The set of allowed CORS origins.",
                       "examples": [
                         [
                           {
                             "exact": "https://www.example.com"
                           },
                           {
                             "regex": "^.*example.com"
                           }
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "object",
                         "properties": {
                           "exact": {
                             "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                             "examples": [
                               "https://www.example.com"
                             ],
                             "type": [
                               "string",
                               "null"
                             ],
                             "maxLength": 256
                           },
                           "prefix": {
                             "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                             "deprecated": true,
                             "examples": [
                               "https://www.example.com"
                             ],
                             "type": [
                               "string",
                               "null"
                             ],
                             "maxLength": 256
                           },
                           "regex": {
                             "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                             "examples": [
                               "^.*example.com"
                             ],
                             "type": "string",
                             "maxLength": 256,
                             "minLength": 1
                           }
                         }
                       }
                     },
                     "expose_headers": {
                       "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                       "examples": [
                         [
                           "Content-Encoding",
                           "X-Custom-Header"
                         ]
                       ],
                       "type": "array",
                       "items": {
                         "type": "string"
                       }
                     },
                     "max_age": {
                       "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                       "examples": [
                         "5h30m"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "match": {
                   "description": "The match configuration for the rule.",
                   "type": "object",
                   "properties": {
                     "authority": {
                       "description": "The authority to match on.",
                       "type": "object",
                       "required": [
                         "exact"
                       ],
                       "properties": {
                         "exact": {
                           "description": "Exact string match. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                           "examples": [
                             "example.com"
                           ],
                           "type": [
                             "string",
                             "null"
                           ],
                           "maxLength": 256
                         }
                       }
                     },
                     "path": {
                       "description": "The path to match on.",
                       "type": "object",
                       "required": [
                         "prefix"
                       ],
                       "properties": {
                         "prefix": {
                           "description": "Prefix-based match. For example, `/api` will match `/api`, `/api/`, and any nested paths such as `/api/v1/endpoint`.",
                           "examples": [
                             "/api"
                           ],
                           "type": [
                             "string",
                             "null"
                           ],
                           "maxLength": 256
                         }
                       }
                     }
                   }
                 },
                 "redirect": {
                   "description": "The redirect configuration for the rule. Only one of `component` or `redirect` may be set.",
                   "type": "object",
                   "properties": {
                     "authority": {
                       "description": "The authority/host to redirect to. This can be a hostname or IP address. Note: use `port` to set the port.",
                       "examples": [
                         "example.com"
                       ],
                       "type": "string"
                     },
                     "port": {
                       "description": "The port to redirect to.",
                       "examples": [
                         443
                       ],
                       "type": "integer",
                       "format": "int64"
                     },
                     "redirect_code": {
                       "description": "The redirect code to use. Defaults to `302`. Supported values are 300, 301, 302, 303, 304, 307, 308.",
                       "examples": [
                         302
                       ],
                       "type": "integer",
                       "format": "int64"
                     },
                     "scheme": {
                       "description": "The scheme to redirect to. Supported values are `http` or `https`. Default: `https`.",
                       "examples": [
                         "https"
                       ],
                       "type": "string"
                     },
                     "uri": {
                       "description": "An optional URI path to redirect to. Note: if this is specified the whole URI of the original request will be overwritten to this value, irrespective of the original request URI being matched.",
                       "examples": [
                         "/about"
                       ],
                       "type": "string"
                     }
                   }
                 }
               }
             }
           }
         }
       },
       "jobs": {
         "description": "Pre and post deployment workloads which do not expose publicly-accessible HTTP routes.",
         "type": "array",
         "items": {
           "allOf": [
             {
               "type": "object",
               "properties": {
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "build_command": {
                   "description": "An optional build command to run while building this component from source.",
                   "examples": [
                     "npm run build"
                   ],
                   "type": "string"
                 },
                 "dockerfile_path": {
                   "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                   "examples": [
                     "path/to/Dockerfile"
                   ],
                   "type": "string"
                 },
                 "environment_slug": {
                   "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                   "examples": [
                     "node-js"
                   ],
                   "type": "string"
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "image": {
                   "type": "object",
                   "properties": {
                     "deploy_on_push": {
                       "type": "object",
                       "properties": {
                         "enabled": {
                           "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         }
                       }
                     },
                     "digest": {
                       "description": "The image digest. Cannot be specified if tag is provided.",
                       "examples": [
                         "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                       ],
                       "type": "string"
                     },
                     "registry": {
                       "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                       "examples": [
                         "registry.hub.docker.com"
                       ],
                       "type": "string"
                     },
                     "registry_credentials": {
                       "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                       "examples": [
                         "my-dockerhub-username:dckr_pat_the_access_token"
                       ],
                       "type": "string"
                     },
                     "registry_type": {
                       "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                       "examples": [
                         "DOCR"
                       ],
                       "type": "string",
                       "enum": [
                         "DOCKER_HUB",
                         "DOCR",
                         "GHCR"
                       ]
                     },
                     "repository": {
                       "description": "The repository name.",
                       "examples": [
                         "origin/master"
                       ],
                       "type": "string"
                     },
                     "tag": {
                       "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                       "default": "latest",
                       "examples": [
                         "latest"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "run_command": {
                   "description": "An optional run command to override the component's default.",
                   "examples": [
                     "bin/api"
                   ],
                   "type": "string"
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             },
             {
               "type": "object",
               "properties": {
                 "instance_count": {
                   "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                   "default": 1,
                   "examples": [
                     2
                   ],
                   "type": "integer",
                   "format": "int64",
                   "minimum": 1.0
                 },
                 "instance_size_slug": {
                   "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                   "examples": [
                     "apps-s-1vcpu-0.5gb"
                   ],
                   "oneOf": [
                     {
                       "title": "Size slug",
                       "default": "apps-s-1vcpu-0.5gb",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "type": "string",
                       "enum": [
                         "apps-s-1vcpu-0.5gb",
                         "apps-s-1vcpu-1gb-fixed",
                         "apps-s-1vcpu-1gb",
                         "apps-s-1vcpu-2gb",
                         "apps-s-2vcpu-4gb",
                         "apps-d-1vcpu-0.5gb",
                         "apps-d-1vcpu-1gb",
                         "apps-d-1vcpu-2gb",
                         "apps-d-1vcpu-4gb",
                         "apps-d-2vcpu-4gb",
                         "apps-d-2vcpu-8gb",
                         "apps-d-4vcpu-8gb",
                         "apps-d-4vcpu-16gb",
                         "apps-d-8vcpu-32gb"
                       ]
                     },
                     {
                       "title": "Deprecated",
                       "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                       "deprecated": true,
                       "examples": [
                         "basic-xxs"
                       ],
                       "type": "string",
                       "enum": [
                         "basic-xxs",
                         "basic-xs",
                         "basic-s",
                         "basic-m",
                         "professional-xs",
                         "professional-s",
                         "professional-m",
                         "professional-1l",
                         "professional-l",
                         "professional-xl"
                       ]
                     }
                   ]
                 }
               }
             },
             {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "kind": {
                   "description": "- UNSPECIFIED: Default job type, will auto-complete to POST_DEPLOY kind.\n- PRE_DEPLOY: Indicates a job that runs before an app deployment.\n- POST_DEPLOY: Indicates a job that runs after an app deployment.\n- FAILED_DEPLOY: Indicates a job that runs after a component fails to deploy.",
                   "default": "UNSPECIFIED",
                   "examples": [
                     "PRE_DEPLOY"
                   ],
                   "type": "string",
                   "enum": [
                     "UNSPECIFIED",
                     "PRE_DEPLOY",
                     "POST_DEPLOY",
                     "FAILED_DEPLOY"
                   ]
                 },
                 "termination": {
                   "type": "object",
                   "properties": {
                     "grace_period_seconds": {
                       "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                       "examples": [
                         120
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 600.0,
                       "minimum": 1.0
                     }
                   }
                 }
               }
             }
           ]
         }
       },
       "maintenance": {
         "description": "Specification to configure maintenance settings for the app, such as maintenance mode and archiving the app.",
         "type": "object",
         "properties": {
           "archive": {
             "description": "Indicates whether the app should be archived. Setting this to true implies that enabled is set to true.",
             "examples": [
               true
             ],
             "type": "boolean"
           },
           "enabled": {
             "description": "Indicates whether maintenance mode should be enabled for the app.",
             "examples": [
               true
             ],
             "type": "boolean"
           },
           "offline_page_url": {
             "description": "A custom offline page to display when maintenance mode is enabled or the app is archived.",
             "examples": [
               "https://example.com/offline.html"
             ],
             "type": "string"
           }
         }
       },
       "name": {
         "description": "The name of the app. Must be unique across all apps in the same account.",
         "examples": [
           "web-app-01"
         ],
         "type": "string",
         "maxLength": 32,
         "minLength": 2,
         "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
       },
       "region": {
         "description": "The slug form of the geographical origin of the app. Default: `nearest available`",
         "examples": [
           "nyc"
         ],
         "type": "string",
         "enum": [
           "atl",
           "nyc",
           "sfo",
           "tor",
           "ams",
           "fra",
           "lon",
           "blr",
           "sgp",
           "syd"
         ]
       },
       "services": {
         "description": "Workloads which expose publicly-accessible HTTP services.",
         "type": "array",
         "items": {
           "allOf": [
             {
               "type": "object",
               "properties": {
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "build_command": {
                   "description": "An optional build command to run while building this component from source.",
                   "examples": [
                     "npm run build"
                   ],
                   "type": "string"
                 },
                 "dockerfile_path": {
                   "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                   "examples": [
                     "path/to/Dockerfile"
                   ],
                   "type": "string"
                 },
                 "environment_slug": {
                   "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                   "examples": [
                     "node-js"
                   ],
                   "type": "string"
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "image": {
                   "type": "object",
                   "properties": {
                     "deploy_on_push": {
                       "type": "object",
                       "properties": {
                         "enabled": {
                           "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         }
                       }
                     },
                     "digest": {
                       "description": "The image digest. Cannot be specified if tag is provided.",
                       "examples": [
                         "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                       ],
                       "type": "string"
                     },
                     "registry": {
                       "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                       "examples": [
                         "registry.hub.docker.com"
                       ],
                       "type": "string"
                     },
                     "registry_credentials": {
                       "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                       "examples": [
                         "my-dockerhub-username:dckr_pat_the_access_token"
                       ],
                       "type": "string"
                     },
                     "registry_type": {
                       "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                       "examples": [
                         "DOCR"
                       ],
                       "type": "string",
                       "enum": [
                         "DOCKER_HUB",
                         "DOCR",
                         "GHCR"
                       ]
                     },
                     "repository": {
                       "description": "The repository name.",
                       "examples": [
                         "origin/master"
                       ],
                       "type": "string"
                     },
                     "tag": {
                       "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                       "default": "latest",
                       "examples": [
                         "latest"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "run_command": {
                   "description": "An optional run command to override the component's default.",
                   "examples": [
                     "bin/api"
                   ],
                   "type": "string"
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             },
             {
               "type": "object",
               "properties": {
                 "instance_count": {
                   "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                   "default": 1,
                   "examples": [
                     2
                   ],
                   "type": "integer",
                   "format": "int64",
                   "minimum": 1.0
                 },
                 "instance_size_slug": {
                   "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                   "examples": [
                     "apps-s-1vcpu-0.5gb"
                   ],
                   "oneOf": [
                     {
                       "title": "Size slug",
                       "default": "apps-s-1vcpu-0.5gb",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "type": "string",
                       "enum": [
                         "apps-s-1vcpu-0.5gb",
                         "apps-s-1vcpu-1gb-fixed",
                         "apps-s-1vcpu-1gb",
                         "apps-s-1vcpu-2gb",
                         "apps-s-2vcpu-4gb",
                         "apps-d-1vcpu-0.5gb",
                         "apps-d-1vcpu-1gb",
                         "apps-d-1vcpu-2gb",
                         "apps-d-1vcpu-4gb",
                         "apps-d-2vcpu-4gb",
                         "apps-d-2vcpu-8gb",
                         "apps-d-4vcpu-8gb",
                         "apps-d-4vcpu-16gb",
                         "apps-d-8vcpu-32gb"
                       ]
                     },
                     {
                       "title": "Deprecated",
                       "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                       "deprecated": true,
                       "examples": [
                         "basic-xxs"
                       ],
                       "type": "string",
                       "enum": [
                         "basic-xxs",
                         "basic-xs",
                         "basic-s",
                         "basic-m",
                         "professional-xs",
                         "professional-s",
                         "professional-m",
                         "professional-1l",
                         "professional-l",
                         "professional-xl"
                       ]
                     }
                   ]
                 }
               }
             },
             {
               "type": "object",
               "required": [
                 "name"
               ],
               "properties": {
                 "autoscaling": {
                   "allOf": [
                     {
                       "description": "Configuration for automatically scaling this component based on metrics.",
                       "type": "object",
                       "properties": {
                         "max_instance_count": {
                           "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                           "examples": [
                             3
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "maximum": 250.0,
                           "minimum": 1.0
                         },
                         "metrics": {
                           "description": "The metrics that the component is scaled on.",
                           "type": "object",
                           "properties": {
                             "cpu": {
                               "description": "Settings for scaling the component based on CPU utilization.",
                               "type": "object",
                               "properties": {
                                 "percent": {
                                   "description": "The average target CPU utilization for the component.",
                                   "default": 80,
                                   "examples": [
                                     75
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "maximum": 100.0,
                                   "minimum": 1.0
                                 }
                               }
                             }
                           }
                         },
                         "min_instance_count": {
                           "description": "The minimum amount of instances for this component.",
                           "examples": [
                             2
                           ],
                           "type": "integer",
                           "format": "uint32",
                           "minimum": 1.0
                         }
                       }
                     },
                     {
                       "type": "object",
                       "properties": {
                         "metrics": {
                           "type": "object",
                           "properties": {
                             "request_duration": {
                               "description": "Settings for scaling the component based on request duration.",
                               "type": "object",
                               "properties": {
                                 "p95_milliseconds": {
                                   "description": "The p95 target request duration in milliseconds for the component.",
                                   "examples": [
                                     500
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "minimum": 1.0
                                 }
                               }
                             },
                             "requests_per_second": {
                               "description": "Settings for scaling the component based on requests per second.",
                               "type": "object",
                               "properties": {
                                 "per_instance": {
                                   "description": "The target number of requests per second per instance for the component.",
                                   "examples": [
                                     100
                                   ],
                                   "type": "integer",
                                   "format": "uint32",
                                   "minimum": 1.0
                                 }
                               }
                             }
                           }
                         }
                       }
                     }
                   ]
                 },
                 "cors": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "description": "(Deprecated - Use Ingress Rules instead)."
                     },
                     {
                       "deprecated": true
                     }
                   ]
                 },
                 "health_check": {
                   "type": "object",
                   "properties": {
                     "failure_threshold": {
                       "description": "The number of failed health checks before considered unhealthy.",
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "int32"
                     },
                     "http_path": {
                       "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                       "examples": [
                         "/health"
                       ],
                       "type": "string"
                     },
                     "initial_delay_seconds": {
                       "description": "The number of seconds to wait before beginning health checks.",
                       "examples": [
                         30
                       ],
                       "type": "integer",
                       "format": "int32"
                     },
                     "period_seconds": {
                       "description": "The number of seconds to wait between health checks.",
                       "examples": [
                         60
                       ],
                       "type": "integer",
                       "format": "int32"
                     },
                     "port": {
                       "description": "The port on which the health check will be performed. If not set, the health check will be performed on the component's http_port.",
                       "examples": [
                         80
                       ],
                       "type": "integer",
                       "format": "int64",
                       "maximum": 65535.0,
                       "minimum": 1.0
                     },
                     "success_threshold": {
                       "description": "The number of successful health checks before considered healthy.",
                       "examples": [
                         3
                       ],
                       "type": "integer",
                       "format": "int32"
                     },
                     "timeout_seconds": {
                       "description": "The number of seconds after which the check times out.",
                       "examples": [
                         45
                       ],
                       "type": "integer",
                       "format": "int32"
                     }
                   }
                 },
                 "http_port": {
                   "description": "The internal port on which this service's run command will listen. Default: 8080\nIf there is not an environment variable with the name `PORT`, one will be automatically added with its value set to the value of this field.",
                   "examples": [
                     3000
                   ],
                   "type": "integer",
                   "format": "int64",
                   "maximum": 65535.0,
                   "minimum": 1.0
                 },
                 "internal_ports": {
                   "description": "The ports on which this service will listen for internal traffic.",
                   "examples": [
                     [
                       80,
                       443
                     ]
                   ],
                   "type": "array",
                   "items": {
                     "type": "integer",
                     "format": "int64"
                   }
                 },
                 "liveness_health_check": {
                   "type": "object",
                   "properties": {
                     "failure_threshold": {
                       "description": "The number of failed health checks before considered unhealthy.",
                       "examples": [
                         18
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 50.0,
                       "minimum": 1.0
                     },
                     "http_path": {
                       "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                       "examples": [
                         "/health"
                       ],
                       "type": "string"
                     },
                     "initial_delay_seconds": {
                       "description": "The number of seconds to wait before beginning health checks.",
                       "examples": [
                         30
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 3600.0,
                       "minimum": 0.0
                     },
                     "period_seconds": {
                       "description": "The number of seconds to wait between health checks.",
                       "examples": [
                         10
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 300.0,
                       "minimum": 1.0
                     },
                     "port": {
                       "description": "The port on which the health check will be performed.",
                       "examples": [
                         80
                       ],
                       "type": "integer",
                       "format": "int64",
                       "maximum": 65535.0,
                       "minimum": 1.0
                     },
                     "success_threshold": {
                       "description": "The number of successful health checks before considered healthy.",
                       "examples": [
                         1
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 1.0,
                       "minimum": 1.0
                     },
                     "timeout_seconds": {
                       "description": "The number of seconds after which the check times out.",
                       "examples": [
                         1
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 120.0,
                       "minimum": 1.0
                     }
                   }
                 },
                 "protocol": {
                   "description": "The protocol which the service uses to serve traffic on the http_port.\n\n- `HTTP`: The app is serving the HTTP protocol. Default.\n- `HTTP2`: The app is serving the HTTP/2 protocol. Currently, this needs to be implemented in the service by serving HTTP/2 cleartext (h2c).\n",
                   "examples": [
                     "HTTP"
                   ],
                   "type": "string",
                   "enum": [
                     "HTTP",
                     "HTTP2"
                   ]
                 },
                 "routes": {
                   "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                   "deprecated": true,
                   "type": "array",
                   "items": {
                     "title": "A criterion for routing HTTP traffic to a component.",
                     "type": "object",
                     "properties": {
                       "path": {
                         "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                         "examples": [
                           "/api"
                         ],
                         "type": "string"
                       },
                       "preserve_path_prefix": {
                         "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                         "examples": [
                           true
                         ],
                         "type": "boolean"
                       }
                     }
                   }
                 },
                 "termination": {
                   "type": "object",
                   "properties": {
                     "drain_seconds": {
                       "description": "The number of seconds to wait between selecting a container instance for termination and issuing the TERM signal. Selecting a container instance for termination begins an asynchronous drain of new requests on upstream load-balancers. (Default 15)",
                       "examples": [
                         15
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 110.0,
                       "minimum": 1.0
                     },
                     "grace_period_seconds": {
                       "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                       "examples": [
                         120
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 600.0,
                       "minimum": 1.0
                     }
                   }
                 }
               }
             }
           ]
         }
       },
       "static_sites": {
         "description": "Content which can be rendered to static web assets.",
         "type": "array",
         "items": {
           "allOf": [
             {
               "type": "object",
               "properties": {
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "build_command": {
                   "description": "An optional build command to run while building this component from source.",
                   "examples": [
                     "npm run build"
                   ],
                   "type": "string"
                 },
                 "dockerfile_path": {
                   "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                   "examples": [
                     "path/to/Dockerfile"
                   ],
                   "type": "string"
                 },
                 "environment_slug": {
                   "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                   "examples": [
                     "node-js"
                   ],
                   "type": "string"
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "image": {
                   "type": "object",
                   "properties": {
                     "deploy_on_push": {
                       "type": "object",
                       "properties": {
                         "enabled": {
                           "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         }
                       }
                     },
                     "digest": {
                       "description": "The image digest. Cannot be specified if tag is provided.",
                       "examples": [
                         "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                       ],
                       "type": "string"
                     },
                     "registry": {
                       "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                       "examples": [
                         "registry.hub.docker.com"
                       ],
                       "type": "string"
                     },
                     "registry_credentials": {
                       "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                       "examples": [
                         "my-dockerhub-username:dckr_pat_the_access_token"
                       ],
                       "type": "string"
                     },
                     "registry_type": {
                       "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                       "examples": [
                         "DOCR"
                       ],
                       "type": "string",
                       "enum": [
                         "DOCKER_HUB",
                         "DOCR",
                         "GHCR"
                       ]
                     },
                     "repository": {
                       "description": "The repository name.",
                       "examples": [
                         "origin/master"
                       ],
                       "type": "string"
                     },
                     "tag": {
                       "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                       "default": "latest",
                       "examples": [
                         "latest"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "run_command": {
                   "description": "An optional run command to override the component's default.",
                   "examples": [
                     "bin/api"
                   ],
                   "type": "string"
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             },
             {
               "type": "object",
               "properties": {
                 "catchall_document": {
                   "description": "The name of the document to use as the fallback for any requests to documents that are not found when serving this static site. Only 1 of `catchall_document` or `error_document` can be set.",
                   "examples": [
                     "index.html"
                   ],
                   "type": "string"
                 },
                 "cors": {
                   "allOf": [
                     {
                       "type": "object",
                       "properties": {
                         "allow_credentials": {
                           "description": "Whether browsers should expose the response to the client-side JavaScript code when the request’s credentials mode is include. This configures the `Access-Control-Allow-Credentials` header.",
                           "examples": [
                             false
                           ],
                           "type": "boolean"
                         },
                         "allow_headers": {
                           "description": "The set of allowed HTTP request headers. This configures the `Access-Control-Allow-Headers` header.",
                           "examples": [
                             [
                               "Content-Type",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_methods": {
                           "description": "The set of allowed HTTP methods. This configures the `Access-Control-Allow-Methods` header.",
                           "examples": [
                             [
                               "GET",
                               "OPTIONS",
                               "POST",
                               "PUT",
                               "PATCH",
                               "DELETE"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "allow_origins": {
                           "description": "The set of allowed CORS origins.",
                           "examples": [
                             [
                               {
                                 "exact": "https://www.example.com"
                               },
                               {
                                 "regex": "^.*example.com"
                               }
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "object",
                             "properties": {
                               "exact": {
                                 "description": "Exact string match. Only 1 of `exact`, `prefix`, or `regex` must be set. An empty string is a valid value and will be serialized explicitly rather than being omitted from the payload.",
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "prefix": {
                                 "description": "Prefix-based match. Only 1 of `exact`, `prefix`, or `regex` must be set.",
                                 "deprecated": true,
                                 "examples": [
                                   "https://www.example.com"
                                 ],
                                 "type": [
                                   "string",
                                   "null"
                                 ],
                                 "maxLength": 256
                               },
                               "regex": {
                                 "description": "RE2 style regex-based match. Only 1 of `exact`, `prefix`, or `regex` must be set. For more information about RE2 syntax, see: <https://github.com/google/re2/wiki/Syntax>",
                                 "examples": [
                                   "^.*example.com"
                                 ],
                                 "type": "string",
                                 "maxLength": 256,
                                 "minLength": 1
                               }
                             }
                           }
                         },
                         "expose_headers": {
                           "description": "The set of HTTP response headers that browsers are allowed to access. This configures the `Access-Control-Expose-Headers` header.",
                           "examples": [
                             [
                               "Content-Encoding",
                               "X-Custom-Header"
                             ]
                           ],
                           "type": "array",
                           "items": {
                             "type": "string"
                           }
                         },
                         "max_age": {
                           "description": "An optional duration specifying how long browsers can cache the results of a preflight request. This configures the `Access-Control-Max-Age` header.",
                           "examples": [
                             "5h30m"
                           ],
                           "type": "string"
                         }
                       }
                     },
                     {
                       "description": "(Deprecated - Use Ingress Rules instead)."
                     },
                     {
                       "deprecated": true
                     }
                   ]
                 },
                 "error_document": {
                   "description": "The name of the error document to use when serving this static site. Default: 404.html. If no such file exists within the built assets, App Platform will supply one.",
                   "default": "404.html",
                   "examples": [
                     "error.html"
                   ],
                   "type": "string"
                 },
                 "index_document": {
                   "description": "The name of the index document to use when serving this static site. Default: index.html",
                   "default": "index.html",
                   "examples": [
                     "main.html"
                   ],
                   "type": "string"
                 },
                 "output_dir": {
                   "description": "An optional path to where the built assets will be located, relative to the build context. If not set, App Platform will automatically scan for these directory names: `_static`, `dist`, `public`, `build`.",
                   "examples": [
                     "dist/"
                   ],
                   "type": "string"
                 },
                 "routes": {
                   "description": "(Deprecated - Use Ingress Rules instead). A list of HTTP routes that should be routed to this component.",
                   "deprecated": true,
                   "type": "array",
                   "items": {
                     "title": "A criterion for routing HTTP traffic to a component.",
                     "type": "object",
                     "properties": {
                       "path": {
                         "description": "(Deprecated - Use Ingress Rules instead). An HTTP path prefix. Paths must start with / and must be unique across all components within an app.",
                         "examples": [
                           "/api"
                         ],
                         "type": "string"
                       },
                       "preserve_path_prefix": {
                         "description": "An optional flag to preserve the path that is forwarded to the backend service. By default, the HTTP request path will be trimmed from the left when forwarded to the component. For example, a component with `path=/api` will have requests to `/api/list` trimmed to `/list`. If this value is `true`, the path will remain `/api/list`.",
                         "examples": [
                           true
                         ],
                         "type": "boolean"
                       }
                     }
                   }
                 }
               }
             }
           ],
           "required": [
             "name"
           ]
         }
       },
       "vpc": {
         "readOnly": true,
         "type": "object",
         "properties": {
           "egress_ips": {
             "title": "The egress ips associated with the VPC.",
             "type": "array",
             "items": {
               "type": "object",
               "properties": {
                 "ip": {
                   "examples": [
                     "10.0.0.1"
                   ],
                   "type": "string"
                 }
               }
             }
           },
           "id": {
             "title": "The ID of the VPC.",
             "examples": [
               "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
             ],
             "type": "string"
           }
         }
       },
       "workers": {
         "description": "Workloads which do not expose publicly-accessible HTTP services.",
         "type": "array",
         "items": {
           "allOf": [
             {
               "type": "object",
               "properties": {
                 "bitbucket": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "build_command": {
                   "description": "An optional build command to run while building this component from source.",
                   "examples": [
                     "npm run build"
                   ],
                   "type": "string"
                 },
                 "dockerfile_path": {
                   "description": "The path to the Dockerfile relative to the root of the repo. If set, it will be used to build this component. Otherwise, App Platform will attempt to build it using buildpacks.",
                   "examples": [
                     "path/to/Dockerfile"
                   ],
                   "type": "string"
                 },
                 "environment_slug": {
                   "description": "An environment slug describing the type of this app. For a full list, please refer to [the product documentation](https://docs.digitalocean.com/products/app-platform/).",
                   "examples": [
                     "node-js"
                   ],
                   "type": "string"
                 },
                 "envs": {
                   "description": "A list of environment variables made available to the component.",
                   "type": "array",
                   "items": {
                     "type": "object",
                     "required": [
                       "key"
                     ],
                     "properties": {
                       "key": {
                         "description": "The variable name",
                         "examples": [
                           "BASE_URL"
                         ],
                         "type": "string",
                         "pattern": "^[_A-Za-z][_A-Za-z0-9]*$"
                       },
                       "scope": {
                         "description": "- RUN_TIME: Made available only at run-time\n- BUILD_TIME: Made available only at build-time\n- RUN_AND_BUILD_TIME: Made available at both build and run-time",
                         "default": "RUN_AND_BUILD_TIME",
                         "examples": [
                           "BUILD_TIME"
                         ],
                         "type": "string",
                         "enum": [
                           "UNSET",
                           "RUN_TIME",
                           "BUILD_TIME",
                           "RUN_AND_BUILD_TIME"
                         ]
                       },
                       "type": {
                         "description": "- GENERAL: A plain-text environment variable\n- SECRET: A secret encrypted environment variable",
                         "default": "GENERAL",
                         "examples": [
                           "GENERAL"
                         ],
                         "type": "string",
                         "enum": [
                           "GENERAL",
                           "SECRET"
                         ]
                       },
                       "value": {
                         "description": "The value. If the type is `SECRET`, the value will be encrypted on first submission. On following submissions, the encrypted value should be used.",
                         "examples": [
                           "http://example.com"
                         ],
                         "type": "string"
                       }
                     }
                   }
                 },
                 "git": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "repo_clone_url": {
                       "description": "The clone URL of the repo. Example: `https://github.com/digitalocean/sample-golang.git`",
                       "examples": [
                         "https://github.com/digitalocean/sample-golang.git"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "github": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "gitlab": {
                   "type": "object",
                   "properties": {
                     "branch": {
                       "description": "The name of the branch to use",
                       "examples": [
                         "main"
                       ],
                       "type": "string"
                     },
                     "deploy_on_push": {
                       "description": "Whether to automatically deploy new commits made to the repo",
                       "examples": [
                         true
                       ],
                       "type": "boolean"
                     },
                     "repo": {
                       "description": "The name of the repo in the format owner/repo. Example: `digitalocean/sample-golang`",
                       "examples": [
                         "digitalocean/sample-golang"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "image": {
                   "type": "object",
                   "properties": {
                     "deploy_on_push": {
                       "type": "object",
                       "properties": {
                         "enabled": {
                           "description": "Whether to automatically deploy new images. Can only be used for images hosted in DOCR and can only be used with an image tag, not a specific digest.",
                           "examples": [
                             true
                           ],
                           "type": "boolean"
                         }
                       }
                     },
                     "digest": {
                       "description": "The image digest. Cannot be specified if tag is provided.",
                       "examples": [
                         "sha256:795e91610e9cccb7bb80893fbabf9c808df7d52ae1f39cd1158618b4a33041ac"
                       ],
                       "type": "string"
                     },
                     "registry": {
                       "description": "The registry name. Must be left empty for the `DOCR` registry type.",
                       "examples": [
                         "registry.hub.docker.com"
                       ],
                       "type": "string"
                     },
                     "registry_credentials": {
                       "description": "The credentials to be able to pull the image. The value will be encrypted on first submission. On following submissions, the encrypted value should be used.\n- \"$username:$access_token\" for registries of type `DOCKER_HUB`.\n- \"$username:$access_token\" for registries of type `GHCR`.",
                       "examples": [
                         "my-dockerhub-username:dckr_pat_the_access_token"
                       ],
                       "type": "string"
                     },
                     "registry_type": {
                       "description": "- DOCKER_HUB: The DockerHub container registry type.\n- DOCR: The DigitalOcean container registry type.\n- GHCR: The Github container registry type.",
                       "examples": [
                         "DOCR"
                       ],
                       "type": "string",
                       "enum": [
                         "DOCKER_HUB",
                         "DOCR",
                         "GHCR"
                       ]
                     },
                     "repository": {
                       "description": "The repository name.",
                       "examples": [
                         "origin/master"
                       ],
                       "type": "string"
                     },
                     "tag": {
                       "description": "The repository tag. Defaults to `latest` if not provided and no digest is provided. Cannot be specified if digest is provided.",
                       "default": "latest",
                       "examples": [
                         "latest"
                       ],
                       "type": "string"
                     }
                   }
                 },
                 "log_destinations": {
                   "description": "A list of configured log forwarding destinations.",
                   "type": "array",
                   "items": {
                     "title": "Configurations for external logging.",
                     "type": "object",
                     "required": [
                       "name"
                     ],
                     "properties": {
                       "datadog": {
                         "description": "DataDog configuration.",
                         "type": "object",
                         "required": [
                           "api_key"
                         ],
                         "properties": {
                           "api_key": {
                             "description": "Datadog API key.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "Datadog HTTP log intake endpoint.",
                             "examples": [
                               "https://mydatadogendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "logtail": {
                         "description": "Logtail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "token": {
                             "description": "Logtail token.",
                             "examples": [
                               "abcdefghijklmnopqrstuvwxyz0123456789"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "name": {
                         "examples": [
                           "my_log_destination"
                         ],
                         "type": "string",
                         "maxLength": 42,
                         "minLength": 2,
                         "pattern": "^[A-Za-z0-9()\\[\\]'\"][-A-Za-z0-9_. \\/()\\[\\]]{0,40}[A-Za-z0-9()\\[\\]'\"]$"
                       },
                       "open_search": {
                         "description": "OpenSearch configuration.",
                         "type": "object",
                         "properties": {
                           "basic_auth": {
                             "description": "Configure Username and/or Password for Basic authentication.",
                             "type": "object",
                             "properties": {
                               "password": {
                                 "description": "Password for user defined in User. Is required when `endpoint` is set.\nCannot be set if using a DigitalOcean DBaaS OpenSearch cluster.",
                                 "examples": [
                                   "password1"
                                 ],
                                 "type": "string"
                               },
                               "user": {
                                 "description": "Username to authenticate with. Only required when `endpoint` is set.\nDefaults to `doadmin` when `cluster_name` is set.",
                                 "examples": [
                                   "apps_user"
                                 ],
                                 "type": "string"
                               }
                             }
                           },
                           "cluster_name": {
                             "description": "The name of a DigitalOcean DBaaS OpenSearch cluster to use as a log forwarding destination.\nCannot be specified if `endpoint` is also specified.",
                             "examples": [
                               "my-opensearch-cluster"
                             ],
                             "type": "string"
                           },
                           "endpoint": {
                             "description": "OpenSearch API Endpoint. Only HTTPS is supported. Format: https://\\<host\\>:\\<port\\>.\nCannot be specified if `cluster_name` is also specified.",
                             "examples": [
                               "https://example.com:9300"
                             ],
                             "type": "string"
                           },
                           "index_name": {
                             "description": "The index name to use for the logs. If not set, the default index name is \"logs\".",
                             "default": "logs",
                             "examples": [
                               "logs"
                             ],
                             "type": "string"
                           }
                         }
                       },
                       "papertrail": {
                         "description": "Papertrail configuration.",
                         "type": "object",
                         "required": [
                           "endpoint"
                         ],
                         "properties": {
                           "endpoint": {
                             "description": "Papertrail syslog endpoint.",
                             "examples": [
                               "https://mypapertrailendpoint.com"
                             ],
                             "type": "string"
                           }
                         }
                       }
                     }
                   }
                 },
                 "name": {
                   "description": "The name. Must be unique across all components within the same app.",
                   "examples": [
                     "api"
                   ],
                   "type": "string",
                   "maxLength": 32,
                   "minLength": 2,
                   "pattern": "^[a-z][a-z0-9-]{0,30}[a-z0-9]$"
                 },
                 "run_command": {
                   "description": "An optional run command to override the component's default.",
                   "examples": [
                     "bin/api"
                   ],
                   "type": "string"
                 },
                 "source_dir": {
                   "description": "An optional path to the working directory to use for the build. For Dockerfile builds, this will be used as the build context. Must be relative to the root of the repo.",
                   "examples": [
                     "path/to/dir"
                   ],
                   "type": "string"
                 }
               }
             },
             {
               "type": "object",
               "properties": {
                 "instance_count": {
                   "description": "The amount of instances that this component should be scaled to. Default: 1. Must not be set if autoscaling is used.",
                   "default": 1,
                   "examples": [
                     2
                   ],
                   "type": "integer",
                   "format": "int64",
                   "minimum": 1.0
                 },
                 "instance_size_slug": {
                   "description": "The instance size to use for this component. Default: `apps-s-1vcpu-0.5gb`",
                   "examples": [
                     "apps-s-1vcpu-0.5gb"
                   ],
                   "oneOf": [
                     {
                       "title": "Size slug",
                       "default": "apps-s-1vcpu-0.5gb",
                       "examples": [
                         "apps-s-1vcpu-0.5gb"
                       ],
                       "type": "string",
                       "enum": [
                         "apps-s-1vcpu-0.5gb",
                         "apps-s-1vcpu-1gb-fixed",
                         "apps-s-1vcpu-1gb",
                         "apps-s-1vcpu-2gb",
                         "apps-s-2vcpu-4gb",
                         "apps-d-1vcpu-0.5gb",
                         "apps-d-1vcpu-1gb",
                         "apps-d-1vcpu-2gb",
                         "apps-d-1vcpu-4gb",
                         "apps-d-2vcpu-4gb",
                         "apps-d-2vcpu-8gb",
                         "apps-d-4vcpu-8gb",
                         "apps-d-4vcpu-16gb",
                         "apps-d-8vcpu-32gb"
                       ]
                     },
                     {
                       "title": "Deprecated",
                       "description": "Deprecated size slugs for legacy plans. We strongly encourage customers\nto use the new plans when creating or upgrading apps.\n",
                       "deprecated": true,
                       "examples": [
                         "basic-xxs"
                       ],
                       "type": "string",
                       "enum": [
                         "basic-xxs",
                         "basic-xs",
                         "basic-s",
                         "basic-m",
                         "professional-xs",
                         "professional-s",
                         "professional-m",
                         "professional-1l",
                         "professional-l",
                         "professional-xl"
                       ]
                     }
                   ]
                 }
               }
             },
             {
               "type": "object",
               "properties": {
                 "autoscaling": {
                   "description": "Configuration for automatically scaling this component based on metrics.",
                   "type": "object",
                   "properties": {
                     "max_instance_count": {
                       "description": "The maximum amount of instances for this component. Maximum 250. Consider using a larger instance size if your application requires more than 250 instances.",
                       "examples": [
                         3
                       ],
                       "type": "integer",
                       "format": "uint32",
                       "maximum": 250.0,
                       "minimum": 1.0
                     },
                     "metrics": {
                       "description": "The metrics that the component is scaled on.",
                       "type": "object",
                       "properties": {
                         "cpu": {
                           "description": "Settings for scaling the component based on CPU utilization.",
                           "type": "object",
                           "properties": {
                             "percent": {
                               "description": "The average target CPU utilization for the component.",
                               "default": 80,
                               "examples": [
                                 75
                               ],
                               "type": "integer",
                               "format": "uint32",
                               "maximum": 100.0,
                               "minimum": 1.0
                             }
                           }
                         }
                       }
                     },
                     "min_instance_count": {
                       "description": "The minimum amount of instances for this component.",
                       "examples": [
                         2
                       ],
                       "type": "integer",
                       "format": "uint32",
                       "minimum": 1.0
                     }
                   }
                 },
                 "liveness_health_check": {
                   "type": "object",
                   "properties": {
                     "failure_threshold": {
                       "description": "The number of failed health checks before considered unhealthy.",
                       "examples": [
                         18
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 50.0,
                       "minimum": 1.0
                     },
                     "http_path": {
                       "description": "The route path used for the HTTP health check ping. If not set, the HTTP health check will be disabled and a TCP health check used instead.",
                       "examples": [
                         "/health"
                       ],
                       "type": "string"
                     },
                     "initial_delay_seconds": {
                       "description": "The number of seconds to wait before beginning health checks.",
                       "examples": [
                         30
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 3600.0,
                       "minimum": 0.0
                     },
                     "period_seconds": {
                       "description": "The number of seconds to wait between health checks.",
                       "examples": [
                         10
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 300.0,
                       "minimum": 1.0
                     },
                     "port": {
                       "description": "The port on which the health check will be performed.",
                       "examples": [
                         80
                       ],
                       "type": "integer",
                       "format": "int64",
                       "maximum": 65535.0,
                       "minimum": 1.0
                     },
                     "success_threshold": {
                       "description": "The number of successful health checks before considered healthy.",
                       "examples": [
                         1
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 1.0,
                       "minimum": 1.0
                     },
                     "timeout_seconds": {
                       "description": "The number of seconds after which the check times out.",
                       "examples": [
                         1
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 120.0,
                       "minimum": 1.0
                     }
                   }
                 },
                 "termination": {
                   "type": "object",
                   "properties": {
                     "grace_period_seconds": {
                       "description": "The number of seconds to wait between sending a TERM signal to a container and issuing a KILL which causes immediate shutdown. (Default 120)",
                       "examples": [
                         120
                       ],
                       "type": "integer",
                       "format": "int32",
                       "maximum": 600.0,
                       "minimum": 1.0
                     }
                   }
                 }
               }
             }
           ],
           "required": [
             "name"
           ]
         }
       }
     }
   },
   "tier_slug": {
     "title": "The current pricing tier slug of the app",
     "readOnly": true,
     "examples": [
       "basic"
     ],
     "type": "string"
   },
   "updated_at": {
     "title": "Time of the app's last configuration update",
     "readOnly": true,
     "examples": [
       "2020-12-01T00:42:16Z"
     ],
     "type": "string",
     "format": "date-time"
   },
   "vpc": {
     "readOnly": true,
     "type": "object",
     "properties": {
       "egress_ips": {
         "title": "The egress ips associated with the VPC.",
         "type": "array",
         "items": {
           "type": "object",
           "properties": {
             "ip": {
               "examples": [
                 "10.0.0.1"
               ],
               "type": "string"
             }
           }
         }
       },
       "id": {
         "title": "The ID of the VPC.",
         "examples": [
           "c22d8f48-4bc4-49f5-8ca0-58e7164427ac"
         ],
         "type": "string"
       }
     }
   }
 }
}

Fields§

§active_deployment: Option<AnAppDeployment>§created_at: Option<DateTime<Utc>>§dedicated_ips: Vec<TheDedicatedEgressIpAddressesAssociatedWithTheAppItem>§default_ingress: Option<String>§domains: Vec<ContainsAllDomainsForTheAppItem>§id: Option<String>§in_progress_deployment: Option<AnAppDeployment>§last_deployment_created_at: Option<DateTime<Utc>>§live_domain: Option<String>§live_url: Option<String>§live_url_base: Option<String>§owner_uuid: Option<String>§pending_deployment: Option<AppsGetResponseAppPendingDeployment>§pinned_deployment: Option<AppsGetResponseAppPinnedDeployment>§project_id: Option<String>

Requires project:read scope.

§region: Option<GeographicalInformationAboutAnAppOrigin>§spec: AppSpec§tier_slug: Option<String>§updated_at: Option<DateTime<Utc>>§vpc: Option<AppsGetResponseAppVpc>

Trait Implementations§

Source§

impl Clone for AppsGetResponseApp

Source§

fn clone(&self) -> AppsGetResponseApp

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AppsGetResponseApp

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for AppsGetResponseApp

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<&AppsGetResponseApp> for AppsGetResponseApp

Source§

fn from(value: &AppsGetResponseApp) -> Self

Converts to this type from the input type.
Source§

impl Serialize for AppsGetResponseApp

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more