Skip to content

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": { … }}
FamilySection
serverServer
floatingIpFloating IP
containerContainer beta
domainDomain
zoneDNS zone
hostingWeb hosting
objectStorageObject storage

Names that must be unique (domain, zone, hosting, objectStorage) must also differ between the items of one order (case-insensitive).

Server ​

Attribute
location_idrequired, from the catalog's options.locations[].id
operating_system_idrequired, one of that location's operating_systems
vlan_idrequired, one of that location's networks
ssh_keyoptional, one of options.ssh_keys (the team's SSH keys)
usernameoptional, default root ([a-z0-9-])
nameoptional hostname, default vps-<id>.<zone>
post_install_script betaoptional, 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_idrequired, 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 422 on server_id (options.available says 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 details are empty.

Container beta ​

Family container, only while containers are rolled out for your user or team.

Attribute
location_idrequired, from the catalog's options.locations[].id
container_template_idrequired, one of that location's templates
vlan_idrequired, one of that location's networks
ssh_keyoptional, one of options.ssh_keys (installed for root)
nameoptional hostname, default ct-<id>.<zone>
post_install_scriptoptional, runs once as root after the installation; only with a template whose supports_post_install_script is true - see Post-install scripts
optionsoptional 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):

ListValueEffect
featuresfuseFUSE file systems (e.g. gocryptfs)
featureskeyctlkernel keyrings
devicestunpasses /dev/net/tun through (mode 0666) - rootless networking with pasta/slirp4netns, VPNs
  • nesting is always on.
  • Anything else (other keys or values, duplicates) answers 422 on options….
  • When options are not available in the location at the moment, the order answers 422 on options.
  • 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
modeexclusive - the GPU is the container's alone - or shared - several containers use it, without memory or compute isolation
vendor, modelnull when the plan takes any
  • container_template_id must be a GPU-ready template: in options.locations[].templates[], gpu_vendors lists the vendors a template supports and driver_version (if set) the host driver it needs. Another template answers 422 on container_template_id.
  • options.locations[].gpus[] lists the kinds of GPUs in the location (vendor, model, vram_gb, driver_version, mode).
  • No free matching GPU: 422 on location_id.
  • A GPU plan with LXC options gets its GPU's device nodes and the extra ones.

Domain ​

Family domain.

Attribute
namerequired, the domain with the plan's TLD (details.tld, one label before it, e.g. example.de); stored in lowercase
auth_codeoptional: transfer the domain in with this code (checked at the registrar)
contact_idthe registrant: one of options.contacts (the team's contacts), or
registrantthe 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
tosrequired, true: you accept the TLD's terms (details.terms)
  • Exactly one of contact_id and registrant.
  • Before anything is charged, the name must be free at the registrar (or transferable when auth_code is given) and not yet in the Console; otherwise 422 on name.
  • A refused registrant gives 422 on registrant; 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
namerequired, 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_idrequired, one of options.locations (locations with an active hosting server)
namerequired, 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
namerequired, 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).

Anikeen Console documentation