Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.
In this post I will present, in very broad strokes, the workings of Platform.sh from a functional perspective. This will
not be a discussion of the intricate technical details, but rather a high-level description to help you understand what
is happening under the hood.– TLDR; Now go read the whole thing.
Basically what this means, is that you, the user, only have to concern yourself with writing the application code. We
take care of all the rest. We automatically manage everything that is needed to deploy the application, and all of its
runtime dependencies. You need a database? We will deploy and configure it. And we will configure your app so it
connects to it, as well as the copies of it that are made for each git branch. The same goes for search engines, caches,
and the file system. We will configure the web server, we will configure the network. We take care of making sure
everything can be consistently backed up, restored, etc. If something crashes, we take care of healing it; it’s our job
to make sure your application’s infrastructure stays alive.You take care of the code. That’s all. Batteries included. You don’t have to do any kind of sysadmin work. In order to
put your code intro production, you just git push it.We do give you all the tools to see what’s happening and to control precisely everything. It’s not a black box. You can
ssh to the server. You can connect directly to the database and continue to use all the tools you are accustomed to. You
can also automate everything. We have a REST API, as well as a very convenient CLI (command line interface) tool.
You can call it a “second generation PaaS”. In first generation PaaS systems, like
Heroku (but basically all the others), the service would manage the application (and do the
same kind of magic, you push code and it puts it into production), and sometimes another service (like for Heroku a
PostgreSQL database), but everything else was still the responsibility of the user. If you want a search engine, or
another type of database, well you needed to get that from a third party, as an add-on.They tried to make it as painless as possible, with integrated billing, and some help in injecting the configuration to
your application, so it would be a bit more seamless, but this of course makes it more expensive, and more importantly
much more complex (with many more possible failure scenarios, each different provider becomes a single point of failure
SPOF - for the whole thing). Because first generation PaaS systems manage only a small part of the application, you
are still left with many things you need to care of by yourself.
In Platform.sh all the services you use are fully managed by the platform itself. This means that when you back up your
application, everything get backed up. Consistently. Simply speaking, Platform.sh is a more general form of the same
idea. This is why we always talk about “clusters”. When we deploy your application we build the different services the
application will need and tie them together into a cluster. A group of servers that are a “whole”. Some of these
services will be things like infrastructure elements, databases and such, but you can also deploy multiple applications
in the same cluster.
If you have a website that runs on multiple APIs, each such service will be run as an independent server, but the whole
thing will be tied together into a single cluster to form a coherent entity. This is really nice for people that like
the “micro-service” style of architecture. With Platform.sh, we make it easy to manage a host of apps that work together.
Most PaaS systems, if not all, impose a
unique constraint on developers. Their file system is either fully Read-Only, or are ephemeral. So basically you can not
write to disk, or simply can not be sure it is going to be there. The main file system in Platform.sh is read-only, but
we allow you to declare as many Read/Write directories as you would like. And the storage is managed. So when you back
up your system they also get backed-up. When you clone a cluster they also get cloned. This means you do not need to
hack your application to use something like S3 in order to have file uploads. Applications like Drupal, Magento,
Prestashop or Wordspress, for example, function unmodified.
This is probably the most useful, and most innovative feature we have to propose. Because Platform.sh manages everything
as a coherent entity, with some powerful black magic we can almost instantly take a snapshot of the application cluster,
duplicate it and create a new one, and push it to production. Because everything is managed, the new cluster will get
new URLs, and all the apps inside it will get configured to work with each other. This allows you to create development
or staging environments as you need those. You can develop using “feature branches” and for each feature have a fully
isolated environment, so you can rapidly validate just that feature. This also means that you never have bugs that only
appear on production, because you can test each branch with real content.
Deploying an app means simply pushing the source code to our git server. The git server that runs on Platform.sh is at
the same time “just a normal git repository” and a very smart piece of software. When you have pushed to it, it will try
to understand what it needs to do. But you can also explicitly tell it precisely what requirements your application has.The only modification you need to do to your application is to tell it to load its configuration from the environment
(and we supply all the examples you need).There are a couple of “dot files” in YAML format you can put at the root of your application that will describe its
dependencies. You can say for example “my app needs mysql as a database”, or “my app needs this or that other php
extension”, or you can say “my front web app depends on these three API apps”. If for example you need to build your app
a specific Node.js, Python or Ruby library (for example Less or Jekyll) you simply specify those in the YAML file. There
are many other aspects of the application you can control through this simple declarative style. You don’t write scripts,
you just tell Platform.sh what you need.
First the git server is going to inspect what you have sent it and see that it understands what it is supposed to do. If
for example you have a syntax error in a configuration file, it will simply refuse the push. The same with code where
there is a huge security risk that Platform.sh knows how to detect. This is a good thing; Because it means you can’t
break your production system that easily. Once the git server has validated the configuration and sees it can satisfy
the requirements, it will build the cluster.The git server is smart. It can diff not only the code but also the infrastructure; Say you had a single MySQL database
in your cluster. And now you want two of those, maybe a PostrgreSQL and an Elastic Search instance. It will understand
what it needs to do in the next phase to make sure the topology of your cluster is modified to your new needs.
I already said the git server was smart… and it is a git server. So it will only build stuff that has changed. This is
one of the things that make Platform.sh so fast in deployment. Using Linux Containers, Platform.sh will now, in parallel,
build each server that had something that changed. If for example you pushed a Drupal Drush Makefile, or a PHP
composer.json file, it will know it needs to go search for the dependencies, and shuffle things around to create the
correct directory structure. If in your .platform.app.yaml file you also specified a “build hook”, you can now run
whatever scripts you wish.It is important to note that at this point the cluster has not been created yet. So you should not try to connect to a
database or imagine anything was daemonized; This is just a build phase.
The result of the build phase will be a file system, of which we now create an archive. We put this in permanent storage.
So the next time push code, if a server did not change… well we can just use this one; It also means that if you want
to revert a deploy, it is basically instantaneous. Deterministic deployments are repeatable and reversible, after all.
Now Platform.sh provisions of all the elements it needs to run your application cluster. It will mount each service in
its own container, configure the network so they can see each other (and only each other!) Here you need to remember
that the main file system is read-only. This is what guarantees the fact that we can do deterministic deployments.It will also mount all of the read/write directories you specified. Again unlike other PaaS systems, Platform.sh gives
you persistent, normal, storage, it just needs to know which directories contain stuff that is mutable.
A last step allows you to run a post-deploy script (you can use this for example to run an anonymization script for
deployment on development environments, clear caches, ping external CI tools, etc.) When this script runs you already
have access to a fully running application.
If everything went fine, we are now ready to configure routing, so your web traffic will arrive at your newly created
cluster. If something failed, well then nothing would have happened; the “old cluster” is still there, so from your
users’ perspective, nothing changed. Neither failed nor successful deployments result in application downtime. Because
we also route SSH you can also simply SSH to your cluster where you have the same permissions to execute commands as
the web server.
This was not a detailed explanation. Platform.sh has many other bells and whistles, but I hope this gives you a general
idea on what is happening behind the scenes.As a user, you don’t really need to know all of this; Most of the time for a relatively simple app, you would just push
the code, and it would run. You would click on “branch” and it will create a new development cluster. It is our job to
try to absorb all the tedious complexities. You do features, we run the infrastructure.But as you can understand, because Platform.sh uses standard tools (git), exposes a rich API and has a very cool CLI,
you can integrate it in more complex workflows. You could for example use the Github integration, or webhooks, to make
it work with an existing workflow or CI system like Jenkins or Travis. You could dynamically configure access rights and
per-environment routing rules; but most of the time, you’d just push code and not care about all of this.
Last modified on April 27, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Upsun Developer","description":"Upsun Developer — documentation, guides, and more.","colors":{"primary":"#6046ff","light":"#F7F8F8","dark":"#646F75"},"logo":{"light":"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-light.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=c35e42815c3d17de292fb0a86d41aa5f","dark":"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-dark.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=6bdea7a02f9b19da987e3502457d1ce8","href":"https://developer.upsun.com/"},"favicon":"https://mintcdn.com/upsun-c9761871/zc3aDujkEk92gVGr/favicon.png?fit=max\u0026auto=format\u0026n=zc3aDujkEk92gVGr\u0026q=85\u0026s=3b2ecb4deccafac0ea68acf519ab577b","api":{"examples":{"prefill":true}},"appearance":{"default":"system"},"background":{"color":{"light":"#F7F8F8","dark":"#0E1113"}},"navbar":{"links":[{"href":"https://auth.upsun.com/","label":"Console"},{"href":"https://upsun.com/demo/","label":"Watch a demo"}],"primary":{"type":"button","label":"Free trial","href":"https://auth.upsun.com/register"}},"footer":{"socials":{"github":"https://github.com/upsun","youtube":"https://www.youtube.com/@upsundotcom","x":"https://x.com/upsundotcom","linkedin":"https://www.linkedin.com/company/upsundotcom"},"links":[{"header":"Docs","items":[{"label":"Documentation","href":"/docs/get-started"},{"label":"Tutorials","href":"/tutorials"},{"label":"API Reference","href":"/api"},{"label":"CLI Reference","href":"/cli"}]},{"header":"Resources","items":[{"label":"Changelog","href":"/changelog"},{"label":"Upsun Blog","href":"https://upsun.com/blog"},{"label":"Community","href":"https://community.upsun.com"},{"label":"Support","href":"/docs/get-started/here/support"}]},{"header":"Company","items":[{"label":"About","href":"https://upsun.com/about-us"},{"label":"Pricing","href":"https://upsun.com/pricing"},{"label":"Careers","href":"https://upsun.com/jobs"}]}]},"seo":{"metatags":{"robots":"index, follow","description":"Upsun User Documentation, Dev Center, news, and more."},"indexing":"all"},"fonts":{"heading":{"family":"Instrument Sans","weight":700},"body":{"family":"Instrument Sans","weight":400}},"icons":{"library":"lucide"},"styling":{"latex":true},"integrations":{"gtm":{"tagId":"GTM-KJ4F382K"},"telemetry":{"enabled":true}},"errors":{"404":{"redirect":false,"title":"This page took an unexpected detour","description":"It might have moved, or maybe it never existed. Either way, let's get you back on track. Try searching above or head to one of these:\n\n\u003cdiv style={{textAlign: 'left'}}>\n\n\u003cColumns cols={2}>\n \u003cCard title=\"Get Started\" icon=\"rocket\" href=\"/docs/get-started\">\n Deploy your first app on Upsun\n \u003c/Card>\n \u003cCard title=\"Documentation\" icon=\"book-open\" href=\"/docs/core-concepts\">\n Explore the full documentation\n \u003c/Card>\n \u003cCard title=\"Tutorials\" icon=\"play\" href=\"/tutorials\">\n Follow step-by-step guides\n \u003c/Card>\n \u003cCard title=\"API Reference\" icon=\"code\" href=\"/api\">\n REST API and SDK reference\n \u003c/Card>\n\u003c/Columns>\n\n\u003c/div>"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"variables":{"config_platformsh":"Platform.sh","config_config_dir":".upsun/","config_config_files_app":".upsun/config.yaml","config_config_files_services":".upsun/config.yaml","config_config_files_routes":".upsun/config.yaml","config_config_files_env":".environment","config_glossary_mb":"MB","config_product_blackfire":"Upsun Blackfire","config_product_cloud":"Upsun Cloud","config_product_dispatch":"Upsun Dispatch","config_vendor_name":"Upsun","config_vendor_cli":"upsun","config_vendor_alt":"upsun","config_vendor_prefix":"UPSUN","config_vendor_community_url":"https://community.upsun.com/","config_vendor_hostname":"platformsh.site","config_vendor_host":"upsun.com","config_vendor_docs":"https://developer.upsun.com","config_vendor_api":"https://api.upsun.com","config_vendor_console":"https://console.upsun.com","config_vendor_sales":"https://upsun.com/contact-us/","config_vendor_support_url":"https://support.upsun.com","config_vendor_support_ticket":"https://support.upsun.com/hc/en-us/requests/new?ticket_form_id=35294051960082","config_vendor_support_feature":"https://support.upsun.com/hc/en-us/requests/new?ticket_form_id=37982573191442","config_vendor_support_requests":"https://support.upsun.com/hc/en-us/requests","config_vendor_register":"https://auth.upsun.com/register/","meta_version_solr":"10.0","meta_version_composable":"26.05","meta_version_nodejs":"26","meta_version_python":"3.14","meta_version_php_latest":"8.5"},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upsun-c9761871","hasAudioNarration":false,"actualSubdomain":"upsun-c9761871","customDomains":["developer.upsun.com"],"gitSource":{"type":"github","owner":"upsun","repo":"devcenter-mintlify","deployBranch":"main","contentDirectory":"contents","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af5090d350c7813e50b6b0f","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"Cloud","count":552},{"language":"default","tag":"API","count":280},{"language":"default","tag":"OpenAPI Reference","count":272},{"language":"default","tag":"Docs","count":256},{"language":"default","tag":"Configure Apps \u0026 Services","count":79},{"language":"default","tag":"Get Started","count":42},{"language":"default","tag":"Manage Projects","count":36},{"language":"default","tag":"Configure apps","count":30},{"language":"default","tag":"Pick a Stack","count":27},{"language":"default","tag":"PHP","count":26}],"searchSettings":{"maxResults":16}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"email","email":"advocacy@upsun.com"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","href":"/_mintlify/custom/upsun-c9761871/73d0de61d492770e/styles.css"}],"page":{"pagePath":"posts/how-it-works/how-platform-paas-works","slug":"/posts/how-it-works/how-platform-paas-works","pageMetadata":{"title":"How the Platform.sh PaaS works","date":"2015-03-03T00:00:00.000Z","image":"/images/posts/how-it-works/how-platform-paas-works/Blog_How_Platfromsh_Works.webp","featured":false,"author":["ori-pekelman"],"sidebar":{"exclude":true},"type":"post","tags":["drupal","php","magento","python","ruby"],"categories":["how-it-works"],"description":"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.","href":"/posts/how-it-works/how-platform-paas-works"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const PostMeta=({data={}})=>{const _components={a:`a`,..._provideComponents()};const{author,date}=data;const authors=Array.isArray(author)?author:author?[author]:[];const toSlug=value=>String(value).toLowerCase().trim().replace(/\\s+/g,`-`).replace(/[^a-z0-9-]/g,``);const resolveAuthor=slug=>{const entry=AUTHOR_MAP[slug]||{};const name=entry.name||slug;const github=entry.github||null;const url=`/posts/authors/${toSlug(slug)}`;const avatarUrl=github?`https://github.com/${github}.png?size=64`:null;return{name,url,avatarUrl}};const formattedDate=date?new Date(date).toLocaleDateString(`en-US`,{year:`numeric`,month:`long`,day:`numeric`}):null;if(authors.length===0\u0026\u0026!formattedDate)return null;const AUTHOR_MAP={\"aaron-collier\":{\"name\":`Aaron Collier`},\"aaron-dudenhofer\":{\"name\":`Aaron Dudenhofer`},\"aaron-porter\":{\"name\":`Aaron Porter`},\"adriaan-odendaal\":{\"name\":`Adriaan Odendaal`},\"ajmal\":{\"name\":`Ajmal Siddiqui`},\"akalipetis\":{\"name\":`Antonis Kalipetis`},\"alexander-varwijk\":{\"name\":`Alexander Varwijk`},\"alicia-bevilacqua\":{\"name\":`Alicia Bevilacqua`},\"amelie-deguerry\":{\"name\":`Amelie Deguerry`},\"anacidre\":{\"name\":`Ana Cidre`,\"linkedin\":`https://www.linkedin.com/in/ana-cidre`},\"andoni\":{\"name\":`Andoni Auzmendi`},\"andrei-taranu\":{\"name\":`Andrei (Alex) Taranu`,\"linkedin\":`https://www.linkedin.com/in/andrei-alex-taranu/`},\"andrew-baxter\":{\"name\":`Andrew Baxter`},\"andrew-melck\":{\"name\":`Andrew Melck`},\"antoine-crochet-damais\":{\"name\":`Antoine Crochet Damais`},\"augustin-delaporte\":{\"name\":`Augustin Delaporte`,\"linkedin\":`https://www.linkedin.com/in/augustindelaporte/`},\"branislav-bujisic\":{\"name\":`Branislav Bujisic`},\"carl-smith\":{\"name\":`Carl Smith`},\"caroline-leroy\":{\"name\":`Caroline Leroy`},\"cati-mayer\":{\"name\":`Cati Mayer`},\"catplat\":{\"name\":`C Trinkwon`},\"ceelolulu\":{\"name\":`Celeste van der Watt`},\"chadwcarlson\":{\"name\":`Chad Carlson`,\"github\":`chadwcarlson`,\"linkedin\":`https://www.linkedin.com/in/chadwcarlson`},\"charles-moore\":{\"name\":`Charles Moore`,\"linkedin\":`https://www.linkedin.com/in/charles-g-moore/`},\"chris-ward\":{\"name\":`Chris Ward`},\"chris-yates\":{\"name\":`Chris Yates`},\"christian-sieber\":{\"name\":`Christian Sieber`},\"christopher-lockheardt\":{\"name\":`Christopher Lockheardt`},\"christopher-skene\":{\"name\":`Christopher Skene`},\"chuck-morgan\":{\"name\":`Chuck Morgan`},\"corey-dockendorf\":{\"name\":`Corey Dockendorf`},\"crell\":{\"name\":`Crell`},\"damz\":{\"name\":`Damz`},\"dan-morrison\":{\"name\":`Dan Morrison`},\"davidbonachera\":{\"name\":`David Bonachera`,\"github\":`davidbonachera`,\"linkedin\":`https://www.linkedin.com/in/davidbonachera`},\"dereliahmet1\":{\"name\":`Ahmet Faruk Dereli`},\"devicezero\":{\"name\":`Jonas Kröger`,\"github\":`devicezero`,\"linkedin\":`https://www.linkedin.com/in/jonaskroeger/`},\"doug-goldberg\":{\"name\":`Doug Goldberg`},\"duncan-naves\":{\"name\":`Duncan Naves`,\"github\":`duncannaves`,\"linkedin\":`https://www.linkedin.com/in/duncan-naves-a94423aa`},\"erika-bustamante\":{\"name\":`Erika Bustamante`},\"fabpot\":{\"name\":`Fabien Potencier`},\"flovntp\":{\"name\":`Florent Huck`,\"github\":`flovntp`,\"linkedin\":`https://www.linkedin.com/in/florenthuck`},\"fred-plais\":{\"name\":`Fred Plais`},\"gauthier-garnier\":{\"name\":`Gauthier Garnier`},\"gilzow\":{\"name\":`Paul Gilzow`},\"gmoigneu\":{\"name\":`Guillaume Moigneu`,\"github\":`gmoigneu`,\"linkedin\":`https://www.linkedin.com/in/guillaumemoigneu/`},\"gregqualls\":{\"name\":`Greg Qualls`},\"guguss\":{\"name\":`Augustin Delaporte`},\"haylee-millar\":{\"name\":`Haylee Millar`},\"ivana-kotur\":{\"name\":`Ivana Kotur`},\"jackrabbithanna\":{\"name\":`Mark Hanna`,\"github\":`jackrabbithanna`},\"jared-wright\":{\"name\":`Jared Wright`,\"github\":`jww-sh`,\"linkedin\":`https://www.linkedin.com/in/jaredwaynewright`},\"jessica-orozco\":{\"name\":`Jessica Orozco`},\"joey-stanford\":{\"name\":`Joey Stanford`},\"john-grubb\":{\"name\":`John Grubb`},\"jonas-kruger\":{\"name\":`Jonas Kruger`},\"kathryn-frazer\":{\"name\":`Kathryn Frazer`},\"kemiojo\":{\"name\":`Kemi Elizabeth Ojogbede`},\"kieronsambrook-smith\":{\"name\":`Kieronsambrook Smith`},\"laurent-arnoud\":{\"name\":`Laurent Arnoud`,\"linkedin\":`https://www.linkedin.com/in/laurent-arnoud-861b44121/`},\"letoya-boyne\":{\"name\":`Letoya Boyne`},\"lolautruche\":{\"name\":`Jérôme Vieilledent`},\"lyly-lepinay\":{\"name\":`Lyly Lepinay`},\"manauwar-alam\":{\"name\":`Manauwar Alam`},\"marc-antoine-porri\":{\"name\":`Marc Antoine Porri`},\"maria-antinkaapo\":{\"name\":`Maria Antinkaapo`},\"maria-de-anton\":{\"name\":`Maria De Anton`},\"mark-dorison\":{\"name\":`Mark Dorison`},\"markus-hausammann\":{\"name\":`Markus Hausammann`},\"mary-thomas\":{\"name\":`Mary Thomas`},\"mathias-bolt-lesniak\":{\"name\":`Mathias Bolt Lesniak`},\"mathieu-strauch\":{\"name\":`Mathieu Strauch`},\"matthias-van-woensel\":{\"name\":`Matthias Van Woensel`,\"linkedin\":`https://www.linkedin.com/in/matthias-van-woensel-267a069`},\"maz-mohammadi\":{\"name\":`Maz Mohammadi`},\"michael-sharp\":{\"name\":`Michael Sharp`},\"mupsi\":{\"name\":`Marine Gandy`},\"natalie-harper\":{\"name\":`Natalie Harper`},\"ngommenginger\":{\"name\":`Nicolas Gommenginger`,\"linkedin\":`https://www.linkedin.com/in/nicolas-gommenginger`},\"nicholas-bennison\":{\"name\":`Nicholas Bennison`},\"nicholas-vahalik\":{\"name\":`Nicholas Vahalik`},\"nick-hardiman\":{\"name\":`Nick Hardiman`},\"nickanderegg\":{\"name\":`Nickanderegg`},\"nicolas-grekas\":{\"name\":`Nicolas Grekas`,\"github\":`nicolas-grekas`,\"linkedin\":`https://www.linkedin.com/in/nicolasgrekas/`},\"niti-malwade\":{\"name\":`Niti Malwade`},\"opensocialteam\":{\"name\":`Opensocialteam`},\"ori-pekelman\":{\"name\":`Ori Pekelman`},\"otavio-santana\":{\"name\":`Otavio Santana`},\"palwandi\":{\"name\":`Pawan Alwandi`,\"github\":`pawpy`,\"linkedin\":`https://www.linkedin.com/in/pawanalwandi`},\"patrick-boest\":{\"name\":`Patrick Boest`},\"patrick-dawkins\":{\"name\":`Patrick Dawkins`,\"github\":`pjcdawkins`,\"linkedin\":`https://www.linkedin.com/in/patrickdawkins`},\"patrick-klima\":{\"name\":`Patrick Klima`},\"pjcdawkins\":{\"name\":`Pjcdawkins`},\"prineet-kaurbhurji\":{\"name\":`Prineet Kaurbhurji`},\"quentin-sinig\":{\"name\":`Quentin Sinig`},\"ralt\":{\"name\":`Florian Margaine`,\"github\":`ralt`,\"linkedin\":`https://www.linkedin.com/in/florian-margaine-43971136`},\"ramanathanramakrishnamurthy\":{\"name\":`Ramanathanramakrishnamurthy`},\"remi-lejeune\":{\"name\":`Rémi Lejeune`},\"ribel\":{\"name\":`Taras Kruts`},\"robert-douglass\":{\"name\":`Robert Douglass`},\"rudy-weber\":{\"name\":`Rudy Weber`},\"ryan-hicks\":{\"name\":`Ryan Hicks`},\"sabri-helal\":{\"name\":`Sabri Helal`},\"savannah-bergeron\":{\"name\":`Savannah Bergeron`},\"shannon-vettes\":{\"name\":`Shannon Vettes`},\"shawn-ogasawara\":{\"name\":`Shawn Ogasawara`,\"linkedin\":`https://www.linkedin.com/in/shawn-ogasawara-83a9a0/`},\"shawna-spoor\":{\"name\":`Shawna Spoor`},\"shedrack-akintayo\":{\"name\":`Shedrack Akintayo`},\"simon-ruggier\":{\"name\":`Simon Ruggier`},\"sophie-van-der-kindere\":{\"name\":`Sophie Van Der Kindere`},\"stefanos-thampis\":{\"name\":`Stefanos Thampis`},\"stephen-weinberg\":{\"name\":`Stephen Weinberg`},\"sukhman-virk\":{\"name\":`Sukhman Virk`},\"sumaira-nazir\":{\"name\":`Sumaira Nazir`},\"sumer\":{\"name\":`Sümer Cip`,\"noindex\":true,\"github\":`sumerc`,\"linkedin\":`https://www.linkedin.com/in/sumer-cip/`},\"syed-raza\":{\"name\":`Syed Raza`},\"tamara-bacchia\":{\"name\":`Tamara Bacchia`},\"tara-arnold\":{\"name\":`Tara Arnold`},\"theosakamg\":{\"name\":`Mickael Gaillard`,\"github\":`theosakamg`},\"thomasdiluccio\":{\"name\":`Thomas di Luccio`},\"tim-anderson\":{\"name\":`Tim Anderson`},\"tom-helmer-hansen\":{\"name\":`Tom Helmer Hansen`},\"tylermills\":{\"name\":`Tyler Mills`},\"upsun\":{\"name\":`Upsun`},\"veronika-tolkachova\":{\"name\":`Veronika Tolkachova`,\"linkedin\":`https://www.linkedin.com/in/veronika-tolkachova-169167a2`},\"vince-parker\":{\"name\":`Vince Parker`},\"vinnie-russo\":{\"name\":`Vincenzo Russo`},\"vrobert78\":{\"name\":`Vincent Robert`,\"github\":`vrobert78`,\"linkedin\":`https://www.linkedin.com/in/vincent-robert-498a883`},\"yuriy-babenko\":{\"name\":`Yuriy Babenko`},\"yuriy-gerasimov\":{\"name\":`Yuriy Gerasimov`}};return _jsx(`div`,{className:`post-meta`,children:(authors.length>0||formattedDate)\u0026\u0026_jsxs(`div`,{className:`post-meta-info`,children:[authors.length>0\u0026\u0026_jsx(`div`,{className:`post-meta-authors`,children:authors.map(slug=>{const{name,url,avatarUrl}=resolveAuthor(slug);const inner=_jsxs(_Fragment,{children:[avatarUrl\u0026\u0026_jsx(`img`,{src:avatarUrl,alt:name,className:`post-meta-avatar`}),_jsx(`span`,{className:`post-meta-author-name`,children:name})]});return url?_jsx(_components.a,{href:url,className:`post-meta-author`,children:inner},slug):_jsx(`span`,{className:`post-meta-author`,children:inner},slug)})}),authors.length>0\u0026\u0026formattedDate\u0026\u0026_jsx(`span`,{className:`post-meta-separator`,\"aria-hidden\":`true`,children:`·`}),formattedDate\u0026\u0026_jsx(`span`,{className:`post-meta-date`,children:formattedDate})]})})};function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Note,_MdxComponentBoundary}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`PostMeta`,children:_jsx(PostMeta,{data:{author:[`ori-pekelman`],date:`2015-03-03`,image:`/images/posts/how-it-works/how-platform-paas-works/Blog_How_Platfromsh_Works.webp`}})}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:`In this post I will present, in very broad strokes, the workings of Platform.sh from a functional perspective. This will\nnot be a discussion of the intricate technical details, but rather a high-level description to help you understand what\nis happening under the hood.`}),_jsx(_components.p,{children:`– TLDR; Now go read the whole thing.`})]}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-is-a-paas`,children:`Platform.sh is a PaaS`}),`\n`,_jsx(_components.p,{children:`Basically what this means, is that you, the user, only have to concern yourself with writing the application code. We\ntake care of all the rest. We automatically manage everything that is needed to deploy the application, and all of its\nruntime dependencies. You need a database? We will deploy and configure it. And we will configure your app so it\nconnects to it, as well as the copies of it that are made for each git branch. The same goes for search engines, caches,\nand the file system. We will configure the web server, we will configure the network. We take care of making sure\neverything can be consistently backed up, restored, etc. If something crashes, we take care of healing it; it’s our job\nto make sure your application’s infrastructure stays alive.`}),`\n`,_jsx(_components.p,{children:`You take care of the code. That’s all. Batteries included. You don’t have to do any kind of sysadmin work. In order to\nput your code intro production, you just git push it.`}),`\n`,_jsx(_components.p,{children:`We do give you all the tools to see what’s happening and to control precisely everything. It’s not a black box. You can\nssh to the server. You can connect directly to the database and continue to use all the tools you are accustomed to. You\ncan also automate everything. We have a REST API, as well as a very convenient CLI (command line interface) tool.`}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-is-a-new-kind-of-paas`,children:`Platform.sh is a new kind of PaaS`}),`\n`,_jsxs(_components.p,{children:[`You can call it a “second generation `,_jsx(_components.a,{href:`https://platform.sh/blog/paas/`,children:`PaaS`}),`”. In first generation PaaS systems, like\n`,_jsx(_components.a,{href:`https://platform.sh/alternative-to-heroku/`,children:`Heroku`}),` (but basically all the others), the service would manage the application (and do the\nsame kind of magic, you push code and it puts it into production), and sometimes another service (like for Heroku a\nPostgreSQL database), but everything else was still the responsibility of the user. If you want a search engine, or\nanother type of database, well you needed to get that from a third party, as an add-on.`]}),`\n`,_jsx(_components.p,{children:`They tried to make it as painless as possible, with integrated billing, and some help in injecting the configuration to\nyour application, so it would be a bit more seamless, but this of course makes it more expensive, and more importantly\nmuch more complex (with many more possible failure scenarios, each different provider becomes a single point of failure`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`SPOF - for the whole thing). Because first generation PaaS systems manage only a small part of the application, you`}),`\n`,_jsx(_components.li,{children:`are still left with many things you need to care of by yourself.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-manages-everything-it-manages`,children:`Platform.sh manages everything it manages`}),`\n`,_jsx(_components.p,{children:`In Platform.sh all the services you use are fully managed by the platform itself. This means that when you back up your\napplication, everything get backed up. Consistently. Simply speaking, Platform.sh is a more general form of the same\nidea. This is why we always talk about “clusters”. When we deploy your application we build the different services the\napplication will need and tie them together into a cluster. A group of servers that are a “whole”. Some of these\nservices will be things like infrastructure elements, databases and such, but you can also deploy multiple applications\nin the same cluster.`}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-supports-multiple-apps-per-cluster`,children:`Platform.sh supports multiple apps per cluster`}),`\n`,_jsx(_components.p,{children:`If you have a website that runs on multiple APIs, each such service will be run as an independent server, but the whole\nthing will be tied together into a single cluster to form a coherent entity. This is really nice for people that like\nthe “micro-service” style of architecture. With Platform.sh, we make it easy to manage a host of apps that work together.`}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-has-a-persistent-file-system`,children:`Platform.sh has a persistent file system`}),`\n`,_jsxs(_components.p,{children:[`Most `,_jsx(_components.a,{href:`https://platform.sh/blog/five-considerations-for-choosing-a-modern-paas/`,children:`PaaS systems`}),`, if not all, impose a\nunique constraint on developers. Their file system is either fully Read-Only, or are ephemeral. So basically you can not\nwrite to disk, or simply can not be sure it is going to be there. The main file system in Platform.sh is read-only, but\nwe allow you to declare as many Read/Write directories as you would like. And the storage is managed. So when you back\nup your system they also get backed-up. When you clone a cluster they also get cloned. This means you do not need to\nhack your application to use something like S3 in order to have file uploads. Applications like Drupal, Magento,\nPrestashop or Wordspress, for example, function unmodified.`]}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-can-clone-a-running-cluster`,children:`Platform.sh can clone a running cluster`}),`\n`,_jsx(_components.p,{children:`This is probably the most useful, and most innovative feature we have to propose. Because Platform.sh manages everything\nas a coherent entity, with some powerful black magic we can almost instantly take a snapshot of the application cluster,\nduplicate it and create a new one, and push it to production. Because everything is managed, the new cluster will get\nnew URLs, and all the apps inside it will get configured to work with each other. This allows you to create development\nor staging environments as you need those. You can develop using “feature branches” and for each feature have a fully\nisolated environment, so you can rapidly validate just that feature. This also means that you never have bugs that only\nappear on production, because you can test each branch with real content.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-when-you-deploy-an-app`,children:`What happens when you deploy an app`}),`\n`,_jsx(_components.p,{children:`Deploying an app means simply pushing the source code to our git server. The git server that runs on Platform.sh is at\nthe same time “just a normal git repository” and a very smart piece of software. When you have pushed to it, it will try\nto understand what it needs to do. But you can also explicitly tell it precisely what requirements your application has.`}),`\n`,_jsxs(_components.p,{children:[`The only modification you need to do to your application is to tell it to load its configuration from the environment\n(and we supply `,_jsx(_components.a,{href:`https://github.com/platformsh-templates`,children:`all the examples you need`}),`).`]}),`\n`,_jsx(_components.p,{children:`There are a couple of “dot files” in YAML format you can put at the root of your application that will describe its\ndependencies. You can say for example “my app needs mysql as a database”, or “my app needs this or that other php\nextension”, or you can say “my front web app depends on these three API apps”. If for example you need to build your app\na specific Node.js, Python or Ruby library (for example Less or Jekyll) you simply specify those in the YAML file. There\nare many other aspects of the application you can control through this simple declarative style. You don’t write scripts,\nyou just tell Platform.sh what you need.`}),`\n`,_jsx(Heading,{level:`2`,id:`platform-sh-is-build-oriented`,children:`Platform.sh is build oriented`}),`\n`,_jsx(_components.p,{children:`This very smart git server on the other side is going to operate in five steps.`}),`\n`,_jsx(Heading,{level:`3`,id:`configuration-validation`,children:`Configuration validation`}),`\n`,_jsx(_components.p,{children:`First the git server is going to inspect what you have sent it and see that it understands what it is supposed to do. If\nfor example you have a syntax error in a configuration file, it will simply refuse the push. The same with code where\nthere is a huge security risk that Platform.sh knows how to detect. This is a good thing; Because it means you can’t\nbreak your production system that easily. Once the git server has validated the configuration and sees it can satisfy\nthe requirements, it will build the cluster.`}),`\n`,_jsx(_components.p,{children:`The git server is smart. It can diff not only the code but also the infrastructure; Say you had a single MySQL database\nin your cluster. And now you want two of those, maybe a PostrgreSQL and an Elastic Search instance. It will understand\nwhat it needs to do in the next phase to make sure the topology of your cluster is modified to your new needs.`}),`\n`,_jsx(Heading,{level:`3`,id:`build`,children:`Build`}),`\n`,_jsx(_components.p,{children:`I already said the git server was smart… and it is a git server. So it will only build stuff that has changed. This is\none of the things that make Platform.sh so fast in deployment. Using Linux Containers, Platform.sh will now, in parallel,\nbuild each server that had something that changed. If for example you pushed a Drupal Drush Makefile, or a PHP\ncomposer.json file, it will know it needs to go search for the dependencies, and shuffle things around to create the\ncorrect directory structure. If in your .platform.app.yaml file you also specified a “build hook”, you can now run\nwhatever scripts you wish.`}),`\n`,_jsx(_components.p,{children:`It is important to note that at this point the cluster has not been created yet. So you should not try to connect to a\ndatabase or imagine anything was daemonized; This is just a build phase.`}),`\n`,_jsx(Heading,{level:`3`,id:`prepare-slug`,children:`Prepare slug`}),`\n`,_jsx(_components.p,{children:`The result of the build phase will be a file system, of which we now create an archive. We put this in permanent storage.\nSo the next time push code, if a server did not change… well we can just use this one; It also means that if you want\nto revert a deploy, it is basically instantaneous. Deterministic deployments are repeatable and reversible, after all.`}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-slugs-and-cluster`,children:`Deploy slugs and cluster`}),`\n`,_jsx(_components.p,{children:`Now Platform.sh provisions of all the elements it needs to run your application cluster. It will mount each service in\nits own container, configure the network so they can see each other (and only each other!) Here you need to remember\nthat the main file system is read-only. This is what guarantees the fact that we can do deterministic deployments.`}),`\n`,_jsx(_components.p,{children:`It will also mount all of the read/write directories you specified. Again unlike other PaaS systems, Platform.sh gives\nyou persistent, normal, storage, it just needs to know which directories contain stuff that is mutable.`}),`\n`,_jsx(Heading,{level:`3`,id:`deploy-hooks`,children:`Deploy hooks`}),`\n`,_jsx(_components.p,{children:`A last step allows you to run a post-deploy script (you can use this for example to run an anonymization script for\ndeployment on development environments, clear caches, ping external CI tools, etc.) When this script runs you already\nhave access to a fully running application.`}),`\n`,_jsx(Heading,{level:`3`,id:`configure-routing`,children:`Configure routing`}),`\n`,_jsx(_components.p,{children:`If everything went fine, we are now ready to configure routing, so your web traffic will arrive at your newly created\ncluster. If something failed, well then nothing would have happened; the “old cluster” is still there, so from your\nusers’ perspective, nothing changed. Neither failed nor successful deployments result in application downtime. Because\nwe also route SSH you can also simply SSH to your cluster where you have the same permissions to execute commands as\nthe web server.`}),`\n`,_jsx(Heading,{level:`2`,id:`post-scriptum`,children:`Post-Scriptum`}),`\n`,_jsx(_components.p,{children:`This was not a detailed explanation. Platform.sh has many other bells and whistles, but I hope this gives you a general\nidea on what is happening behind the scenes.`}),`\n`,_jsx(_components.p,{children:`As a user, you don’t really need to know all of this; Most of the time for a relatively simple app, you would just push\nthe code, and it would run. You would click on “branch” and it will create a new development cluster. It is our job to\ntry to absorb all the tedious complexities. You do features, we run the infrastructure.`}),`\n`,_jsx(_components.p,{children:`But as you can understand, because Platform.sh uses standard tools (git), exposes a rich API and has a very cool CLI,\nyou can integrate it in more complex workflows. You could for example use the Github integration, or webhooks, to make\nit work with an existing workflow or CI system like Jenkins or Travis. You could dynamically configure access rights and\nper-environment routing rules; but most of the time, you’d just push code and not care about all of this.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{PostMeta,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How the Platform.sh PaaS works","date":"2015-03-03T00:00:00.000Z","image":"/images/posts/how-it-works/how-platform-paas-works/Blog_How_Platfromsh_Works.webp","featured":false,"author":["ori-pekelman"],"sidebar":{"exclude":true},"type":"post","tags":["drupal","php","magento","python","ruby"],"categories":["how-it-works"],"description":"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.","href":"/posts/how-it-works/how-platform-paas-works"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[144,8703,")=>null;function _cr"]]},"mdxExtracts":{"tableOfContents":[{"title":"Platform.sh is a PaaS","slug":"platform-sh-is-a-paas","depth":2,"children":[]},{"title":"Platform.sh is a new kind of PaaS","slug":"platform-sh-is-a-new-kind-of-paas","depth":2,"children":[]},{"title":"Platform.sh manages everything it manages","slug":"platform-sh-manages-everything-it-manages","depth":2,"children":[]},{"title":"Platform.sh supports multiple apps per cluster","slug":"platform-sh-supports-multiple-apps-per-cluster","depth":2,"children":[]},{"title":"Platform.sh has a persistent file system","slug":"platform-sh-has-a-persistent-file-system","depth":2,"children":[]},{"title":"Platform.sh can clone a running cluster","slug":"platform-sh-can-clone-a-running-cluster","depth":2,"children":[]},{"title":"What happens when you deploy an app","slug":"what-happens-when-you-deploy-an-app","depth":2,"children":[]},{"title":"Platform.sh is build oriented","slug":"platform-sh-is-build-oriented","depth":2,"children":[{"title":"Configuration validation","slug":"configuration-validation","depth":3,"children":[]},{"title":"Build","slug":"build","depth":3,"children":[]},{"title":"Prepare slug","slug":"prepare-slug","depth":3,"children":[]},{"title":"Deploy slugs and cluster","slug":"deploy-slugs-and-cluster","depth":3,"children":[]},{"title":"Deploy hooks","slug":"deploy-hooks","depth":3,"children":[]},{"title":"Configure routing","slug":"configure-routing","depth":3,"children":[]}]},{"title":"Post-Scriptum","slug":"post-scriptum","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upsun-c9761871/426c6190a2163560/sidebar-fix.js","/_mintlify/custom/upsun-c9761871/af4757650ec2f1cc/search-override.js"],"subdomain":"upsun-c9761871","siteName":"Upsun Developer","title":"How the Platform.sh PaaS works - Upsun Developer","contextualStarterQuestions":[{"_id":"6ace00194516b45226274644","deploymentId":"696781be74d50424a2a74647","questionText":"How does Platform.sh simplify PaaS?","status":"active","generatedBy":"contextual","path":"posts/how-it-works/how-platform-paas-works","createdAt":"2026-10-13T09:55:37.752Z","updatedAt":"2026-10-13T09:55:37.752Z","__v":0},{"_id":"6ace00194516b45226274646","deploymentId":"696781be74d50424a2a74647","questionText":"How do I deploy my application?","status":"active","generatedBy":"contextual","path":"posts/how-it-works/how-platform-paas-works","createdAt":"2026-10-13T09:55:37.752Z","updatedAt":"2026-10-13T09:55:37.752Z","__v":0},{"_id":"6ace00194516b45226274645","deploymentId":"696781be74d50424a2a74647","questionText":"What makes this a second-gen platform?","status":"active","generatedBy":"contextual","path":"posts/how-it-works/how-platform-paas-works","createdAt":"2026-10-13T09:55:37.752Z","updatedAt":"2026-10-13T09:55:37.752Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-13T09:54:31.206Z","gitLastModified":"2026-04-27T14:52:26.000Z","originalFileLocation":"posts/how-it-works/how-platform-paas-works.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Upsun Developer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"How the Platform.sh PaaS works - Upsun Developer\">\u003cmeta data-mint-head property=\"og:description\" content=\"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Upsun Developer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upsun-c9761871.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=How+the+Platform.sh+PaaS+works\u0026amp;description=Discover+how+Platform.sh+simplifies+PaaS.+Focus+on+your+code%3B+we+manage+the+rest.+Explore+our+second-generation+PaaS+for+seamless+application+development.\u0026amp;theme=ad7d5daceb907f9230bb2c76\u0026amp;signature=a2c79d40ba24addbda9a9b4677abb498ae278e7a70b24c52b1ec6f7a5ddf407f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"How the Platform.sh PaaS works - Upsun Developer\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upsun-c9761871.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=How+the+Platform.sh+PaaS+works\u0026amp;description=Discover+how+Platform.sh+simplifies+PaaS.+Focus+on+your+code%3B+we+manage+the+rest.+Explore+our+second-generation+PaaS+for+seamless+application+development.\u0026amp;theme=ad7d5daceb907f9230bb2c76\u0026amp;signature=a2c79d40ba24addbda9a9b4677abb498ae278e7a70b24c52b1ec6f7a5ddf407f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Upsun Developer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6046ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/posts/how-it-works/how-platform-paas-works.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.upsun.com/#organization\",\"name\":\"Upsun Developer\",\"url\":\"https://developer.upsun.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-light.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=c35e42815c3d17de292fb0a86d41aa5f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.upsun.com#website\",\"name\":\"Upsun Developer\",\"url\":\"https://developer.upsun.com\",\"publisher\":{\"@id\":\"https://developer.upsun.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works#webpage\",\"url\":\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works\",\"name\":\"How the Platform.sh PaaS works\",\"description\":\"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\",\"dateModified\":\"2026-04-27T14:52:26.000Z\",\"isPartOf\":{\"@id\":\"https://developer.upsun.com#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works#article\",\"headline\":\"How the Platform.sh PaaS works\",\"name\":\"How the Platform.sh PaaS works\",\"description\":\"Discover how Platform.sh simplifies PaaS. Focus on your code; we manage the rest. Explore our second-generation PaaS for seamless application development.\",\"url\":\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works\",\"mainEntityOfPage\":{\"@id\":\"https://developer.upsun.com/posts/how-it-works/how-platform-paas-works#webpage\"},\"dateModified\":\"2026-04-27T14:52:26.000Z\",\"publisher\":{\"@id\":\"https://developer.upsun.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.upsun.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Upsun Developer\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Upsun Developer\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/posts/how-it-works/how-platform-paas-works.md","siteName":"Upsun Developer","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Home","icon":"house","pages":[{"mode":"custom","title":"Upsun Developer Center","href":""}]},{"tab":"Dispatch","icon":"https://mintlify.s3.us-west-1.amazonaws.com/upsun-c9761871/images/icons/dispatch.svg","anchors":[{"anchor":"Docs","icon":"book","pages":[{"mode":"custom","title":"Upsun Dispatch","href":"/dispatch"},{"group":"Get Started","icon":"rocket","expanded":false,"pages":[{"title":"Get Started with Upsun Dispatch","sidebarTitle":"Get Started","href":"/dispatch/docs/get-started/index"},{"title":"Quickstart","href":"/dispatch/docs/get-started/quickstart"},{"title":"Free and paid usage","href":"/dispatch/docs/get-started/free-and-paid-usage"},{"title":"Get support","href":"/dispatch/docs/get-started/support"}]},{"group":"Integrations","icon":"link","expanded":false,"pages":[{"title":"Integration overview","sidebarTitle":"Integration overview","href":"/dispatch/docs/integrations/index"},{"group":"VCS integrations","expanded":true,"pages":[{"title":"Set up GitHub","sidebarTitle":"GitHub","href":"/dispatch/docs/integrations/github"},{"title":"Set up GitLab","sidebarTitle":"GitLab","href":"/dispatch/docs/integrations/gitlab"}]},{"group":"Ticketing integrations","expanded":true,"pages":[{"title":"Set up Jira","sidebarTitle":"Jira","href":"/dispatch/docs/integrations/jira"},{"title":"Set up Linear","sidebarTitle":"Linear","href":"/dispatch/docs/integrations/linear"}]},{"group":"Notification integrations","expanded":true,"pages":[{"title":"Set up Slack","sidebarTitle":"Slack","href":"/dispatch/docs/integrations/slack"}]}]},{"group":"Workflows","icon":"workflow","expanded":false,"pages":[{"title":"Workflows in Upsun Dispatch","sidebarTitle":"Concept","href":"/dispatch/docs/workflows/index"},{"group":"Built-in workflows","root":{"title":"Built-in workflows","sidebarTitle":"Built-in workflows","href":"/dispatch/docs/workflows/builtin"},"expanded":true,"pages":[{"title":"Code review","sidebarTitle":"Code review","href":"/dispatch/docs/workflows/code-review"},{"title":"Issue to code","sidebarTitle":"Issue to code","href":"/dispatch/docs/workflows/issue-to-code"},{"title":"CVE scan","sidebarTitle":"CVE scan","href":"/dispatch/docs/workflows/cve-scan"}]}]},{"group":"Manage","icon":"layout-grid","expanded":false,"pages":[{"title":"Use the Upsun Dispatch console","href":"/dispatch/docs/dashboard/index"}]}]}]},{"tab":"Cloud","icon":"https://mintlify.s3.us-west-1.amazonaws.com/upsun-c9761871/images/icons/cloud.svg","anchors":[{"anchor":"Docs","icon":"book","pages":[{"mode":"custom","title":"Upsun Cloud","href":"/cloud"},{"group":"Get Started","icon":"rocket","expanded":false,"pages":[{"title":"Get Started with Upsun Cloud","sidebarTitle":"Quickstart","href":"/docs/get-started/index"},{"group":"Setup Guide","root":{"title":"Getting started with Upsun Cloud","sidebarTitle":"Introduction","href":"/docs/get-started/here/index"},"pages":[{"title":"Setup","href":"/docs/get-started/here/setup"},{"title":"Create a project","href":"/docs/get-started/here/create-project"},{"group":"Configure your project","root":{"title":"Configure your project","href":"/docs/get-started/here/configure/index"},"pages":[{"title":"JavaScript/Node.js","href":"/docs/get-started/here/configure/nodejs"},{"title":"PHP","href":"/docs/get-started/here/configure/php"},{"title":"Python","href":"/docs/get-started/here/configure/python"}]},{"title":"Set resources","href":"/docs/get-started/here/set-resources"},{"title":"Make changes to your project","sidebarTitle":"Revisions","href":"/docs/get-started/here/make-changes"},{"group":"Local development","root":{"title":"Local development","href":"/docs/get-started/here/local/index"},"pages":[{"title":"Tethered","href":"/docs/get-started/here/local/tethered"}]},{"title":"Third party integrations","href":"/docs/get-started/here/third-party"},{"title":"Get support","href":"/docs/get-started/here/support"}]},{"group":"Pick a Stack","root":{"title":"How to deploy","sidebarTitle":"Overview","href":"/docs/get-started/stacks/index"},"pages":[{"group":"PHP","root":{"title":"Deploy PHP apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/php"},"pages":[{"group":"Laravel","root":{"title":"Deploy Laravel on Upsun Cloud","sidebarTitle":"Laravel","href":"/docs/get-started/stacks/laravel/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/docs/get-started/stacks/laravel/get-started"},{"title":"Configure environment variables","sidebarTitle":"Environment variables","href":"/docs/get-started/stacks/laravel/environment-variables"},{"title":"Set up cron jobs","sidebarTitle":"Cron jobs","href":"/docs/get-started/stacks/laravel/crons"},{"title":"Set up Redis","sidebarTitle":"Set up Redis","href":"/docs/get-started/stacks/laravel/setup-redis"},{"title":"Manage continuous observability with Upsun Blackfire","sidebarTitle":"Upsun Blackfire","href":"/docs/get-started/stacks/laravel/blackfire"},{"title":"Handle queues with Horizon","sidebarTitle":"Handle queues with Horizon","href":"/docs/get-started/stacks/laravel/laravel-horizon"},{"title":"Debug with Laravel Telescope","sidebarTitle":"Debug with Laravel Telescope","href":"/docs/get-started/stacks/laravel/laravel-telescope"},{"title":"FAQ","sidebarTitle":"FAQ","href":"/docs/get-started/stacks/laravel/faq"}]},{"group":"Symfony","root":{"title":"Deploy Symfony on Upsun Cloud","sidebarTitle":"Symfony","href":"/docs/get-started/stacks/symfony/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/docs/get-started/stacks/symfony/get-started"},{"title":"Configure environment variables","href":"/docs/get-started/stacks/symfony/environment-variables"},{"title":"Set up cron jobs","sidebarTitle":"Cron jobs","href":"/docs/get-started/stacks/symfony/crons"},{"title":"Configure workers","sidebarTitle":"Workers","href":"/docs/get-started/stacks/symfony/workers"},{"title":"Manage continuous observability with Upsun Blackfire","sidebarTitle":"Upsun Blackfire","href":"/docs/get-started/stacks/symfony/blackfire"},{"title":"Symfony integration","sidebarTitle":"Symfony integration","href":"/docs/get-started/stacks/symfony/integration"},{"title":"Local development","sidebarTitle":"Local development","href":"/docs/get-started/stacks/symfony/local"},{"title":"Symfony CLI Tips","sidebarTitle":"Symfony CLI Tips","href":"/docs/get-started/stacks/symfony/symfony-cli-tips"},{"title":"FAQ","sidebarTitle":"FAQ","href":"/docs/get-started/stacks/symfony/faq"}]}]},{"group":"JavaScript","root":{"title":"Deploy JavaScript apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/javascript"},"pages":[{"title":"Deploy Next.js on Upsun Cloud","sidebarTitle":"Next.js","href":"/docs/get-started/stacks/nextjs"},{"group":"Express","root":{"title":"Deploy Express on Upsun Cloud","sidebarTitle":"Express","href":"/docs/get-started/stacks/express/index"},"pages":[{"title":"Add a database to Express","href":"/docs/get-started/stacks/express/add-database"}]},{"group":"Strapi","root":{"title":"Deploy Strapi on Upsun Cloud","sidebarTitle":"Strapi","href":"/docs/get-started/stacks/strapi/index"},"pages":[{"title":"Add a database to Strapi","sidebarTitle":"Add a database to Strapi","href":"/docs/get-started/stacks/strapi/add-database"}]}]},{"group":"Python","root":{"title":"Deploy Python apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/python"},"pages":[{"title":"Deploy Django on Upsun Cloud","sidebarTitle":"Django","href":"/docs/get-started/stacks/django"},{"title":"Deploy Flask on Upsun Cloud","sidebarTitle":"Flask","href":"/docs/get-started/stacks/flask"}]},{"group":"AI","root":{"title":"How to deploy AI","href":"/docs/get-started/ai/index"},"pages":[{"title":"Host AI Agents","sidebarTitle":"AI Agents","href":"/docs/get-started/ai/aiagent"},{"title":"Hosting Model Context Protocol (MCP) Servers","sidebarTitle":"Deploy MCP","href":"/docs/get-started/ai/deploy-mcp"},{"title":"The Upsun MCP Server","href":"/docs/get-started/ai/using-the-mcp"},{"title":"Upsun Cloud performance agent","href":"/docs/get-started/ai/upsun-cloud-performance-agent"},{"title":"Upsun Cloud log-analyzer agent","href":"/docs/get-started/ai/upsun-cloud-log-analyzer-agent"}]}]}]},{"group":"Core Concepts","icon":"layers","expanded":false,"pages":[{"group":"How Upsun Cloud Works","root":{"title":"What is Upsun Cloud?","sidebarTitle":"What is Upsun Cloud?","href":"/docs/core-concepts/index"},"pages":[{"title":"Philosophy","href":"/docs/core-concepts/philosophy"}]},{"group":"Workflow Overview","root":{"title":"Workflow Overview","href":"/docs/core-concepts/workflow"},"pages":[{"group":"YAML","root":{"title":"YAML","href":"/docs/core-concepts/yaml/index"},"pages":[{"title":"What YAML is","href":"/docs/core-concepts/yaml/what-is-yaml"},{"title":"Upsun Cloud YAML structure","href":"/docs/core-concepts/yaml/yaml-structure"},{"title":"Upsun Cloud YAML tags","href":"/docs/core-concepts/yaml/platform-yaml-tags"}]},{"title":"Structure","href":"/docs/core-concepts/structure"},{"title":"Get support","href":"/docs/core-concepts/get-support"}]},{"group":"Using Upsun Cloud Effectively","root":{"title":"Using Upsun Cloud Effectively","sidebarTitle":"Best practices","href":"/docs/core-concepts/best-practices/index"},"pages":[{"title":"HTTP caching","href":"/docs/core-concepts/best-practices/http-caching"},{"title":"From monoliths through headless to microservices","sidebarTitle":"Monolith, headless or microservices?","href":"/docs/core-concepts/best-practices/oneormany"},{"title":"Keep your Git repository clean","sidebarTitle":"Clean repository","href":"/docs/core-concepts/best-practices/clean-repository"}]},{"group":"Common Tasks","root":{"title":"Common Tasks","sidebarTitle":"Common Tasks","href":"/docs/core-concepts/common-tasks/index"},"pages":[{"title":"Automate your code updates","sidebarTitle":"Automate your code updates","href":"/docs/core-concepts/common-tasks/dependency-updates"},{"title":"Restrict access to a service","sidebarTitle":"Restrict service access","href":"/docs/core-concepts/common-tasks/restrict-service-access"},{"title":"Exporting data","sidebarTitle":"Exporting data","href":"/docs/core-concepts/common-tasks/exporting"},{"title":"Upgrade to a maintained version of a runtime or service","sidebarTitle":"Upgrade runtimes and services","href":"/docs/core-concepts/upgrade-runtimes-services"}]}]},{"group":"Configure Apps \u0026 Services","icon":"settings","expanded":false,"pages":[{"group":"Configure apps","root":{"title":"Configure apps","sidebarTitle":"Overview","href":"/docs/configure-apps/index"},"pages":[{"group":"Image types","root":{"title":"Choose an image type","href":"/docs/configure-apps/app-reference/index"},"pages":[{"title":"Single-runtime image","href":"/docs/configure-apps/app-reference/single-runtime-image"},{"title":"Composable image","href":"/docs/configure-apps/app-reference/composable-image"}]},{"group":"Image properties","root":{"title":"Image properties","sidebarTitle":"Overview","href":"/docs/configure-apps/image-properties/index"},"pages":[{"title":"Access","href":"/docs/configure-apps/image-properties/access"},{"title":"Additional hosts","href":"/docs/configure-apps/image-properties/additional_hosts"},{"title":"Workload authorizations","sidebarTitle":"Authorizations","href":"/docs/configure-apps/image-properties/authorizations"},{"title":"Container profile","href":"/docs/configure-apps/image-properties/container_profile"},{"title":"Crons","href":"/docs/configure-apps/image-properties/crons"},{"title":"Hooks","href":"/docs/configure-apps/image-properties/hooks"},{"title":"Mounts","href":"/docs/configure-apps/image-properties/mounts"},{"title":"Relationships","href":"/docs/configure-apps/image-properties/relationships"},{"title":"Source","href":"/docs/configure-apps/image-properties/source"},{"title":"Variables","href":"/docs/configure-apps/image-properties/variables"},{"title":"Web","href":"/docs/configure-apps/image-properties/web"},{"title":"Workers","href":"/docs/configure-apps/image-properties/workers"}]},{"group":"Advanced","pages":[{"title":"Source operations","href":"/docs/configure-apps/source-operations"},{"title":"Runtime operations","href":"/docs/configure-apps/runtime-operations"},{"group":"Configure what's served","root":{"title":"Configure what's served","sidebarTitle":"Overview","href":"/docs/configure-apps/web/index"},"pages":[{"title":"Create a basic PHP app with a front controller","sidebarTitle":"PHP with front controller","href":"/docs/configure-apps/web/php-basic"},{"title":"Rewrite requests without redirects","sidebarTitle":"Rewrite requests","href":"/docs/configure-apps/web/rewrite-requests"},{"title":"Serve directories at different paths","sidebarTitle":"Serve different paths","href":"/docs/configure-apps/web/serve-different-directories"},{"title":"Serve static sites","sidebarTitle":"Static sites","href":"/docs/configure-apps/web/static"},{"title":"Set custom headers on static content","sidebarTitle":"Custom headers","href":"/docs/configure-apps/web/custom-headers"}]},{"group":"Multiple apps","root":{"title":"Set up multiple apps in a single project","sidebarTitle":"Overview","href":"/docs/configure-apps/multi-app/index"},"pages":[{"title":"Choose a project structure","href":"/docs/configure-apps/multi-app/project-structure"},{"title":"Define routes for your multiple apps","sidebarTitle":"Define routes","href":"/docs/configure-apps/multi-app/routes"},{"title":"Define relationships between your multiple apps","sidebarTitle":"Define relationships","href":"/docs/configure-apps/multi-app/relationships"}]},{"title":"Timezones","sidebarTitle":"Timezones","href":"/docs/configure-apps/timezone"},{"group":"Use build and deploy hooks","root":{"title":"Use build and deploy hooks","sidebarTitle":"Overview","href":"/docs/configure-apps/hooks/index"},"pages":[{"title":"Change hooks in different environments","href":"/docs/configure-apps/hooks/vary-hooks-by-environment"},{"title":"Comparison of hooks","href":"/docs/configure-apps/hooks/hooks-comparison"},{"title":"Use hooks with dependencies","href":"/docs/configure-apps/hooks/hooks-and-dependencies"}]},{"title":"Work with workers","sidebarTitle":"Work with workers","href":"/docs/configure-apps/workers"},{"title":"Configure tasks to run on-demand workloads and AI agents","sidebarTitle":"Task containers","href":"/docs/configure-apps/tasks"}]}]},{"group":"Languages","root":{"title":"Languages","sidebarTitle":"Overview","href":"/docs/languages/index"},"pages":[{"title":"C#/.NET Core","href":"/docs/languages/dotnet"},{"title":"Elixir","href":"/docs/languages/elixir"},{"title":"Go","href":"/docs/languages/go"},{"group":"Java","root":{"title":"Java","sidebarTitle":"Overview","href":"/docs/languages/java/index"},"pages":[{"title":"Moving a Java application to Upsun Cloud","sidebarTitle":"Moving to Upsun Cloud","href":"/docs/languages/java/migration"},{"title":"Performance tuning Java","sidebarTitle":"Tuning","href":"/docs/languages/java/tuning"}]},{"group":"JavaScript/Node.js","root":{"title":"JavaScript/Node.js","sidebarTitle":"Overview","href":"/docs/languages/nodejs/index"},"pages":[{"title":"Debugging","href":"/docs/languages/nodejs/debug"},{"title":"Manage Node.js versions","href":"/docs/languages/nodejs/node-version"}]},{"group":"PHP","root":{"title":"PHP","sidebarTitle":"Overview","href":"/docs/languages/php/index"},"pages":[{"title":"Extensions","href":"/docs/languages/php/extensions"},{"title":"PHP performance tuning","href":"/docs/languages/php/tuning"},{"title":"PHP-FPM sizing","href":"/docs/languages/php/fpm"},{"title":"FrankenPHP","sidebarTitle":"FrankenPHP","href":"/docs/languages/php/frankenphp"},{"title":"Using Xdebug","sidebarTitle":"Xdebug","href":"/docs/languages/php/xdebug"},{"title":"Custom Redis versions","sidebarTitle":"Custom Redis","href":"/docs/languages/php/redis"},{"title":"Swoole","sidebarTitle":"Swoole","href":"/docs/languages/php/swoole"},{"title":"Authenticated Composer repositories","sidebarTitle":"Authenticated Composer","href":"/docs/languages/php/composer-auth"},{"title":"Troubleshoot PHP","sidebarTitle":"Troubleshoot","href":"/docs/languages/php/troubleshoot"}]},{"group":"Python","root":{"title":"Python","sidebarTitle":"Overview","href":"/docs/languages/python/index"},"pages":[{"title":"Manage Python dependencies","sidebarTitle":"Manage dependencies","href":"/docs/languages/python/dependencies"},{"title":"Web servers","href":"/docs/languages/python/server"},{"title":"Manage Python versions in non-Python containers","sidebarTitle":"Python in non-Python containers","href":"/docs/languages/python/python-version"}]},{"title":"Ruby","href":"/docs/languages/ruby"},{"title":"Rust","href":"/docs/languages/rust"}]},{"group":"Services","root":{"title":"Add services","href":"/docs/add-services/index"},"pages":[{"title":"ClickHouse","href":"/docs/add-services/clickhouse"},{"title":"Elasticsearch and Enterprise Search (search service)","sidebarTitle":"Elasticsearch and Enterprise Search","href":"/docs/add-services/elasticsearch"},{"title":"Gotenberg","href":"/docs/add-services/gotenberg"},{"title":"Headless Chrome","href":"/docs/add-services/headless-chrome"},{"title":"InfluxDB (Database service)","sidebarTitle":"InfluxDB","href":"/docs/add-services/influxdb"},{"title":"Kafka (Message queue service)","sidebarTitle":"Kafka","href":"/docs/add-services/kafka"},{"title":"Memcached (Object cache)","sidebarTitle":"Memcached","href":"/docs/add-services/memcached"},{"title":"Mercure","sidebarTitle":"Mercure","href":"/docs/add-services/mercure"},{"title":"MongoDB (Database service)","sidebarTitle":"MongoDB","href":"/docs/add-services/mongodb"},{"group":"MariaDB/MySQL","root":{"title":"MariaDB/MySQL (database service)","sidebarTitle":"Overview","href":"/docs/add-services/mysql/index"},"pages":[{"title":"MariaDB read-only replication","sidebarTitle":"MariaDB read-only replication","href":"/docs/add-services/mysql/mysql-readonly-replication"},{"title":"MariaDB/MySQL external replication","sidebarTitle":"External replication","href":"/docs/add-services/mysql/mysql-replication"},{"title":"Troubleshoot MySQL","sidebarTitle":"Troubleshoot","href":"/docs/add-services/mysql/troubleshoot"}]},{"title":"Network Storage","href":"/docs/add-services/network-storage"},{"title":"OpenSearch (search service)","sidebarTitle":"OpenSearch","href":"/docs/add-services/opensearch"},{"group":"PostgreSQL","root":{"title":"PostgreSQL (Database service)","sidebarTitle":"Overview","href":"/docs/add-services/postgresql/index"},"pages":[{"title":"PostgreSQL read-only replication","sidebarTitle":"Read-only replication","href":"/docs/add-services/postgresql/postgresql-readonly-replication"}]},{"title":"RabbitMQ (message queue service)","sidebarTitle":"RabbitMQ","href":"/docs/add-services/rabbitmq"},{"title":"Redis (Object cache)","sidebarTitle":"Redis","href":"/docs/add-services/redis"},{"title":"Solr (Search service)","sidebarTitle":"Solr","href":"/docs/add-services/solr"},{"title":"Valkey","sidebarTitle":"Valkey","href":"/docs/add-services/valkey"},{"title":"Varnish","href":"/docs/add-services/varnish"},{"title":"Vault key management service","sidebarTitle":"Vault KMS","href":"/docs/add-services/vault"},{"group":"Self-hosted services","root":{"title":"Self-hosted services","sidebarTitle":"Self-hosted services","href":"/docs/add-services/self-hosted"},"pages":[{"group":"Public Docker images","root":{"title":"Self-hosted services from public Docker images","sidebarTitle":"Public Docker images","href":"/docs/add-services/docker-images/index"},"pages":[{"title":"Meilisearch","sidebarTitle":"Meilisearch","href":"/docs/add-services/docker-images/docker-meilisearch"},{"title":"n8n","sidebarTitle":"n8n","href":"/docs/add-services/docker-images/docker-n8n"}]}]}]},{"group":"Routes","root":{"title":"Define routes","sidebarTitle":"Overview","href":"/docs/routes/index"},"pages":[{"title":"Server Side Includes (SSI)","href":"/docs/routes/ssi"},{"title":"HTTP cache","href":"/docs/routes/cache"},{"title":"HTTPS","sidebarTitle":"HTTPS","href":"/docs/routes/https"},{"title":"Proxy routes","href":"/docs/routes/proxy"},{"title":"Redirects","href":"/docs/routes/redirects"}]}]},{"group":"Build, Deploy \u0026 Run","icon":"server","expanded":false,"pages":[{"title":"Build and deploy","href":"/docs/core-concepts/build-deploy"},{"group":"Local development","root":{"title":"Set up your local development environment","sidebarTitle":"Overview","href":"/docs/development/local/index"},"pages":[{"group":"Integrated environments","pages":[{"title":"Use DDEV for local development","sidebarTitle":"DDEV","href":"/docs/development/local/ddev"}]},{"group":"Supported environments","pages":[{"title":"Tethered local development","sidebarTitle":"Tethered","href":"/docs/development/local/tethered"},{"title":"Untethered local development","sidebarTitle":"Untethered","href":"/docs/development/local/untethered"}]}]},{"group":"Variables","root":{"title":"Variables overview","sidebarTitle":"Overview","href":"/docs/development/variables/index"},"pages":[{"title":"Set variables","href":"/docs/development/variables/set-variables"},{"title":"Use variables","href":"/docs/development/variables/use-variables"}]},{"group":"Development tools","root":{"title":"Development tools","href":"/docs/development/tools"},"pages":[{"title":"Access your site","href":"/docs/development/access-site"},{"title":"Transfer files to and from your app","sidebarTitle":"Transfer files","href":"/docs/development/file-transfer"},{"title":"HTTP Headers","sidebarTitle":"Headers","href":"/docs/development/headers"},{"title":"Send email from your Upsun Cloud environment using an SMTP proxy","sidebarTitle":"Email","href":"/docs/development/email"},{"title":"Pull code from a private Git repository","sidebarTitle":"Private repositories","href":"/docs/development/private-repository"},{"title":"Use Git submodules","sidebarTitle":"Git submodules","href":"/docs/development/submodules"},{"title":"Regions","href":"/docs/development/regions"},{"title":"Use Drush with Upsun Cloud","sidebarTitle":"Drush","href":"/docs/development/drush"}]},{"group":"SSH","root":{"title":"Connect securely with SSH","sidebarTitle":"Overview","href":"/docs/development/ssh/index"},"pages":[{"title":"Authenticate with SSH keys","sidebarTitle":"SSH keys","href":"/docs/development/ssh/ssh-keys"},{"title":"Troubleshoot SSH","href":"/docs/development/ssh/troubleshoot-ssh"}]},{"group":"Database management","root":{"title":"Sanitize databases","sidebarTitle":"Overview","href":"/docs/development/sanitize-db/index"},"pages":[{"title":"Sanitizing databases: MariaDB and Drupal","sidebarTitle":"MariaDB and Drupal","href":"/docs/development/sanitize-db/mariadb"},{"title":"Sanitizing databases: PostgreSQL and Django","sidebarTitle":"PostgreSQL and Django","href":"/docs/development/sanitize-db/postgresql"},{"title":"Sanitizing databases: PostgreSQL and Symfony","sidebarTitle":"PostgreSQL and Symfony","href":"/docs/development/sanitize-db/postgresql-symfony"}]}]},{"group":"Manage Projects","icon":"layout-grid","expanded":false,"pages":[{"title":"Manage projects","sidebarTitle":"Overview","href":"/docs/projects/index"},{"group":"Project settings","root":{"title":"Project settings","href":"/docs/projects/settings"},"pages":[{"title":"Change a project's region","sidebarTitle":"Change regions","href":"/docs/projects/region-migration"},{"title":"Change the project timezone","href":"/docs/projects/change-project-timezone"},{"title":"Delete a project","sidebarTitle":"Delete a project","href":"/docs/projects/delete-project"}]},{"group":"Custom domains","root":{"title":"Custom domains","sidebarTitle":"Overview","href":"/docs/domains/index"},"pages":[{"group":"Set up a custom domain","root":{"title":"Set up a custom domain","sidebarTitle":"Set up a custom domain","href":"/docs/domains/steps/index"},"pages":[{"title":"DNS management and apex domains","sidebarTitle":"DNS and apex domains","href":"/docs/domains/steps/dns"},{"title":"Configure a third-party TLS certificate","sidebarTitle":"Custom TLS certificates","href":"/docs/domains/steps/tls"},{"title":"Share subdomains across different projects","sidebarTitle":"Subdomains across projects","href":"/docs/domains/steps/subdomains"},{"title":"DNS challenge for domain ownership","sidebarTitle":"DNS challenge","href":"/docs/domains/steps/dns-challenge"},{"title":"Set up a custom domain on a preview environment","sidebarTitle":"Preview environment domains","href":"/docs/domains/steps/custom-domains-preview-environments"},{"title":"Troubleshoot domain issues","sidebarTitle":"Troubleshoot","href":"/docs/domains/troubleshoot"}]},{"group":"CDN","root":{"title":"Content delivery networks (CDNs)","sidebarTitle":"Overview","href":"/docs/domains/cdn/index"},"pages":[{"title":"Set up your Fastly CDN","sidebarTitle":"Fastly setup","href":"/docs/domains/cdn/fastly"},{"title":"Managed Fastly CDN","sidebarTitle":"Managed Fastly CDN","href":"/docs/domains/cdn/managed-fastly"},{"title":"Set up your Cloudflare CDN","sidebarTitle":"Cloudflare setup","href":"/docs/domains/cdn/cloudflare"}]}]},{"group":"Administration","root":{"title":"Administration","href":"/docs/administration/index"},"pages":[{"group":"Console","root":{"title":"Console","sidebarTitle":"Overview","href":"/docs/administration/web/index"},"pages":[{"title":"Configure a project","href":"/docs/administration/web/configure-project"},{"title":"Configure environments","sidebarTitle":"Configure environments","href":"/docs/administration/web/configure-environment"}]},{"title":"Organizations","href":"/docs/administration/organizations"},{"title":"Administer teams","sidebarTitle":"Teams","href":"/docs/administration/teams"},{"title":"Administer users","sidebarTitle":"Users","href":"/docs/administration/users"},{"title":"Pricing","href":"/docs/administration/pricing"},{"group":"Billing","root":{"title":"Billing","href":"/docs/administration/billing/index"},"pages":[{"title":"Set up a billing account and billing profile","href":"/docs/administration/billing/bp-setup"},{"title":"Add and manage payment methods","href":"/docs/administration/billing/bp-payment-method"},{"title":"View invoices","href":"/docs/administration/billing/bp-invoices"},{"title":"Monitor spending and usage","href":"/docs/administration/billing/bp-monitor-billing"},{"title":"Manage billing members on a billing profile","href":"/docs/administration/billing/bp-users"},{"title":"Edit a billing profile","href":"/docs/administration/billing/bp-edit-billing-profile"},{"title":"View discounts and commitments","href":"/docs/administration/billing/bp-discounts"},{"title":"View vouchers","href":"/docs/administration/billing/bp-vouchers"},{"title":"Transfer an organization to a different billing profile","href":"/docs/administration/billing/bp-transfers"},{"title":"Billing FAQ","href":"/docs/administration/billing/bp-faq"}]},{"title":"Server upgrades","href":"/docs/administration/servers"},{"group":"Security","root":{"title":"Security","sidebarTitle":"Overview","href":"/docs/administration/security/index"},"pages":[{"title":"Multifactor Authentication (MFA)","sidebarTitle":"Multifactor Authentication (MFA)","href":"/docs/administration/security/mfa"},{"title":"Single Sign-On (SSO)","sidebarTitle":"Single Sign-On (SSO)","href":"/docs/administration/security/sso"}]}]},{"group":"Security \u0026 compliance","root":{"title":"Security and compliance","sidebarTitle":"Overview","href":"/docs/security/index"},"pages":[{"title":"Fastly WAF","href":"/docs/security/fastly-waf"},{"title":"Upsun WAF","sidebarTitle":"Upsun WAF","href":"/docs/security/waf"},{"title":"Data retention","href":"/docs/security/data-retention"},{"title":"Project isolation","href":"/docs/security/project-isolation"}]}]},{"group":"Manage Environments","icon":"git-branch","expanded":false,"pages":[{"title":"Manage Upsun Cloud environments","sidebarTitle":"Overview","href":"/docs/environments/index"},{"group":"Backup \u0026 restore","root":{"title":"Backup \u0026 restore","href":"/docs/environments/backup-restore"},"pages":[{"title":"Back up an environment","sidebarTitle":"Back up an environment","href":"/docs/environments/backup"},{"title":"Restore an environment from a backup","sidebarTitle":"Restore an environment","href":"/docs/environments/restore"}]},{"group":"Environment settings","root":{"title":"Environment settings","href":"/docs/environments/settings"},"pages":[{"title":"Change an environment's parent","sidebarTitle":"Change parent","href":"/docs/environments/change-parent"},{"title":"Rename the default environment","sidebarTitle":"Rename the default environment","href":"/docs/environments/default-environment"},{"title":"Configure HTTP access control","sidebarTitle":"Configure HTTP access control","href":"/docs/environments/http-access-control"},{"title":"Manage search indexing for an environment","sidebarTitle":"Manage search indexing","href":"/docs/environments/search-engine-visibility"}]},{"group":"Environment actions","root":{"title":"Environment actions","href":"/docs/environments/actions"},"pages":[{"title":"Cancel an activity","href":"/docs/environments/cancel-activity"},{"title":"Deactivate an environment","sidebarTitle":"Deactivate an environment","href":"/docs/environments/deactivate-environment"}]}]},{"group":"Manage Resources","icon":"gauge","expanded":false,"pages":[{"title":"Manage resources","sidebarTitle":"Overview","href":"/docs/manage-resources/index"},{"title":"How resources work on Upsun Cloud","sidebarTitle":"How resources work","href":"/docs/manage-resources/how-resources-work"},{"group":"Configure resources","root":{"title":"Configure resources","href":"/docs/manage-resources/configure"},"pages":[{"title":"Resource initialization","sidebarTitle":"Resource initialization","href":"/docs/manage-resources/resource-init"},{"title":"Resource configuration","sidebarTitle":"Resource configuration","href":"/docs/manage-resources/adjust-resources"},{"title":"Project build resources","sidebarTitle":"Project build resources","href":"/docs/manage-resources/build-resources"}]},{"group":"Scaling","root":{"title":"Scaling","href":"/docs/manage-resources/scaling"},"pages":[{"title":"Autoscaling","sidebarTitle":"Autoscaling","href":"/docs/manage-resources/autoscaling"},{"title":"Guaranteed resources","sidebarTitle":"Guaranteed resources","href":"/docs/manage-resources/guaranteed-resources"}]},{"title":"Object storage","sidebarTitle":"Object storage","href":"/docs/manage-resources/object-storage"}]},{"group":"Observability \u0026 Metrics","icon":"activity","expanded":false,"pages":[{"title":"Increase observability","sidebarTitle":"Overview","href":"/docs/observability/index"},{"group":"Infrastructure metrics","root":{"title":"Infrastructure metrics","sidebarTitle":"Overview","href":"/docs/observability/metrics/index"},"pages":[{"title":"HTTP metrics","sidebarTitle":"HTTP metrics","href":"/docs/observability/metrics/http-metrics"},{"title":"Understand metrics","sidebarTitle":"Understand metrics","href":"/docs/observability/metrics/understand-metrics"}]},{"group":"Application metrics","root":{"title":"Application metrics","sidebarTitle":"Overview","href":"/docs/observability/application-metrics/index"},"pages":[{"title":"Monitor Cron job executions","sidebarTitle":"Monitor Cron job executions","href":"/docs/observability/application-metrics/cron-metrics"},{"title":"Understanding application observability","sidebarTitle":"Understanding application observability","href":"/docs/observability/application-metrics/understanding"},{"title":"Upsun Blackfire for PHP and Python","sidebarTitle":"Upsun Blackfire for PHP and Python","href":"/docs/observability/application-metrics/blackfire"},{"group":"Continuous profiling","pages":[{"title":"Continuous Profiling dashboard","sidebarTitle":"Dashboard","href":"/docs/observability/application-metrics/cont-prof"},{"title":"Comparing Continuous Profiling Timeframes","sidebarTitle":"Comparing Timeframes","href":"/docs/observability/application-metrics/cont-prof-comparison"},{"title":"Continuous profiling for Go","sidebarTitle":"Go continuous profiler","href":"/docs/observability/application-metrics/go"},{"title":"Continuous profiling for Java","sidebarTitle":"Java continuous profiler","href":"/docs/observability/application-metrics/java"},{"title":"Continuous profiling for Node.js","sidebarTitle":"Node.js continuous profiler","href":"/docs/observability/application-metrics/nodejs"},{"title":"Continuous profiling for PHP","sidebarTitle":"PHP continuous profiler","href":"/docs/observability/application-metrics/php"},{"title":"Continuous profiling for Python","sidebarTitle":"Python continuous profiler","href":"/docs/observability/application-metrics/python"},{"title":"Continuous profiling for Ruby","sidebarTitle":"Ruby continuous profiler","href":"/docs/observability/application-metrics/ruby"},{"title":"Continuous profiling for Rust","sidebarTitle":"Rust continuous profiler","href":"/docs/observability/application-metrics/rust"}]}]},{"group":"Logs","root":{"title":"Consume logs","sidebarTitle":"Overview","href":"/docs/observability/logs/index"},"pages":[{"title":"Log Explorer","sidebarTitle":"Log Explorer","href":"/docs/observability/logs/log-explorer"},{"title":"Access your logs","sidebarTitle":"Access logs","href":"/docs/observability/logs/access-logs"},{"title":"Forward Upsun Cloud and Upsun Blackfire logs","sidebarTitle":"Forward Upsun Cloud and Upsun Blackfire logs","href":"/docs/observability/logs/forward-logs"}]}]},{"group":"Integrations","icon":"link","expanded":false,"pages":[{"sidebarTitle":"Overview","title":"External Integrations","href":"/docs/integrations/overview"},{"group":"Source integrations","root":{"title":"Source integrations","sidebarTitle":"Overview","href":"/docs/integrations/source/index"},"pages":[{"title":"Integrate with Bitbucket","sidebarTitle":"Bitbucket","href":"/docs/integrations/source/bitbucket"},{"title":"Integrate with GitHub","sidebarTitle":"GitHub","href":"/docs/integrations/source/github"},{"title":"Integrate with GitLab","sidebarTitle":"GitLab","href":"/docs/integrations/source/gitlab"},{"title":"Resolve access issues with source integrations","sidebarTitle":"Resolve access issues with source integrations","href":"/docs/integrations/source/troubleshoot"}]},{"group":"Activity scripts","root":{"title":"Activity scripts","sidebarTitle":"Overview","href":"/docs/integrations/activity/index"},"pages":[{"title":"Activity reference","sidebarTitle":"Activity reference","href":"/docs/integrations/activity/reference"},{"title":"Utility routines","sidebarTitle":"Utility routines","href":"/docs/integrations/activity/utility"},{"title":"Webhooks","href":"/docs/integrations/activity/webhooks"},{"group":"Examples","pages":[{"title":"Example: Discord","href":"/docs/integrations/activity/discord"},{"title":"Example: Slack","sidebarTitle":"Example: Slack","href":"/docs/integrations/activity/slack"}]}]},{"title":"Fastly CDN","href":"/docs/integrations/fastly-cdn"},{"title":"Health notifications","href":"/docs/integrations/notifications"}]},{"group":"Troubleshooting","icon":"circle-alert","expanded":false,"pages":[{"title":"502 error resolution guide","sidebarTitle":"502 error resolutions","href":"/docs/troubleshooting/502-errors"},{"title":"Troubleshoot development","sidebarTitle":"Development","href":"/docs/troubleshooting/general"},{"title":"Troubleshoot disks","sidebarTitle":"Disks","href":"/docs/troubleshooting/disks"},{"title":"Troubleshoot mounts","sidebarTitle":"Mounts","href":"/docs/troubleshooting/mounts"}]},{"group":"Resources","icon":"code","expanded":false,"pages":[{"title":"Glossary","sidebarTitle":"Glossary","href":"/docs/glossary/index"},{"title":"Data Register","sidebarTitle":"Data Register","href":"/docs/registry/index"},{"title":"Request features","sidebarTitle":"Request features","href":"/docs/request-features/index"}]}]},{"anchor":"Tutorials","icon":"graduation-cap","pages":[{"title":"Tutorials","sidebarTitle":"Overview","icon":"graduation-cap","href":"/tutorials/index"},{"group":"AI use cases","icon":"brain","pages":[{"title":"AI use cases","sidebarTitle":"Overview","href":"/tutorials/ai/index"},{"title":"Building a LangChain chatbot on Upsun Cloud","sidebarTitle":"LangChain chatbot","tag":"New","href":"/tutorials/ai/langchain-chatbot"},{"title":"Building a RAG pipeline with Qdrant on Upsun Cloud","sidebarTitle":"RAG pipeline","tag":"New","href":"/tutorials/ai/rag-pipeline"},{"title":"Deploying a coding agent with opencode on Upsun Cloud","sidebarTitle":"Coding agent","tag":"New","href":"/tutorials/ai/coding-agent"},{"title":"Building a news digest with workers on Upsun Cloud","sidebarTitle":"News digest","tag":"New","href":"/tutorials/ai/news-digest"},{"title":"Building an AI support ticket classifier on Upsun Cloud","sidebarTitle":"Form processing","tag":"New","href":"/tutorials/ai/form-processing"},{"title":"Building an AI-powered BI tool on Upsun Cloud","sidebarTitle":"eCommerce insights","tag":"New","href":"/tutorials/ai/ecommerce-insights"}]},{"group":"Self-hosted services","icon":"server","pages":[{"title":"Self-hosted services","sidebarTitle":"Overview","href":"/tutorials/self-hosted/index"},{"title":"Qdrant","sidebarTitle":"Qdrant","href":"/tutorials/self-hosted/qdrant"},{"title":"Chroma","sidebarTitle":"Chroma","href":"/tutorials/self-hosted/chroma"}]},{"group":"CMS guides","icon":"newspaper","pages":[{"title":"CMS guides","sidebarTitle":"Overview","href":"/tutorials/cms/index"},{"group":"WordPress","root":{"title":"Deploy WordPress on Upsun Cloud","sidebarTitle":"WordPress","href":"/tutorials/wordpress/index"},"pages":[{"title":"Deploy Vanilla WordPress on Upsun Cloud","sidebarTitle":"Vanilla WordPress","href":"/tutorials/wordpress/vanilla"},{"title":"Deploy Composer-based WordPress on Upsun Cloud","sidebarTitle":"Composer WordPress","href":"/tutorials/wordpress/composer"},{"title":"Deploy Bedrock-based WordPress on Upsun Cloud","sidebarTitle":"Bedrock WordPress","href":"/tutorials/wordpress/bedrock"},{"title":"Deploy WordPress Multisite on Upsun Cloud","sidebarTitle":"WordPress Multisite","href":"/tutorials/wordpress/multisite"}]},{"title":"Deploy Drupal on Upsun Cloud","sidebarTitle":"Drupal","href":"/tutorials/drupal"},{"title":"Deploy Magento on Upsun Cloud","sidebarTitle":"Magento","href":"/tutorials/magento"},{"title":"Deploy Shopware on Upsun Cloud","sidebarTitle":"Shopware","href":"/tutorials/shopware"},{"title":"Deploy Pimcore on Upsun Cloud","sidebarTitle":"Pimcore","href":"/tutorials/pimcore"},{"title":"Deploy Liferay on Upsun Cloud","sidebarTitle":"Liferay","href":"/tutorials/liferay"}]},{"group":"Migration guides","icon":"move-right","pages":[{"title":"Migration guides","sidebarTitle":"Overview","href":"/tutorials/migration/index"},{"title":"Migrating from another provider to Upsun Cloud","sidebarTitle":"From another provider","href":"/tutorials/migration/from-other-provider"},{"title":"Converting from Upsun Fixed (formerly Platform.sh)","sidebarTitle":"Converting from Upsun Fixed (formerly Platform.sh)","href":"/tutorials/migration/from-fixed"}]}]},{"anchor":"API","icon":"code","pages":[{"title":"Upsun Cloud API","sidebarTitle":"API Home","icon":"code","href":"/api/index"},{"group":"SDK","pages":[{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","href":"/api/sdk/overview"},{"title":"Upsun Cloud SDK for PHP","sidebarTitle":"PHP","icon":"php","tag":"Beta","href":"/api/sdk/php"},{"title":"Upsun Cloud SDK for NodeJs","sidebarTitle":"NodeJs","icon":"js","tag":"Beta","href":"/api/sdk/js"}]},{"group":"REST API","pages":[{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","href":"/api/rest/overview"},{"title":"Authentication","icon":"lock","sidebarTitle":"Authentication","href":"/api/rest/authentication"},{"title":"Errors","icon":"circle-x","sidebarTitle":"Errors","href":"/api/rest/errors"},{"title":"Endpoints","icon":"route","sidebarTitle":"Endpoints","href":"/api/rest/endpoints"}]},{"group":"OpenAPI Reference","pages":[{"group":"API Reference","pages":[{"title":"Query project carbon emissions metrics for an entire organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/metrics/carbon","href":"/api-reference/query-project-carbon-emissions-metrics-for-an-entire-organization"},{"title":"List support tickets","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets","href":"/api-reference/list-support-tickets"}]},{"group":"Activity","pages":[{"title":"Get projects environments tasks activities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities","href":"/api-reference/activity/get-projects-environments-tasks-activities"},{"title":"Get projects environments tasks activities 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities/{activityId}","href":"/api-reference/activity/get-projects-environments-tasks-activities-1"},{"title":"Post projects environments tasks activities cancel","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities/{activityId}/cancel","href":"/api-reference/activity/post-projects-environments-tasks-activities-cancel"}]},{"group":"Add-ons","pages":[{"title":"Get add-ons","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/addons","href":"/api-reference/add-ons/get-add-ons"}]},{"group":"Alerts","pages":[{"title":"Get usage alerts for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /alerts/subscriptions/{subscriptionId}/usage","href":"/api-reference/alerts/get-usage-alerts-for-a-subscription"},{"title":"Update usage alerts.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /alerts/subscriptions/{subscriptionId}/usage","href":"/api-reference/alerts/update-usage-alerts"}]},{"group":"API Tokens","pages":[{"title":"List a user's API tokens","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/api-tokens","href":"/api-reference/api-tokens/list-a-users-api-tokens"},{"title":"Create an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/api-tokens","href":"/api-reference/api-tokens/create-an-api-token"},{"title":"Get an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/api-tokens/{token_id}","href":"/api-reference/api-tokens/get-an-api-token"},{"title":"Delete an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/api-tokens/{token_id}","href":"/api-reference/api-tokens/delete-an-api-token"}]},{"group":"Autoscaling","pages":[{"title":"Retrieves Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/retrieves-autoscaler-settings"},{"title":"Updates Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/updates-autoscaler-settings"},{"title":"Modifies Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/modifies-autoscaler-settings"}]},{"group":"Blackfire Monitoring","pages":[{"title":"Get server cache metrics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/caches","href":"/api-reference/blackfire-monitoring/get-server-cache-metrics"},{"title":"Get server monitoring overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server","href":"/api-reference/blackfire-monitoring/get-server-monitoring-overview"},{"title":"Get server transaction breakdown","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/transactions-break-down","href":"/api-reference/blackfire-monitoring/get-server-transaction-breakdown"},{"title":"Get top spans","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/top-spans","href":"/api-reference/blackfire-monitoring/get-top-spans"}]},{"group":"Blackfire Profiling","pages":[{"title":"Get profile timeline data","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/timeline","href":"/api-reference/blackfire-profiling/get-profile-timeline-data"},{"title":"Get profile subprofiles","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/subprofiles","href":"/api-reference/blackfire-profiling/get-profile-subprofiles"},{"title":"Get profile details","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/profile","href":"/api-reference/blackfire-profiling/get-profile-details"},{"title":"Get profile call graph","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/graph","href":"/api-reference/blackfire-profiling/get-profile-call-graph"},{"title":"Get recommendation statistics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/recommendations","href":"/api-reference/blackfire-profiling/get-recommendation-statistics"},{"title":"List profiling results","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles","href":"/api-reference/blackfire-profiling/list-profiling-results"}]},{"group":"Cert Management","pages":[{"title":"Get list of SSL certificates","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/certificates","href":"/api-reference/cert-management/get-list-of-ssl-certificates"},{"title":"Add an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/certificates","href":"/api-reference/cert-management/add-an-ssl-certificate"},{"title":"Get an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/get-an-ssl-certificate"},{"title":"Delete an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/delete-an-ssl-certificate"},{"title":"Update an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/update-an-ssl-certificate"},{"title":"Get projects provisioners","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/provisioners","href":"/api-reference/cert-management/get-projects-provisioners"},{"title":"Get projects provisioners 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/provisioners/{certificateProvisionerDocumentId}","href":"/api-reference/cert-management/get-projects-provisioners-1"},{"title":"Patch projects provisioners","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/provisioners/{certificateProvisionerDocumentId}","href":"/api-reference/cert-management/patch-projects-provisioners"}]},{"group":"Connections","pages":[{"title":"List federated login connections","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/connections","href":"/api-reference/connections/list-federated-login-connections"},{"title":"Get a federated login connection","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/connections/{provider}","href":"/api-reference/connections/get-a-federated-login-connection"},{"title":"Delete a federated login connection","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/connections/{provider}","href":"/api-reference/connections/delete-a-federated-login-connection"}]},{"group":"Continuous Profiling","pages":[{"title":"List profiled applications","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling","href":"/api-reference/continuous-profiling/list-profiled-applications"},{"title":"Get application timeline","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}","href":"/api-reference/continuous-profiling/get-application-timeline"},{"title":"Get merged profile","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}/merge","href":"/api-reference/continuous-profiling/get-merged-profile"},{"title":"Get application filter values","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}/filter","href":"/api-reference/continuous-profiling/get-application-filter-values"}]},{"group":"Deployment","pages":[{"title":"Get an environment's deployment information","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/deployments","href":"/api-reference/deployment/get-an-environments-deployment-information"},{"title":"Get a single environment deployment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}","href":"/api-reference/deployment/get-a-single-environment-deployment"}]},{"group":"Deployment Target","pages":[{"title":"Get project deployment target info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/deployments","href":"/api-reference/deployment-target/get-project-deployment-target-info"},{"title":"Create a project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/deployments","href":"/api-reference/deployment-target/create-a-project-deployment-target"},{"title":"Get a single project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/get-a-single-project-deployment-target"},{"title":"Delete a single project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/delete-a-single-project-deployment-target"},{"title":"Update a project deployment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/update-a-project-deployment"}]},{"group":"Diff","pages":[{"title":"Get projects gitdiffs ","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/diffs/{diffBaseId}/{diffTargetId}","href":"/api-reference/diff/get-projects-gitdiffs-"}]},{"group":"Discounts","pages":[{"title":"Get an organization discount","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /discounts/{id}","href":"/api-reference/discounts/get-an-organization-discount"},{"title":"Get the value of the First Project Incentive discount","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /discounts/types/allowance","href":"/api-reference/discounts/get-the-value-of-the-first-project-incentive-discount"},{"title":"List organization discounts","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/discounts","href":"/api-reference/discounts/list-organization-discounts"}]},{"group":"Domain Claim","pages":[{"title":"Get projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domain-claims","href":"/api-reference/domain-claim/get-projects-domain-claims"},{"title":"Post projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/domain-claims","href":"/api-reference/domain-claim/post-projects-domain-claims"},{"title":"Get projects domain claims 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/get-projects-domain-claims-1"},{"title":"Delete projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/delete-projects-domain-claims"},{"title":"Patch projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/patch-projects-domain-claims"}]},{"group":"Domain Management","pages":[{"title":"Get list of project domains","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domains","href":"/api-reference/domain-management/get-list-of-project-domains"},{"title":"Add a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/domains","href":"/api-reference/domain-management/add-a-project-domain"},{"title":"Get a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/get-a-project-domain"},{"title":"Delete a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/delete-a-project-domain"},{"title":"Update a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/update-a-project-domain"},{"title":"Get a list of environment domains","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/domains","href":"/api-reference/domain-management/get-a-list-of-environment-domains"},{"title":"Add an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/domains","href":"/api-reference/domain-management/add-an-environment-domain"},{"title":"Get an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/get-an-environment-domain"},{"title":"Delete an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/delete-an-environment-domain"},{"title":"Update an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/update-an-environment-domain"}]},{"group":"Entrypoint","pages":[{"title":"Get observability entrypoint","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability","href":"/api-reference/entrypoint/get-observability-entrypoint"}]},{"group":"Environment","pages":[{"title":"Get list of project environments","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments","href":"/api-reference/environment/get-list-of-project-environments"},{"title":"Get an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/get-an-environment"},{"title":"Delete an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/delete-an-environment"},{"title":"Update an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/update-an-environment"},{"title":"Activate an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/activate","href":"/api-reference/environment/activate-an-environment"},{"title":"Branch an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/branch","href":"/api-reference/environment/branch-an-environment"},{"title":"Deactivate an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deactivate","href":"/api-reference/environment/deactivate-an-environment"},{"title":"Deploy an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deploy","href":"/api-reference/environment/deploy-an-environment"},{"title":"Initialize a new environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/initialize","href":"/api-reference/environment/initialize-a-new-environment"},{"title":"Post projects environments maintenance redeploy","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/maintenance-redeploy","href":"/api-reference/environment/post-projects-environments-maintenance-redeploy"},{"title":"Merge an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/merge","href":"/api-reference/environment/merge-an-environment"},{"title":"Pause an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/pause","href":"/api-reference/environment/pause-an-environment"},{"title":"Redeploy an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/redeploy","href":"/api-reference/environment/redeploy-an-environment"},{"title":"Resume a paused environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/resume","href":"/api-reference/environment/resume-a-paused-environment"},{"title":"Synchronize a child environment with its parent","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/synchronize","href":"/api-reference/environment/synchronize-a-child-environment-with-its-parent"}]},{"group":"Environment Activity","pages":[{"title":"Get environment activity log","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/activities","href":"/api-reference/environment-activity/get-environment-activity-log"},{"title":"Get an environment activity log entry","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/activities/{activityId}","href":"/api-reference/environment-activity/get-an-environment-activity-log-entry"},{"title":"Cancel an environment activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/activities/{activityId}/cancel","href":"/api-reference/environment-activity/cancel-an-environment-activity"},{"title":"Cancel an integration activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/integrations/{integrationId}/activities/{activityId}/cancel","href":"/api-reference/environment-activity/cancel-an-integration-activity"}]},{"group":"Environment Backups","pages":[{"title":"Create backup of environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/backup","href":"/api-reference/environment-backups/create-backup-of-environment"},{"title":"Get an environment's backup list","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/backups","href":"/api-reference/environment-backups/get-an-environments-backup-list"},{"title":"Get an environment backup's info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/backups/{backupId}","href":"/api-reference/environment-backups/get-an-environment-backups-info"},{"title":"Delete an environment backup","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/backups/{backupId}","href":"/api-reference/environment-backups/delete-an-environment-backup"},{"title":"Restore an environment snapshot","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/backups/{backupId}/restore","href":"/api-reference/environment-backups/restore-an-environment-snapshot"}]},{"group":"Environment Type","pages":[{"title":"Get environment types","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environment-types","href":"/api-reference/environment-type/get-environment-types"},{"title":"Get environment type links","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environment-types/{environmentTypeId}","href":"/api-reference/environment-type/get-environment-type-links"}]},{"group":"Environment Variables","pages":[{"title":"Get list of environment variables","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/variables","href":"/api-reference/environment-variables/get-list-of-environment-variables"},{"title":"Add an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/variables","href":"/api-reference/environment-variables/add-an-environment-variable"},{"title":"Get an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/get-an-environment-variable"},{"title":"Delete an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/delete-an-environment-variable"},{"title":"Update an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/update-an-environment-variable"}]},{"group":"Grants","pages":[{"title":"List extended access of a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/extended-access","href":"/api-reference/grants/list-extended-access-of-a-user"},{"title":"Get access document by access ID","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /access/{access_id}","href":"/api-reference/grants/get-access-document-by-access-id"}]},{"group":"Http Traffic","pages":[{"title":"Get HTTP traffic timeline by URL","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/urls","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-url"},{"title":"Get HTTP traffic timeline by IP","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/ips","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-ip"},{"title":"Get HTTP traffic timeline by user agent","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/user-agents","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-user-agent"}]},{"group":"Invoices","pages":[{"title":"List invoices","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invoices","href":"/api-reference/invoices/list-invoices"},{"title":"Get invoice","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invoices/{invoice_id}","href":"/api-reference/invoices/get-invoice"}]},{"group":"Logs","pages":[{"title":"Get logs overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/logs/overview","href":"/api-reference/logs/get-logs-overview"},{"title":"Query log entries","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/logs/query","href":"/api-reference/logs/query-log-entries"}]},{"group":"MFA","pages":[{"title":"Get information about TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/totp","href":"/api-reference/mfa/get-information-about-totp-enrollment"},{"title":"Confirm TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/totp","href":"/api-reference/mfa/confirm-totp-enrollment"},{"title":"Withdraw TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/totp","href":"/api-reference/mfa/withdraw-totp-enrollment"},{"title":"Re-create recovery codes","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/codes","href":"/api-reference/mfa/re-create-recovery-codes"},{"title":"Get organization MFA settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/mfa-enforcement","href":"/api-reference/mfa/get-organization-mfa-settings"},{"title":"Enable organization MFA enforcement","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa-enforcement/enable","href":"/api-reference/mfa/enable-organization-mfa-enforcement"},{"title":"Disable organization MFA enforcement","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa-enforcement/disable","href":"/api-reference/mfa/disable-organization-mfa-enforcement"},{"title":"Send MFA reminders to organization members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa/remind","href":"/api-reference/mfa/send-mfa-reminders-to-organization-members"}]},{"group":"Orders","pages":[{"title":"Download an invoice.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /orders/download","href":"/api-reference/orders/download-an-invoice"},{"title":"List orders","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/orders","href":"/api-reference/orders/list-orders"},{"title":"Get order","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/orders/{order_id}","href":"/api-reference/orders/get-order"},{"title":"Create confirmation credentials for for 3D-Secure","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/orders/{order_id}/authorize","href":"/api-reference/orders/create-confirmation-credentials-for-for-3d-secure"}]},{"group":"Organization Invitations","pages":[{"title":"List invitations to an organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invitations","href":"/api-reference/organization-invitations/list-invitations-to-an-organization"},{"title":"Invite user to an organization by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/invitations","href":"/api-reference/organization-invitations/invite-user-to-an-organization-by-email"},{"title":"Cancel a pending invitation to an organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/invitations/{invitation_id}","href":"/api-reference/organization-invitations/cancel-a-pending-invitation-to-an-organization"}]},{"group":"Organization Management","pages":[{"title":"Estimate total spend","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/estimate","href":"/api-reference/organization-management/estimate-total-spend"},{"title":"Get billing alert configuration","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/alerts/billing","href":"/api-reference/organization-management/get-billing-alert-configuration"},{"title":"Update billing alert configuration","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/alerts/billing","href":"/api-reference/organization-management/update-billing-alert-configuration"},{"title":"Get organization prepayment information","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/prepayment","href":"/api-reference/organization-management/get-organization-prepayment-information"},{"title":"List organization prepayment transactions","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/prepayment/transactions","href":"/api-reference/organization-management/list-organization-prepayment-transactions"}]},{"group":"Organization Members","pages":[{"title":"List organization members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/members","href":"/api-reference/organization-members/list-organization-members"},{"title":"Create organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/members","href":"/api-reference/organization-members/create-organization-member"},{"title":"Get organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/get-organization-member"},{"title":"Delete organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/delete-organization-member"},{"title":"Update organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/update-organization-member"}]},{"group":"Organization Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects","href":"/api-reference/organization-projects/list-projects"},{"title":"Create project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/projects","href":"/api-reference/organization-projects/create-project"},{"title":"Stream provisioning progress","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/provisioning","href":"/api-reference/organization-projects/stream-provisioning-progress"},{"title":"Get project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/get-project"},{"title":"Delete project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/delete-project"},{"title":"Update project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/update-project"},{"title":"Query project carbon emissions metrics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/metrics/carbon","href":"/api-reference/organization-projects/query-project-carbon-emissions-metrics"}]},{"group":"Organizations","pages":[{"title":"User organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/organizations","href":"/api-reference/organizations/user-organizations"},{"title":"List organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations","href":"/api-reference/organizations/list-organizations"},{"title":"Create organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations","href":"/api-reference/organizations/create-organization"},{"title":"Get organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}","href":"/api-reference/organizations/get-organization"},{"title":"Delete organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}","href":"/api-reference/organizations/delete-organization"},{"title":"Update organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}","href":"/api-reference/organizations/update-organization"}]},{"group":"PhoneNumber","pages":[{"title":"Verify phone number","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/phonenumber","href":"/api-reference/phonenumber/verify-phone-number"},{"title":"Confirm phone number","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/phonenumber/{sid}","href":"/api-reference/phonenumber/confirm-phone-number"}]},{"group":"Profiles","pages":[{"title":"Get address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/address","href":"/api-reference/profiles/get-address"},{"title":"Update address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/address","href":"/api-reference/profiles/update-address"},{"title":"Get profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/profile","href":"/api-reference/profiles/get-profile"},{"title":"Update profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/profile","href":"/api-reference/profiles/update-profile"}]},{"group":"Project","pages":[{"title":"Get a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}","href":"/api-reference/project/get-a-project"},{"title":"Get a project's capabilities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/capabilities","href":"/api-reference/project/get-a-projects-capabilities"},{"title":"Clear project build cache","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/clear_build_cache","href":"/api-reference/project/clear-project-build-cache"},{"title":"Post projects maintenance redeploy","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/maintenance-redeploy","href":"/api-reference/project/post-projects-maintenance-redeploy"}]},{"group":"Project Activity","pages":[{"title":"Get project activity log","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/activities","href":"/api-reference/project-activity/get-project-activity-log"},{"title":"Get a project activity log entry","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/activities/{activityId}","href":"/api-reference/project-activity/get-a-project-activity-log-entry"},{"title":"Cancel a project activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/activities/{activityId}/cancel","href":"/api-reference/project-activity/cancel-a-project-activity"}]},{"group":"Project Invitations","pages":[{"title":"List invitations to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/invitations","href":"/api-reference/project-invitations/list-invitations-to-a-project"},{"title":"Invite user to a project by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/invitations","href":"/api-reference/project-invitations/invite-user-to-a-project-by-email"},{"title":"Cancel a pending invitation to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/invitations/{invitation_id}","href":"/api-reference/project-invitations/cancel-a-pending-invitation-to-a-project"}]},{"group":"Project Settings","pages":[{"title":"Get list of project settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/settings","href":"/api-reference/project-settings/get-list-of-project-settings"},{"title":"Update a project setting","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/settings","href":"/api-reference/project-settings/update-a-project-setting"}]},{"group":"Project Variables","pages":[{"title":"Get list of project variables","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/variables","href":"/api-reference/project-variables/get-list-of-project-variables"},{"title":"Add a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/variables","href":"/api-reference/project-variables/add-a-project-variable"},{"title":"Get a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/get-a-project-variable"},{"title":"Delete a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/delete-a-project-variable"},{"title":"Update a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/update-a-project-variable"}]},{"group":"Projects","pages":[{"title":"List a project's resource usage history","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/usage-history","href":"/api-reference/projects/list-a-projects-resource-usage-history"},{"title":"List project history","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/history","href":"/api-reference/projects/list-project-history"},{"title":"List a project's plan and addon change history","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/plan-history","href":"/api-reference/projects/list-a-projects-plan-and-addon-change-history"}]},{"group":"Records","pages":[{"title":"List plan records","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/records/plan","href":"/api-reference/records/list-plan-records"},{"title":"List usage records","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/records/usage","href":"/api-reference/records/list-usage-records"}]},{"group":"References","pages":[{"title":"List referenced users","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/users","href":"/api-reference/references/list-referenced-users"},{"title":"List referenced teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/teams","href":"/api-reference/references/list-referenced-teams"},{"title":"List referenced organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/organizations","href":"/api-reference/references/list-referenced-organizations"},{"title":"List referenced projects","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/projects","href":"/api-reference/references/list-referenced-projects"},{"title":"List referenced regions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/regions","href":"/api-reference/references/list-referenced-regions"}]},{"group":"Regions","pages":[{"title":"List regions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /regions","href":"/api-reference/regions/list-regions"},{"title":"Get region","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /regions/{region_id}","href":"/api-reference/regions/get-region"}]},{"group":"Repository","pages":[{"title":"Get a blob object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/blobs/{repositoryBlobId}","href":"/api-reference/repository/get-a-blob-object"},{"title":"Get a commit object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/commits/{repositoryCommitId}","href":"/api-reference/repository/get-a-commit-object"},{"title":"Get list of repository refs","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/refs","href":"/api-reference/repository/get-list-of-repository-refs"},{"title":"Get a ref object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/refs/{repositoryRefId}","href":"/api-reference/repository/get-a-ref-object"},{"title":"Get a tree object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/trees/{repositoryTreeId}","href":"/api-reference/repository/get-a-tree-object"}]},{"group":"Resources","pages":[{"title":"Get resource metrics overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/overview","href":"/api-reference/resources/get-resource-metrics-overview"},{"title":"Get resource metrics summary","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/summary","href":"/api-reference/resources/get-resource-metrics-summary"},{"title":"Get resource metrics by service","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/service/{service}","href":"/api-reference/resources/get-resource-metrics-by-service"}]},{"group":"Routing","pages":[{"title":"Get list of routes","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/routes","href":"/api-reference/routing/get-list-of-routes"},{"title":"Get a route's info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/routes/{routeId}","href":"/api-reference/routing/get-a-routes-info"}]},{"group":"Runtime Operations","pages":[{"title":"Execute a runtime operation","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}/operations","href":"/api-reference/runtime-operations/execute-a-runtime-operation"}]},{"group":"Source Operations","pages":[{"title":"Trigger a source operation","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/source-operation","href":"/api-reference/source-operations/trigger-a-source-operation"},{"title":"List source operations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/source-operations","href":"/api-reference/source-operations/list-source-operations"}]},{"group":"SSH","pages":[{"title":"List a user's SSH keys","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/ssh-keys","href":"/api-reference/ssh/list-a-users-ssh-keys"},{"title":"Add an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/ssh-keys","href":"/api-reference/ssh/add-an-ssh-key"},{"title":"Get an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/ssh-keys/{key_id}","href":"/api-reference/ssh/get-an-ssh-key"},{"title":"Delete an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/ssh-keys/{key_id}","href":"/api-reference/ssh/delete-an-ssh-key"}]},{"group":"Subscriptions","pages":[{"title":"Checks if the user is able to update a project.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /subscriptions/{subscriptionId}/can-update","href":"/api-reference/subscriptions/checks-if-the-user-is-able-to-update-a-project"},{"title":"Checks if the user can afford the requested resources.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /subscriptions/{subscriptionId}/can-afford","href":"/api-reference/subscriptions/checks-if-the-user-can-afford-the-requested-resources"},{"title":"Estimate the price of a new subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/estimate","href":"/api-reference/subscriptions/estimate-the-price-of-a-new-subscription"},{"title":"Checks if the user is able to create a new project.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/can-create","href":"/api-reference/subscriptions/checks-if-the-user-is-able-to-create-a-new-project"},{"title":"Estimate the price of a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/estimate","href":"/api-reference/subscriptions/estimate-the-price-of-a-subscription"},{"title":"Get current usage for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/current_usage","href":"/api-reference/subscriptions/get-current-usage-for-a-subscription"},{"title":"List addons for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/addons","href":"/api-reference/subscriptions/list-addons-for-a-subscription"},{"title":"Get usage alerts","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/alerts/subscriptions/{subscription_id}/usage","href":"/api-reference/subscriptions/get-usage-alerts"},{"title":"Update usage alerts.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/alerts/subscriptions/{subscription_id}/usage","href":"/api-reference/subscriptions/update-usage-alerts"},{"title":"List subscriptions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions","href":"/api-reference/subscriptions/list-subscriptions"},{"title":"Create subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/subscriptions","href":"/api-reference/subscriptions/create-subscription"},{"title":"Get subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/get-subscription"},{"title":"Delete subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/delete-subscription"},{"title":"Update subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/update-subscription"}]},{"group":"Support","pages":[{"title":"Create a new support ticket","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /tickets","href":"/api-reference/support/create-a-new-support-ticket"},{"title":"Update a ticket","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /tickets/{ticket_id}","href":"/api-reference/support/update-a-ticket"},{"title":"List support ticket priorities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets/priority","href":"/api-reference/support/list-support-ticket-priorities"},{"title":"List support ticket categories","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets/category","href":"/api-reference/support/list-support-ticket-categories"}]},{"group":"System Information","pages":[{"title":"Get information about the Git server.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/system","href":"/api-reference/system-information/get-information-about-the-git-server"},{"title":"Restart the Git server","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/system/restart","href":"/api-reference/system-information/restart-the-git-server"}]},{"group":"Task","pages":[{"title":"Get projects environments tasks","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks","href":"/api-reference/task/get-projects-environments-tasks"},{"title":"Get projects environments tasks 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}","href":"/api-reference/task/get-projects-environments-tasks-1"},{"title":"Post projects environments tasks run","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/run","href":"/api-reference/task/post-projects-environments-tasks-run"}]},{"group":"Team Access","pages":[{"title":"List team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/team-access","href":"/api-reference/team-access/list-team-access-for-a-project"},{"title":"Grant team access to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/team-access","href":"/api-reference/team-access/grant-team-access-to-a-project"},{"title":"Get team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/team-access/{team_id}","href":"/api-reference/team-access/get-team-access-for-a-project"},{"title":"Remove team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/team-access/{team_id}","href":"/api-reference/team-access/remove-team-access-for-a-project"},{"title":"List project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/project-access","href":"/api-reference/team-access/list-project-access-for-a-team"},{"title":"Grant project access to a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams/{team_id}/project-access","href":"/api-reference/team-access/grant-project-access-to-a-team"},{"title":"Get project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/project-access/{project_id}","href":"/api-reference/team-access/get-project-access-for-a-team"},{"title":"Remove project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}/project-access/{project_id}","href":"/api-reference/team-access/remove-project-access-for-a-team"}]},{"group":"Teams","pages":[{"title":"List teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams","href":"/api-reference/teams/list-teams"},{"title":"Create team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams","href":"/api-reference/teams/create-team"},{"title":"Get team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}","href":"/api-reference/teams/get-team"},{"title":"Delete team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}","href":"/api-reference/teams/delete-team"},{"title":"Update team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /teams/{team_id}","href":"/api-reference/teams/update-team"},{"title":"List team members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/members","href":"/api-reference/teams/list-team-members"},{"title":"Create team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams/{team_id}/members","href":"/api-reference/teams/create-team-member"},{"title":"Get team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/members/{user_id}","href":"/api-reference/teams/get-team-member"},{"title":"Delete team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}/members/{user_id}","href":"/api-reference/teams/delete-team-member"},{"title":"User teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/teams","href":"/api-reference/teams/user-teams"}]},{"group":"Third-Party Integrations","pages":[{"title":"Get list of existing integrations for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/integrations","href":"/api-reference/third-party-integrations/get-list-of-existing-integrations-for-a-project"},{"title":"Integrate project with a third-party service","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/integrations","href":"/api-reference/third-party-integrations/integrate-project-with-a-third-party-service"},{"title":"Get information about an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/get-information-about-an-existing-third-party-integration"},{"title":"Delete an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/delete-an-existing-third-party-integration"},{"title":"Update an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/update-an-existing-third-party-integration"}]},{"group":"User Access","pages":[{"title":"List user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/user-access","href":"/api-reference/user-access/list-user-access-for-a-project"},{"title":"Grant user access to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/user-access","href":"/api-reference/user-access/grant-user-access-to-a-project"},{"title":"Get user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/get-user-access-for-a-project"},{"title":"Remove user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/remove-user-access-for-a-project"},{"title":"Update user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/update-user-access-for-a-project"},{"title":"List project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/project-access","href":"/api-reference/user-access/list-project-access-for-a-user"},{"title":"Grant project access to a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/project-access","href":"/api-reference/user-access/grant-project-access-to-a-user"},{"title":"Get project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/get-project-access-for-a-user"},{"title":"Remove project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/remove-project-access-for-a-user"},{"title":"Update project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/update-project-access-for-a-user"}]},{"group":"User Profiles","pages":[{"title":"List user profiles","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles","href":"/api-reference/user-profiles/list-user-profiles"},{"title":"Get a single user profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles/{userId}","href":"/api-reference/user-profiles/get-a-single-user-profile"},{"title":"Update a user profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /profiles/{userId}","href":"/api-reference/user-profiles/update-a-user-profile"},{"title":"Get a user address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles/{userId}/address","href":"/api-reference/user-profiles/get-a-user-address"},{"title":"Update a user address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /profiles/{userId}/address","href":"/api-reference/user-profiles/update-a-user-address"},{"title":"Create a user profile picture","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /profile/{uuid}/picture","href":"/api-reference/user-profiles/create-a-user-profile-picture"},{"title":"Delete a user profile picture","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /profile/{uuid}/picture","href":"/api-reference/user-profiles/delete-a-user-profile-picture"}]},{"group":"Users","pages":[{"title":"Get current logged-in user info","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /me","href":"/api-reference/users/get-current-logged-in-user-info"},{"title":"Check if phone verification is required","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /me/phone","href":"/api-reference/users/check-if-phone-verification-is-required"},{"title":"Check if verification is required","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /me/verification","href":"/api-reference/users/check-if-verification-is-required"},{"title":"Get the current user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/me","href":"/api-reference/users/get-the-current-user"},{"title":"Get a user by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/email={email}","href":"/api-reference/users/get-a-user-by-email"},{"title":"Get a user by username","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/username={username}","href":"/api-reference/users/get-a-user-by-username"},{"title":"Get a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}","href":"/api-reference/users/get-a-user"},{"title":"Update a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /users/{user_id}","href":"/api-reference/users/update-a-user"},{"title":"Reset email address","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/emailaddress","href":"/api-reference/users/reset-email-address"},{"title":"Reset user password","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/resetpassword","href":"/api-reference/users/reset-user-password"}]},{"group":"Vouchers","pages":[{"title":"List vouchers","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/vouchers","href":"/api-reference/vouchers/list-vouchers"},{"title":"Apply voucher","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/vouchers/apply","href":"/api-reference/vouchers/apply-voucher"}]}]}]},{"anchor":"CLI","icon":"terminal","pages":[{"title":"Upsun Cloud CLI","sidebarTitle":"CLI Home","icon":"terminal","mode":"custom","href":"/cli/index"},{"group":"Getting started","icon":"rocket","pages":[{"title":"Install the Upsun Cloud CLI","sidebarTitle":"Install","href":"/cli/install"},{"title":"Use the Upsun Cloud CLI","sidebarTitle":"Use","href":"/cli/use"},{"title":"Authenticate the Upsun Cloud CLI using an API token","sidebarTitle":"API tokens","href":"/cli/api-tokens"},{"title":"Initialize a project","href":"/cli/init"}]},{"group":"Reference","icon":"book-open","pages":[{"title":"CLI Command reference","sidebarTitle":"Command reference","href":"/cli/reference"},{"title":"AI coding agents","sidebarTitle":"AI coding agents","href":"/cli/ai-coding-agents"}]}]},{"anchor":"Changelog","icon":"scroll-text","pages":[{"title":"Changelog","href":"/changelog"}]}]},{"tab":"Blog","icon":"newspaper","pages":[{"title":"Blog","sidebarTitle":"Blog overview","icon":"newspaper","mode":"custom","href":"/posts"},{"group":"Articles","icon":"newspaper","pages":[{"title":"All Articles","sidebarTitle":"All","mode":"wide","href":"/posts/articles/index"},{"title":"Artificial Intelligence","sidebarTitle":"AI","mode":"wide","href":"/posts/articles/ai"},{"title":"How It Works","sidebarTitle":"How It Works","mode":"wide","href":"/posts/articles/how-it-works"},{"title":"How-Tos","sidebarTitle":"How-Tos","mode":"wide","href":"/posts/articles/how-tos"},{"title":"Insights","sidebarTitle":"Insights","mode":"wide","href":"/posts/articles/insights"},{"title":"Releases","sidebarTitle":"Releases","mode":"wide","href":"/posts/articles/releases"},{"title":"Hands-On","sidebarTitle":"Hands-On","mode":"wide","href":"/posts/articles/hands-on"}]}]},{"tab":"AI","icon":"sparkles","pages":[{"mode":"custom","title":"AI on Upsun","href":"/ai"},{"group":"MCP","root":{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","tag":"New","href":"/ai/mcp/overview"},"pages":[{"title":"Upsun MCP on Cursor","sidebarTitle":"Cursor","href":"/ai/mcp/integrations/cursor"},{"title":"Upsun MCP on VSCode","sidebarTitle":"VSCode","href":"/ai/mcp/integrations/vscode"},{"title":"Upsun MCP on your Agent","sidebarTitle":"Other","href":"/ai/mcp/integrations/all"}]},{"group":"Onboarding","root":{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","tag":"New","href":"/ai/onboarding/overview"},"pages":[{"title":"Setup","sidebarTitle":"Setup","href":"/ai/onboarding/setup"},{"title":"Best Practices","sidebarTitle":"Best Practices","href":"/ai/onboarding/best-practices"}]}]}]},"basePath":"","title":"How the Platform.sh PaaS works - Upsun Developer","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}