Update Application Configuration
curl --request PATCH \
--url https://api.vertracloud.app/v1/apps/{id}/config \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": {},
"main_file": "<string>",
"language": "<string>",
"version": "<string>",
"start_command": {},
"build_command": {},
"ram": 123
}
'import requests
url = "https://api.vertracloud.app/v1/apps/{id}/config"
payload = {
"name": "<string>",
"description": {},
"main_file": "<string>",
"language": "<string>",
"version": "<string>",
"start_command": {},
"build_command": {},
"ram": 123
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: {},
main_file: '<string>',
language: '<string>',
version: '<string>',
start_command: {},
build_command: {},
ram: 123
})
};
fetch('https://api.vertracloud.app/v1/apps/{id}/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vertracloud.app/v1/apps/{id}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => [
],
'main_file' => '<string>',
'language' => '<string>',
'version' => '<string>',
'start_command' => [
],
'build_command' => [
],
'ram' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vertracloud.app/v1/apps/{id}/config"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.vertracloud.app/v1/apps/{id}/config")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}"
response = http.request(request)
puts response.read_body{
"response": "success"
}
Applications
Update Application Configuration
Updates the stored configuration of an application by its ID.
PATCH
/
v1
/
apps
/
{id}
/
config
Update Application Configuration
curl --request PATCH \
--url https://api.vertracloud.app/v1/apps/{id}/config \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": {},
"main_file": "<string>",
"language": "<string>",
"version": "<string>",
"start_command": {},
"build_command": {},
"ram": 123
}
'import requests
url = "https://api.vertracloud.app/v1/apps/{id}/config"
payload = {
"name": "<string>",
"description": {},
"main_file": "<string>",
"language": "<string>",
"version": "<string>",
"start_command": {},
"build_command": {},
"ram": 123
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: {},
main_file: '<string>',
language: '<string>',
version: '<string>',
start_command: {},
build_command: {},
ram: 123
})
};
fetch('https://api.vertracloud.app/v1/apps/{id}/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vertracloud.app/v1/apps/{id}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => [
],
'main_file' => '<string>',
'language' => '<string>',
'version' => '<string>',
'start_command' => [
],
'build_command' => [
],
'ram' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vertracloud.app/v1/apps/{id}/config"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.vertracloud.app/v1/apps/{id}/config")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": {},\n \"main_file\": \"<string>\",\n \"language\": \"<string>\",\n \"version\": \"<string>\",\n \"start_command\": {},\n \"build_command\": {},\n \"ram\": 123\n}"
response = http.request(request)
puts response.read_body{
"response": "success"
}
string
required
The application ID to update. If the application belongs to a workspace, pass its ID in the
workspace_id query parameter.string
If the application belongs to a workspace, the workspace’s ID. Required for workspace members acting on an application they don’t own.
Send only the fields you want to change. Every body field is optional, but at least one must be present — an empty body is rejected. Fields you omit keep their current value.
string
The application display name. Maximum 50 characters.
string | null
The application description. Maximum 128 characters. Send
null to clear it.string
The entrypoint file of the application (e.g.,
index.js). Cannot be empty.string
The application’s runtime language. One of
javascript, typescript, bun, python, static, php, go, ruby, java, rust. Any other value is rejected.Changing the language resets the version. When
language differs from the application’s current language, version is forced to recommended in the same update, even if the request body also sends an explicit version — the version stored for the old language may not exist for the new one. main_file and start_command are not adjusted automatically; an entrypoint or start command written for the old language may not run under the new one.string
The runtime version. Accepts
recommended, latest, auto or an explicit version string supported by the application’s language. Cannot be empty.string | null
A custom start command (e.g.,
node index.js). Maximum 512 characters. Send null to fall back to the default command for the language.string | null
An optional build command (e.g.,
npm run build). Maximum 512 characters. Send null to
remove it. Runs on the next deploy, after dependency installation and before the application
starts, in an isolated build environment (2× the application’s RAM, min 1,024 MB max 4,096 MB;
2× its vCPU, min 1 max 2; 10-minute timeout). Available on every plan. A plain restart does not
re-run the build if the previous one succeeded with the same command.integer
The memory allocated to the application, in MB. Must be an integer of at least
100. Applications published on the web (with a subdomain or a custom domain) require at least 512.Changing the memory changes the application’s disk ceiling. The volume quota is derived from the allocated memory, so lowering
ram lowers how much the application is allowed to store — which is why lowering it can be refused with 409 STORAGE_ABOVE_NEW_LIMIT. See Common Error Codes.Changing
build_command counts against the account’s hourly deploy budget, the same one
creating an application or uploading a ZIP draws from. See Deploy rate limits.Response
string
The operation status (
success).{
"response": "success"
}
Error Responses
string
The error code indicating the reason for the failure. Possible values:
USER_NOT_FOUND: The request is not authenticated (401).VALIDATION_ERROR: A field failed validation — wrong type, over the length limit, or an empty body (400). The response carriesmessageandpathpointing at the offending field.APP_NOT_FOUND: The specified application does not exist (404).ACCESS_DENIED: The user does not have permission to act on the application (403).APPLICATION_SHIELD_COOLDOWN: Vertra Shield temporarily paused the application; retry after the cooldown (403).OWNER_APP_WITHOUT_LIMITS: The plan limits of the application owner could not be read, so the requested memory cannot be validated (404).MEMORY_BELOW_MINIMUM: The requested memory is below the minimum for this application —512MB for a web-published application (400).MEMORY_LIMIT_EXCEEDED: The requested memory does not fit in the plan’s remaining memory, counting every other resource of the owner (400).STORAGE_ABOVE_NEW_LIMIT: The volume already holds more than the disk ceiling implied by the requested memory (409). Nothing was changed. See below.DEPLOY_RATE_LIMITED: Abuild_commandchange was requested and the account’s hourly deploy budget for its plan was already reached (429).INTERNAL_SERVER_ERROR: The configuration could not be updated (500).
string
A descriptive message providing additional details about the error.
object
Present on
STORAGE_ABOVE_NEW_LIMIT. Carries used_mb, limit_mb and free_mb — how much the volume holds, the ceiling the requested memory would impose, and how much has to be deleted before the change is accepted.{
"code": "MEMORY_LIMIT_EXCEEDED"
}
{
"code": "ACCESS_DENIED"
}
{
"code": "APP_NOT_FOUND"
}
{
"code": "STORAGE_ABOVE_NEW_LIMIT",
"details": {
"used_mb": 2048,
"limit_mb": 1024,
"free_mb": 1024
}
}
This route writes configuration; it does not restart or rebuild the container. The new values take effect on the next rebuild of the application.