Appearance
Order attributes
Every order item has a family, a product_id and attributes. The attributes depend on the family; they are the same for Console orders beta and reseller orders. The choices come from the catalog's options of the family (GET /catalog?team=…).
json
{"family": "server", "product_id": "01JC…", "attributes": { … }}| Family | Section |
|---|---|
server | Server |
floatingIp | Floating IP |
container | Container beta |
domain | Domain |
zone | DNS zone |
hosting | Web hosting |
objectStorage | Object storage |
Names that must be unique (domain, zone, hosting, objectStorage) must also differ between the items of one order (case-insensitive).
Server
| Attribute | |
|---|---|
location_id | required, from the catalog's options.locations[].id |
operating_system_id | required, one of that location's operating_systems |
vlan_id | required, one of that location's networks |
ssh_key | optional, one of options.ssh_keys (the team's SSH keys) |
username | optional, default root ([a-z0-9-]) |
name | optional hostname, default vps-<id>.<zone> |
post_install_script beta | optional, runs once as root after the installation - see Post-install scripts (options.post_install_script: available, max_bytes, timeout_seconds) |
A plan without capacity in the location is refused (422 on location_id).
json
{"family": "server", "product_id": "01JC…",
"attributes": {"location_id": "bon1", "operating_system_id": "01JC…", "vlan_id": "01JC…",
"ssh_key": "01JC…", "username": "root", "name": "web-01.example.com"}}Floating IP (floatingIp)
| Attribute | |
|---|---|
server_id | required, one of options.servers (the team's servers in the network for public servers) |
- Several floating IPs for one server are allowed.
- The pool must have a free address for every floating IP of the order: the item that runs it dry gets
422onserver_id(options.availablesays whether there is any free address). - A floating IP needs an existing server; it cannot refer to a server ordered in the same request.
- Product
detailsare empty.
Container beta
Family container, only while containers are rolled out for your user or team.
| Attribute | |
|---|---|
location_id | required, from the catalog's options.locations[].id |
container_template_id | required, one of that location's templates |
vlan_id | required, one of that location's networks |
ssh_key | optional, one of options.ssh_keys (installed for root) |
name | optional hostname, default ct-<id>.<zone> |
post_install_script | optional, runs once as root after the installation; only with a template whose supports_post_install_script is true - see Post-install scripts |
options | optional LXC options: {"features": ["fuse", "keyctl"], "devices": ["tun"]}, each list optional (allowed values also in the catalog's options.options) |
json
{"family": "container", "product_id": "01JC…",
"attributes": {"location_id": "bon1", "container_template_id": "01JC…", "vlan_id": "01JC…",
"ssh_key": "01JC…", "name": "game-1",
"options": {"features": ["fuse", "keyctl"], "devices": ["tun"]}}}A plan without capacity in the location is refused (422 on location_id). The root password is mailed to the team owner.
details of a container plan: vcores, memory_mb, swap_mb, disk_gb, and for GPU plans gpu (see below).
LXC options
options is for software that runs its own containers inside the container (e.g. rootless Podman):
| List | Value | Effect |
|---|---|---|
features | fuse | FUSE file systems (e.g. gocryptfs) |
features | keyctl | kernel keyrings |
devices | tun | passes /dev/net/tun through (mode 0666) - rootless networking with pasta/slirp4netns, VPNs |
nestingis always on.- Anything else (other keys or values, duplicates) answers
422onoptions…. - When options are not available in the location at the moment, the order answers
422onoptions. - A container with options is started a few seconds later than a plain one (after the options are applied).
- The container shows them as
options, and keeps them through reinstall, backup restore and snapshot rollback.
GPU plans
GPU plans are listed and orderable only for users and teams in the GPU rollout (otherwise 422product_not_orderable on product_id).
details.gpu of a GPU plan:
json
{"vendor": "nvidia", "model": "…", "vram_gb": 12, "mode": "shared", "count": 1}| Field | |
|---|---|
mode | exclusive - the GPU is the container's alone - or shared - several containers use it, without memory or compute isolation |
vendor, model | null when the plan takes any |
container_template_idmust be a GPU-ready template: inoptions.locations[].templates[],gpu_vendorslists the vendors a template supports anddriver_version(if set) the host driver it needs. Another template answers422oncontainer_template_id.options.locations[].gpus[]lists the kinds of GPUs in the location (vendor,model,vram_gb,driver_version,mode).- No free matching GPU:
422onlocation_id. - A GPU plan with LXC options gets its GPU's device nodes and the extra ones.
Domain
Family domain.
| Attribute | |
|---|---|
name | required, the domain with the plan's TLD (details.tld, one label before it, e.g. example.de); stored in lowercase |
auth_code | optional: transfer the domain in with this code (checked at the registrar) |
contact_id | the registrant: one of options.contacts (the team's contacts), or |
registrant | the registrant's data (options.registrant_fields: first_name, last_name, email, phone, address, city, postal_code, country); created as a contact of the ordering user at the registrar, identical data in one order shares one contact |
tos | required, true: you accept the TLD's terms (details.terms) |
- Exactly one of
contact_idandregistrant. - Before anything is charged, the name must be free at the registrar (or transferable when
auth_codeis given) and not yet in the Console; otherwise422onname. - A refused registrant gives
422onregistrant; a contact created for an order that then fails stays a contact of the team.
json
{"family": "domain", "product_id": "01JC…",
"attributes": {"name": "example.de", "contact_id": "01JC…", "tos": true}}DNS zone (zone)
| Attribute | |
|---|---|
name | required, the zone (e.g. example.com, max. 255); not served by any DNS cluster and not in the Console yet |
options.name_servers are the name servers to delegate the domain to; details.records is the plan's record limit.
Web hosting (hosting)
| Attribute | |
|---|---|
location_id | required, one of options.locations (locations with an active hosting server) |
name | required, the login name (options.name.pattern, case-insensitive, max. 32); unique, not reserved |
When the plan is not offered on every active hosting server of the location, the order answers 422 on location_id. details lists the plan's limits (null = unlimited) and features.
Object storage (objectStorage)
| Attribute | |
|---|---|
name | required, the bucket name (max. 255), unique |
details.included_storage_gib is included; storage above it is billed by usage with the monthly bill at options.usage.storage.price per GiB and month (a reseller's discount applied). When no storage is available, the order is refused (422 on name).