API Changelog
All changes to the Raff public API. Current version: v1.0.0 (beta). π’ Added Β· π΅ Updated Β· π‘ Deprecated Β· π΄ Removed Β· π£ Fixedv1.0.0 (Beta)
August 28, 2026
Managed Databases β Plans- π΄ Removed β Sub-4 GiB ClickHouse and Kafka plans β
GET /api/v1/database/plansno longer returns the 1 vCPU / 1 GiB, 1 vCPU / 2 GiB and 2 vCPU / 2 GiB tiers forclickhouseandkafka; both ladders now start at 2 vCPU / 4 GiB (ClickHouse 79.99/mo). Neither engine runs reliably below 4 GiB β ClickHouseβs own sizing guidance is that under 4 GB is not recommended, and a Kafka broker needs headroom for page cache on top of its heap. No existing instances were affected. Postgres, MySQL and Valkey ladders are unchanged and still start at $7.99
August 27, 2026
Kubernetes β API-
π΅ Updated β Every kubeconfig now expires.
GET /api/v1/k8s/clusters/{cluster_id}/kubeconfigreturns a kubeconfig valid for 7 days by default (expires_instill selects 10 minutesβ30 days); it no longer returns a permanent admin credential, which could never be revoked. Rotate access now invalidates every credential a customer holds -
π’ Added β Self-renewing kubeconfig in the CLI β
raff kubernetes kubeconfig <cluster-id>writes a kubeconfig that carries no credential and fetches a short-lived token for eachkubectlcommand. Nothing long-lived is stored on disk;--statickeeps the old file-with-a-token shape for environments that cannot run the CLI -
π’ Added β Per-pool node plans β every node pool now has its own
plan_id: create clusters with mixed pools (node_pools[].plan_id), andPOST /clusters/{id}/poolsaccepts any plan β mix sizes and tiers (General Purpose / CPU-Optimized) in one cluster. Per-poolnode_countminimum is now 1 (the cluster keeps β₯2 workers overall) -
π’ Added β CPU-Optimized worker plans β
GET /api/v1/k8s/node-plansreturns anode_classper plan (sharedorcpu_optimized); CPU-Optimized nodes reserve far more host CPU per vCPU for compute-heavy workloads. Pick one viaworker_plan_idas usual -
π’ Added β List cluster volumes β
GET /api/v1/k8s/clusters/{cluster_id}/volumesreturns the clusterβs PVC-provisioned persistent volumes (size, status, attached node, price); also shown on the clusterβs new Storage tab in the dashboard - π΅ Updated β Persistent volumes support online expansion: grow a PVCβs requested size and the disk and filesystem expand live (no pod restart); billing moves to the new size. Grow only, 10 GBβ10 TB
August 26, 2026
Kubernetes β API- π’ Added β Built-in persistent storage β every new cluster includes the
raff-blockdefault StorageClass: PersistentVolumeClaims are provisioned as Volumes, attached to the podβs worker automatically, visible in your Volumes list, and billed at $0.08/GB/month (hourly) for exactly the GB claimed - π΄ Removed β Create cluster:
storage_node_countandstorage_node_disk_gb(dedicated Longhorn storage nodes) β any non-zero value is now rejected. Existing clusters with storage nodes keep working unchanged - π΅ Updated β Delete cluster now also deletes the clusterβs PVC-backed volumes, so no storage keeps billing after teardown
- π‘ Deprecated β
raff_k8s_cluster.storage_node_count/storage_node_disk_gbβ leave unset; persistent storage is built in and billed per GB
August 25, 2026
Kubernetes β API- π’ Added β Short-lived kubeconfigs β
GET /api/v1/k8s/clusters/{id}/kubeconfig?expires_in=<seconds>issues a kubeconfig that expires on its own (10 minutes to 30 days) - π’ Added β Rotate cluster access β
POST /api/v1/k8s/clusters/{id}/kubeconfig/rotateinvalidates every previously issued short-lived kubeconfig immediately - π΅ Updated β Create cluster: omitting
version_idnow converges the cluster to the platform-default version (previously it stayed on the base image version)
- π’ Added β
raff kubernetes kubeconfig --ttl <duration>(short-lived kubeconfig) andraff kubernetes kubeconfig rotate
-
π’ Added β
upgrade_mode,maintenance_day,maintenance_startonraff_k8s_cluster; changingversion_idnow performs a rolling in-place upgrade (the apply waits for completion) instead of destroying the cluster -
π΅ Updated β Create cluster now works on subscription accounts β
POST /api/v1/k8s/clustersvalidates the saved payment method, creates the monthly subscription, and charges it automatically (previously402; same behavior as VM creation). Terraform and CLI creates work on subscription accounts as a result. -
π΅ Updated β Scale node pool, Add node pool, Upgrade to HA now work on subscription clusters via the API β the pro-rated difference is charged to the saved payment method (balance first) and the monthly price is raised (previously
409). Dashboard flows still use checkout.
August 24, 2026
Kubernetes β API- π’ Added β Version upgrades β
GET /api/v1/k8s/clusters/{id}/upgrades(available targets, upgrade state, maintenance settings) andPOST /api/v1/k8s/clusters/{id}/upgrade(in-place rolling upgrade: control-plane nodes one at a time, workers drained; free) - π’ Added β Maintenance settings β
PATCH /api/v1/k8s/clusters/{id}/maintenance:upgrade_mode(manual,auto_patch,auto_minor) and a weekly 4-hour maintenance window (maintenance_day,maintenance_startUTC) - π΅ Updated β node plans (
ssd_gib) now state the actual 25 GB node root disk; worker plans are priced on vCPU/RAM, persistent storage is the storage-node product
- π’ Added β
raff kubernetes upgrade <cluster-id>β lists available upgrade targets, or starts a rolling in-place version upgrade with--version(--confirm-single-masteron non-HA clusters) - π’ Added β
raff kubernetes maintenance <cluster-id>β set the upgrade mode (--mode manual|auto_patch|auto_minor) and the weekly 4-hour maintenance window (--day,--startUTC) - π’ Added β
raff kubernetes create --version <version-id>β create a cluster on a specific offered version; the cluster converges to it automatically after provisioning
August 23, 2026
Kubernetes β API- π’ Added β Managed Kubernetes β full public API: clusters (
GET/POST /api/v1/k8s/clusters, get/rename/delete,GET β¦/kubeconfig,POST β¦/ha), node pools (list/add/update/delete/scale), versions and node plans, nodes, events, metrics (including a 24h control-plane health summary), utilization stats, firewall, MetalLB pool and TCP forwards - π’ Added β
Idempotency-Keyheader onPOST /api/v1/k8s/clustersβ retries return the original cluster instead of provisioning twice - π’ Added β pagination (
limit,offset) onGET /api/v1/k8s/clusters; derivedreadyon clusters andactual_node_counton node pools - π΄ Removed β legacy
POST /api/v1/k8s/clusters/{id}/scale(use the node-pool scale endpoint) and the internalvm_idfield on node objects
August 20, 2026
Virtual Machines β API- π΅ Updated β Attach floating IP now supports multiple public IPv4s β
POST /api/v1/vms/{id}/ipwithip_idaccepts additional reserved IPv4s, up to 4 per VM. Auto-assign (type) is unchanged: available only while the VM has no public IP of that family. - π΅ Updated β List VM networks β
GET /api/v1/vms/{id}/networksreturnsis_primary, marking the VMβs primary public IPv4 interface. - π΅ Updated β Detach floating IP β
DELETE /api/v1/vms/{id}/ip/{nic_id}: detaching the primary IPv4 while other IPv4s remain promotes the lowest-numbered remaining IPv4 to primary. Clarified billing: reserved IPs keep billing until released; auto-assigned IPs are free and return to the shared pool.
July 28, 2026
Managed Databases β API- π’ Added β Free tier for PostgreSQL, MySQL and Valkey β plans with
is_free_tier: trueinGET /api/v1/databases/planscost $0 (one per account, fixed storage, no HA or replicas, daily backups with 3-day retention). Free databases pause after 7 idle days: status becomessuspendedand all data is kept. - π’ Added β Resume a paused database β
POST /api/v1/databases/{id}/resumewakes asuspendeddatabase; it returns throughdeployingand reachesrunningin about a minute. - π΅ Updated β
GET /api/v1/databases/plansreturnsmax_connections(the client connection limit each plan enforces) andmemory_mib(RAM for sub-GiB plans, e.g. free Valkey = 512). The databasestatusenum gainssuspended.
July 20, 2026
Managed Databases β API- π’ Added β MySQL, ClickHouse, and Apache Kafka engines β the
enginefield onPOST /api/v1/databases(and everywhere it appears) now acceptsmysql,clickhouse, andkafkaalongsidepostgresandvalkey. Check live availability and versions withGET /api/v1/databases/engines. - π΅ Updated β
engineis now a sharedDatabaseEngineenum across all database endpoints and schemas; the engine catalog entry schema is namedDatabaseEngineInfo. No wire-format change β request and response JSON are unchanged. - π΅ Updated β
GET /api/v1/databases/{id}/connectionreturnsca_cert(PEM CA bundle) for engines with a private certificate authority β currently Kafka. Empty for other engines.
July 12, 2026
Virtual Machines β API- π΅ Updated β Backup schedules now report run state β
GET /api/v1/backup-schedulesandGET /api/v1/backup-schedules/{id}returnenabled,next_run_at,last_run_at,last_run_status, andconsecutive_failures. Use these to verify backups are running and alert on repeated failures. Existing fields are unchanged. - π΅ Updated β Minimum
keep_countis now 2 onPOST /api/v1/backup-schedulesandPATCH /api/v1/backup-schedules/{id}. A retention of 1 does not work reliably with incremental backups. Existing schedules withkeep_count: 1keep working; the next update must set 2 or more.
July 8, 2026
Raff Apps β API- π’ Added β Raff Apps (PaaS) β push-to-deploy app services on
/api/v1/apps. Create web services, private services, workers, cron jobs, and one-off jobs; manage deployments (POST .../deployments), rollbacks (POST .../rollback), environment variables (.../env), custom domains (.../domains), scaling (.../scale), pause/resume, runtime and build logs, metrics, job runs, usage (GET /api/v1/apps/usage), and spend caps (.../spend-settings). - π’ Added β List Apps tiers β
GET /api/v1/apps/tiersand publicGET /api/v1/public/pricing/apps. Compute sizes and prices; no authentication required.
- π’ Added β
raff appscommand group:tiers,list,get,create,delete,deploy,rollback,scale,pause,resume,logs,deployments,env(list/set/delete),domains(list/add/delete), andusage.
- π’ Added β
raff_app_serviceresource, plusraff_app_service,raff_app_services, andraff_app_tiersdata sources.
July 6, 2026
Catalog β API- π’ Added β List managed database pricing β
GET /api/v1/public/pricing/database. Plans per engine (postgres,valkey) plus high availability, read replica, and extra storage pricing. Optionalenginequery filter. - π’ Added β List managed Kubernetes pricing β
GET /api/v1/public/pricing/kubernetes. Worker node plans plus HA control plane and NVMe storage node pricing.
May 25, 2026
Catalog β API- π’ Added β
out_of_stockfield onVMPricingPlanβGET /api/v1/public/pricing/vm. Marks a plan as sold out. Informational only β the plan is still listed and can be ordered.
- π’ Added β
STOCKcolumn onraff pricing vm, showingIn Stock/Sold Out.
- π’ Added β
out_of_stockattribute ondata.raff_vm_pricingplans.
May 14, 2026
Virtual Machines β API- π΅ Updated β Backups now run as incremental backup series instead of one full image per call. Only changed blocks are stored after the first baseline, cutting storage and transfer dramatically. Existing backups taken before this change keep working unchanged β they restore identically to today.
- π΅ Updated β
storage_sizeonBackupis now MB (was GB). Incremental restore points are often a few MB; the previous integer-GB column rounded them up to 1 GB and overstated both display and billing. Existing rows have been backfilled (old_value_in_GB * 1024) so customer-visible amounts stay consistent. Clients should display in MB up to 1024, else convert to GB. - π’ Added β
increment_idfield onBackupβGET /api/v1/backups. Position of a restore point within an incremental series;nullfor legacy standalone backups. - π’ Added β Delete backup series β
DELETE /api/v1/backups/{id}/chain. Removes every restore point in a series in one call. Use this when Delete backup reports that older points depend on the one being deleted. - π’ Added β Reset backup series β
POST /api/v1/vms/{id}/backups/reset-chain. Starts a fresh baseline on the next backup; existing restore points stay restorable.
May 10, 2026
Virtual Machines β API- π’ Added β
macfield onVMNetworkβGET /api/v1/vms/{id}/networks. Stable per-NIC MAC address. The backend already returned it; spec now documents it so generated clients expose it.
- π£ Fixed β
pricing_idnow auto-derived fromvolume_type+regiononPOST /api/v1/volumes. The public spec never required customers to supply it, but the billing middleware did β every CLI/Terraform/curl request was returning 400 until you looked it up out-of-band. - π£ Fixed β
filesystem_typeis now honored. A wire-mapping bug in vm-service was discarding the value and validatingvolume_type(e.g.nvme) as if it were a filesystem, rejecting all validext4/xfs/""combinations with βfilesystem_type must be empty (manual), ext4, or xfsβ. - π΅ Updated β pricing_id required-error now points at
raff pricing vm(CLI) anddata.raff_vm_pricing(Terraform) alongside the HTTP path.
- π£ Fixed β Add-payment-method (
POST /api/v1/billing/payment-methods) now returns 503 if Airwallexβs payment-source linking step fails, instead of saving an unusable row that looked like a working primary card. Customers no longer end up with a dashboard-confirmed card that fails the first time the API tries to charge it. - π£ Fixed β βPayment method not configured for automatic billingβ error correctly identifies the affected row (filters by
provider_typeand non-empty source ID) instead of firing on any active payment row. - π΅ Updated β Error messages link to
app.rafftechnologies.comregardless of environment (was hardcoded to a local-dev hostname).
- π’ Added β
raff vm create --no-vpcβ create a VM with only a public IP, no VPC at all. (raff-cli v0.3.5) - π’ Added β
MACcolumn onraff vm networks. (raff-cli v0.3.6) - π΅ Updated β
raff vm create --helplong help spells out all four networking modes (existing VPC / new VPC / no VPC / auto VPC). (raff-cli v0.3.4) - π΅ Updated β
raff vm getshows base disk and attached volumes as separate rows (was a single collapsed βStorageβ row). (raff-cli v0.3.4) - π΅ Updated β
vm networkspublic-pool NICs show(public pool)instead of an emptyNETWORKcell. (raff-cli v0.3.4)
- π΅ Updated β
raff volume create --typehelp enumeratesnvme(was a misleading βe.g. standardβ). (raff-cli v0.3.3) - π΅ Updated β
raff pricing volumetable view shows theIDcolumn. (raff-cli v0.3.3)
- π΅ Updated β Security-group attachment count now labeled βAttached VMsβ everywhere (was inconsistent β
VMSin list,Attached NICsin get). (raff-cli v0.3.4) - π΄ Removed β Unexplained
SIZEcolumn fromraff sg getrules subtable. (raff-cli v0.3.4)
- π’ Added β
data "raff_vm_networks"β list NICs for a VM with MAC, IP, gateway, and security-group binding. (terraform-provider-raff v0.1.8) - π’ Added β
skip_vpcargument onraff_vm. (terraform-provider-raff v0.1.7) - π΅ Updated β
raff_vmschema descriptions forvpc_id/vpc_name/vpc_cidr/delete_vpc/volume_actionrewritten to spell out the actual contract instead of one-liners. (terraform-provider-raff v0.1.6) - π΅ Updated β
volume_type = "nvme"in README and Registry index examples (was an invalid"standard"). (terraform-provider-raff v0.1.4)
- π’ Added β
data "raff_vpc_cidr_suggestions"β fetch a non-overlapping CIDR for declarative VPC sizing. (terraform-provider-raff v0.1.9) - π’ Added β
data "raff_security_group_templates"β look up template IDs to pass toraff_security_group.template_id. (terraform-provider-raff v0.1.9)
- π’ Added β
data "raff_permissions"β read-only catalog of permission identifiers; supportsscopefilter (account/project). (terraform-provider-raff v0.1.9)
- π΅ Updated β Terraform Registry sidebar collapsed from 7 noisy buckets to a single
Virtual Machinessubcategory. (terraform-provider-raff v0.1.5)
- π£ Fixed β
categoryfilter onraff template list(CLI v0.3.7) anddata.raff_templates(terraform-provider-raff v0.1.10) β flag help, schema description, and README/Registry examples all incorrectly claimed values likelinux/windows. The real enum isos(Linux/Windows OS templates) ormarketplace(pre-baked apps); OS family (linux/windows/alpine/ etc.) lives on theos_typeresponse field with no API-level filter today.
- π£ Fixed β
raff_vmCreate now waits for the VM to reachactivebefore returning. Previouslyterraform applyreturned as soon as the API accepted the request, sopublic_ipv4/private_ipv4were empty until the customer ranterraform refresh. Default timeout 15 minutes; override withtimeouts { create = "20m" }. (terraform-provider-raff v0.1.11) - π΅ Updated β
volume_actiondescription onraff_vmrewritten to clarify it only governs volumes not under Terraform management (attached out-of-band via dashboard / CLI). Volumes managed byraff_volumein the same config are destroyed by Terraform independently. (terraform-provider-raff v0.1.11)
Compute β CLI
- π’ Added β
raff volume list|get|create|delete|resize|attach|detachβ documentation page for block storage volume commands. - π’ Added β
raff snapshot list|get|create|rename|restore|deleteβ documentation page for VM and volume snapshots. - π’ Added β
raff backup list|get|create|restore|deleteandraff backup schedule list|get|create|update|deleteβ documentation page for backups and recurring schedules.
- π’ Added β
raff_vpcdocumentation page β VPC resource, CIDR immutability, gateway computed attrs. - π’ Added β
raff_ipdocumentation page β floating IP reservation. - π’ Added β
raff_security_groupdocumentation page β firewall rulesets with nestedruleblocks and template seeding.
- π’ Added β
raff_volume,raff_snapshot,raff_backup,raff_backup_scheduledocumentation pages β covering immutability rules, retention semantics, and the βdonβt manage schedule-created backupsβ guidance.
- π’ Added β
raff ssh-key,raff api-key,raff member,raff role,raff permission,raff invitationdocumentation pages β full coverage of IAM commands. - π’ Added β
raff project membersubcommands documented underraff projectβ list, get, add, update, remove.
- π’ Added β
raff_ssh_key,raff_api_key,raff_role,raff_member,raff_project_memberdocumentation pages β including thesecretreturned-once warning onraff_api_keyand the composite ID format onraff_project_member.
- π’ Added β
raff region,raff template,raff pricing(CLI) and a consolidateddata-sourcespage (Terraform) coveringraff_regions,raff_templates, and the*_pricingfamily.
- π΅ Updated β Reference tab CLI and Terraform groups in
docs.jsonreorganized to expose every command group and resource in the sidebar. - π΅ Updated β
reference/cli/introduction.mdxandreference/terraform/introduction.mdxrefreshed with the full surface β coverage table now lists every resource group instead of the original 5β7.
May 8, 2026
Volumes β API- π’ Added β Volume CRUD + attach/detach β
GET/POST /api/v1/volumes,GET/DELETE /api/v1/volumes/{id},POST /api/v1/volumes/{id}/attach,POST /api/v1/volumes/{id}/detach. Create is async (202 Accepted). - π΄ Removed β
vm_id,vm_internal_id,image_id,attached_volume_idfields from volume responses (OpenNebula internal identifiers). Useidandproduct_vminstead.
- π’ Added β Snapshot CRUD + restore + rename β
GET/POST /api/v1/snapshots,GET/DELETE /api/v1/snapshots/{id},POST /api/v1/snapshots/{id}/restore,PATCH /api/v1/snapshots/{id}/rename. Supports VM and volume sources (resource_type: vm|volume).Snapshot.status = activeindicates the source has been reverted to this snapshot.
- π’ Added β Backup CRUD + restore β
GET/POST /api/v1/backups,GET/DELETE /api/v1/backups/{id},POST /api/v1/backups/{id}/restore. Create and restore are async (202 Accepted). - π’ Added β Backup schedules β
GET/POST /api/v1/backup-schedules,GET/PATCH/DELETE /api/v1/backup-schedules/{id}. Daily or weekly with configurable retention. - π΄ Removed β
schedule_id,backup_id,vm_idfrom backup/schedule responses (OpenNebula internal identifiers). Useidandproduct_vm.
- π’ Added β SSH key CRUD β
GET/POST /api/v1/ssh-keys,GET/PUT/DELETE /api/v1/ssh-keys/{id}. Account-scoped (noX-Project-IDrequired).
- π’ Added β Account Members β
GET/POST /api/v1/members,GET/PATCH/DELETE /api/v1/members/{id}. Email invite, direct add, or attach an API key as member. - π’ Added β Project Members β
GET/POST /api/v1/projects/{id}/members,GET/PATCH/DELETE /api/v1/projects/{id}/members/{member_id}. - π’ Added β Roles β
GET/POST /api/v1/roles,GET/PATCH/DELETE /api/v1/roles/{id}. Custom account- or project-scoped roles. System roles are read-only. - π’ Added β Permissions catalog β
GET /api/v1/permissions. Lists every permission string usable in role definitions. Requires a valid API key (no specific permission needed). - π’ Added β API Keys β
GET/POST /api/v1/api-keys,GET/PATCH/DELETE /api/v1/api-keys/{id},POST /api/v1/api-keys/{id}/regenerate. Full secret only returned once at create or regenerate. - π’ Added β Invitations β
POST /api/v1/invitations(account),POST /api/v1/projects/{id}/invitations(project),DELETE /api/v1/invitations/{id}(cancel). Public spec deliberately omitsInvitation.tokensince itβs the acceptance secret.
- π΄ Removed β
vm_idfrom VM responses,vnet_id/vxlan_vni/router_vm_idfrom VPC responses,ip_group_id/subnet_id/vm_idfrom floating IP responses,network_id/mac/bridge/vxlan_vnifrom VM network interface responses, and the legacy top-levelproject_id/project_namefrom API key responses. All are OpenNebula internal identifiers that the public spec already hid; the gateway response now matches the spec.
April 30, 2026
Virtual Machines β API- π’ Added β
skip_public_ipandskip_vpcflags on Create VM βPOST /api/v1/vms. Build VPC-only VMs (no public IP) or public-IP-only VMs (no VPC). Cannot be combined.
- π’ Added β Floating IP reserve/release β
POST /api/v1/ips/reserve,DELETE /api/v1/ips/{id}/reserve, plusGET /api/v1/ips,GET /api/v1/ips/{id},POST /api/v1/ips/{id}/change. Reserve runs through the same balance/billing checks as VM create (402 / 403). Release refunds remaining time pro-rata for subscription IPs. - π’ Added β VPC CRUD β
POST/GET/PUT/DELETE /api/v1/vpcs[/{id}]andGET /api/v1/vpcs/cidr-suggestions. Customers can now create and manage VPCs directly via the public API instead of only through VM creation. - π’ Added β
?type=public|vpc|ipv6query filter on List VM network interfaces βGET /api/v1/vms/{id}/networks?type=public. - π΅ Updated β
VMNetwork.typeenum now includesipv6. - π΄ Removed β
macfield from publicVMNetworkschema (still in raw response for the dashboard, hidden from public API consumers).
- π’ Added β
raff ip list|get|reserve|release|change - π’ Added β
raff vpc list|get|create|update|delete|cidr-suggestions - π’ Added β
raff vm networks <vm-id> --type public|vpc|ipv6filter
- π’ Added β Update VM note β
PATCH /api/v1/vms/{id}/notes/{type}β replaces existing note content; returns 404 if no note exists yet (usePUTto create). - π’ Added β Append to VM note β
POST /api/v1/vms/{id}/notes/{type}/appendβ concatenates new content onto the existing note (newline-separated), creates the note if missing. - π’ Added β
typequery filter on Get VM notes βGET /api/v1/vms/{id}/notes?type=personal|accountto fetch only one scope.
- π’ Added β
raff vm notes update <vm-id> --type X --content Y(errors if note missing) - π’ Added β
raff vm notes append <vm-id> --type X --content Y - π’ Added β
raff vm notes get <vm-id> --type personal|accountfilter - π’ Added β
raff vm tags list <vm-id>to discover tag IDs
April 29, 2026
Virtual Machines β API- π’ Added β Hard reboot VM for unresponsive instances β
POST /api/v1/vms/{id}/reboot-hard - π’ Added β Save VM disk as custom image β
POST /api/v1/vms/{id}/save-image - π’ Added β List VM network interfaces β
GET /api/v1/vms/{id}/networks - π’ Added β Attach/detach VM to/from VPC β
POST/DELETE /api/v1/vms/{id}/vpc[/{nic_id}] - π’ Added β Attach/detach floating IP β
POST/DELETE /api/v1/vms/{id}/ip[/{nic_id}] - π’ Added β Attach/detach security group to VM NIC β
POST/DELETE /api/v1/vms/{id}/firewall[/{sg_id}/{nic_id}] - π’ Added β Add/update/remove VM tags β
POST/PATCH/DELETE /api/v1/vms/{id}/tags[/{tagId}] - π’ Added β Get/upsert VM notes (personal + account scopes) β
GET /api/v1/vms/{id}/notes,PUT /api/v1/vms/{id}/notes/{type} - π΄ Removed β
vm_idfield from VM responses (was an OpenNebula internal identifier β useidinstead) - π΅ Updated β
BillingError.reasonenum trimmed to currently-returned values:banned,failed,no_billing_customer. Insufficient balance now consistently returns402with a plainErrorbody.
- π’ Added β
raff vm hard-reboot,raff vm save-image,raff vm networks,raff vm vpc attach|detach,raff vm ip attach|detach,raff vm sg attach|detach,raff vm tags add|update|remove,raff vm notes get|set
- π΄ Removed β
vm_idcomputed attribute fromraff_vm(was the OpenNebula int ID; useidinstead)
March 25, 2026
General- π’ Added β Changelog tracking started
March 15, 2026
Virtual Machines β API- π’ Added β Resize VM disk storage without recreating β
POST /api/v1/vms/{id}/disk/resize - π’ Added β Bulk delete VMs in a single request β
DELETE /api/v1/vms/bulk - π΅ Updated β Create VM now accepts
enable_ipv6parameter for IPv6 support βPOST /api/v1/vms
March 10, 2026
Virtual Machines β API- π’ Added β Reinstall OS on a running VM, keep your IP β
POST /api/v1/vms/{id}/reinstall - π’ Added β Factory reset VM to original state β
POST /api/v1/vms/{id}/factory-reset - π’ Added β Reset root password via API β
POST /api/v1/vms/{id}/reset-password - π’ Added β Rename VMs after creation β
POST /api/v1/vms/{id}/rename
March 5, 2026
Volumes β API- π’ Added β Resize block storage volumes attached to VMs β
PATCH /api/v1/volumes/{id}
March 3, 2026
Projects β API- π’ Added β Organize resources into projects β full CRUD via API
GET /api/v1/projectsΒ·POST /api/v1/projectsΒ·GET /api/v1/projects/{id}Β·PUT /api/v1/projects/{id}Β·DELETE /api/v1/projects/{id}
March 1, 2026
Virtual Machines β API- π’ Added β Full VM lifecycle β create, list, get details, delete
GET /api/v1/vmsΒ·POST /api/v1/vmsΒ·GET /api/v1/vms/{id}Β·DELETE /api/v1/vms/{id}
- π’ Added β VM power control β start, stop, reboot
POST /api/v1/vms/{id}/startΒ·POST /api/v1/vms/{id}/stopΒ·POST /api/v1/vms/{id}/reboot
- π’ Added β Scale resources β resize CPU and RAM on demand β
POST /api/v1/vms/{id}/resize
- π’ Added β Browse available resources β regions, OS templates, pricing (no auth required)
GET /api/v1/public/regionsΒ·GET /api/v1/public/templatesGET /api/v1/public/pricing/vmΒ·/volumeΒ·/snapshotΒ·/backupΒ·/ip