curl --request POST \
--url https://api.storiza.store/apps/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"hostname": "<string>",
"nodeId": "<string>",
"templateId": "<string>",
"planId": "<string>",
"version": "<string>",
"groupId": "<string>",
"env": {},
"command": [
"<string>"
],
"duration": 30
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
hostname: '<string>',
nodeId: '<string>',
templateId: '<string>',
planId: '<string>',
version: '<string>',
groupId: '<string>',
env: {},
command: ['<string>'],
duration: 30
})
};
fetch('https://api.storiza.store/apps/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.storiza.store/apps/"
payload = {
"hostname": "<string>",
"nodeId": "<string>",
"templateId": "<string>",
"planId": "<string>",
"version": "<string>",
"groupId": "<string>",
"env": {},
"command": ["<string>"],
"duration": 30
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"message": "App created",
"data": {
"id": "00000000-0000-4000-8000-000000000000",
"name": "Survival",
"hostname": "mc-survival",
"type": "game_server",
"owner": {
"id": "00000000-0000-4000-8000-000000000000"
},
"subscription": {
"id": "00000000-0000-4000-8000-000000000000"
},
"node": {
"id": "00000000-0000-4000-8000-000000000000"
},
"template": {
"id": "00000000-0000-4000-8000-000000000000"
},
"version": "latest",
"plan": {
"id": "00000000-0000-4000-8000-000000000000"
},
"group": null,
"state": "running",
"sftpUsername": "app-mc-survival",
"createdAt": "2026-10-09T14:57:33.884Z"
}
}Create an app, paid from balance
Provision an app on a node and charge the account balance for it: reserve its ports, create its ZFS volume with the plan’s storage quota, create its private network and register its managed domain. This is the counterpart to POST /apps/order, which raises a transaction to be paid externally and builds nothing until it settles.
The app is created STOPPED — start it explicitly, so a creation that succeeds is never confused with a container that failed to boot. hostname is the only name you choose; the public domain is derived from it and is immutable. version pins one of the template’s versions — omit it for the template default. Pinning is what protects a customer from a moving tag, since the tag itself is resolved fresh on every start.
Required API key permission: apps:write
curl --request POST \
--url https://api.storiza.store/apps/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"hostname": "<string>",
"nodeId": "<string>",
"templateId": "<string>",
"planId": "<string>",
"version": "<string>",
"groupId": "<string>",
"env": {},
"command": [
"<string>"
],
"duration": 30
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
hostname: '<string>',
nodeId: '<string>',
templateId: '<string>',
planId: '<string>',
version: '<string>',
groupId: '<string>',
env: {},
command: ['<string>'],
duration: 30
})
};
fetch('https://api.storiza.store/apps/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.storiza.store/apps/"
payload = {
"hostname": "<string>",
"nodeId": "<string>",
"templateId": "<string>",
"planId": "<string>",
"version": "<string>",
"groupId": "<string>",
"env": {},
"command": ["<string>"],
"duration": 30
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"message": "App created",
"data": {
"id": "00000000-0000-4000-8000-000000000000",
"name": "Survival",
"hostname": "mc-survival",
"type": "game_server",
"owner": {
"id": "00000000-0000-4000-8000-000000000000"
},
"subscription": {
"id": "00000000-0000-4000-8000-000000000000"
},
"node": {
"id": "00000000-0000-4000-8000-000000000000"
},
"template": {
"id": "00000000-0000-4000-8000-000000000000"
},
"version": "latest",
"plan": {
"id": "00000000-0000-4000-8000-000000000000"
},
"group": null,
"state": "running",
"sftpUsername": "app-mc-survival",
"createdAt": "2026-10-09T14:57:33.884Z"
}
}Authorizations
An API key from the Storiza dashboard (API & Integrations), sent as Authorization: Bearer stz_….
Body
1 - 63^[a-z0-9]([a-z0-9-]*[a-z0-9])?$1111 - 631Show child attributes
Show child attributes
1001 - 10001 <= x <= 365Response
App created
true App created Schema for App model
Show child attributes
Show child attributes
{
"id": "00000000-0000-4000-8000-000000000000",
"name": "Survival",
"hostname": "mc-survival",
"type": "game_server",
"owner": {
"id": "00000000-0000-4000-8000-000000000000"
},
"subscription": {
"id": "00000000-0000-4000-8000-000000000000"
},
"node": {
"id": "00000000-0000-4000-8000-000000000000"
},
"template": {
"id": "00000000-0000-4000-8000-000000000000"
},
"version": "latest",
"plan": {
"id": "00000000-0000-4000-8000-000000000000"
},
"group": null,
"state": "running",
"sftpUsername": "app-mc-survival",
"createdAt": "2026-10-09T14:57:33.884Z"
}
Was this page helpful?