Skip to main content

Concept

Platform Model

ZennoHosting is organized around projects and their child resources. If you model the API as project-first from the start, the rest of the platform becomes predictable: provisioning inputs stay separate from runtime resources, and follow-up operations stay scoped to the same project.

Provisioning inputs

Images

Define the base OS or machine template used during VM creation.

VM Tariffs

Represent the commercial profile of the VM itself.

Configurations

Expose available VM configuration profiles that can inform your selection logic.

Access and Plugins

Access can be supplied as raw public keys or existing SSH key IDs, and optional plugins can be attached at provisioning time.

Runtime resources

Projects

The top-level scope for VMs, SSH keys, networks, public IPs, and backups.

VMs

The main compute resource. VM responses expose identifiers, resource sizing, and network attachments.

Networks

Project-level network resources to which VMs can be attached and reconfigured.

Public IPs and Backups

Public IPs are project resources, while backups are VM-scoped recovery points managed under a selected VM.

Project-first boundaries

  • Create the project before creating SSH keys, networks, public IPs, or VMs.
  • Persist projectId as a first-class identifier in your client model.
  • Reuse project-scoped resources instead of rebuilding them ad hoc for every VM request.
  • Do not model public IP lifecycle as part of private network lifecycle. They are related, but distinct.

Provisioning decisions that matter

A correct VM create payload depends on live input resolution. Before you call create, resolve the image, the VM tariff, and any optional public IP behavior. If you request a new public IP, remember that public IP pricing is a separate decision from VM pricing rather than a property of the VM tariff itself.

Modeling recommendation

In client code, treat projectId, vmId, networkId, and publicIpId as stable references. They are the main join keys for almost every follow-up request in the current API surface.