Skip to main content
Updated May 14, 2026

API Changelog

All changes to the Raff public API. Current version: v1.0.0 (beta). 🟒 Added Β· πŸ”΅ Updated Β· 🟑 Deprecated Β· πŸ”΄ Removed Β· 🟣 Fixed

v1.0.0 (Beta)

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_size on Backup is 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_id field on Backup β€” GET /api/v1/backups. Position of a restore point within an incremental series; null for 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 β€” mac field on VMNetwork β€” 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.
Volumes β€” API
  • 🟣 Fixed β€” pricing_id now auto-derived from volume_type + region on POST /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_type is now honored. A wire-mapping bug in vm-service was discarding the value and validating volume_type (e.g. nvme) as if it were a filesystem, rejecting all valid ext4 / xfs / "" combinations with β€œfilesystem_type must be empty (manual), ext4, or xfs”.
  • πŸ”΅ Updated β€” pricing_id required-error now points at raff pricing vm (CLI) and data.raff_vm_pricing (Terraform) alongside the HTTP path.
Billing β€” API
  • 🟣 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_type and non-empty source ID) instead of firing on any active payment row.
  • πŸ”΅ Updated β€” Error messages link to app.rafftechnologies.com regardless of environment (was hardcoded to a local-dev hostname).
Virtual Machines β€” CLI
  • 🟒 Added β€” raff vm create --no-vpc β€” create a VM with only a public IP, no VPC at all. (raff-cli v0.3.5)
  • 🟒 Added β€” MAC column on raff vm networks. (raff-cli v0.3.6)
  • πŸ”΅ Updated β€” raff vm create --help long help spells out all four networking modes (existing VPC / new VPC / no VPC / auto VPC). (raff-cli v0.3.4)
  • πŸ”΅ Updated β€” raff vm get shows base disk and attached volumes as separate rows (was a single collapsed β€œStorage” row). (raff-cli v0.3.4)
  • πŸ”΅ Updated β€” vm networks public-pool NICs show (public pool) instead of an empty NETWORK cell. (raff-cli v0.3.4)
Volumes β€” CLI
  • πŸ”΅ Updated β€” raff volume create --type help enumerates nvme (was a misleading β€œe.g. standard”). (raff-cli v0.3.3)
  • πŸ”΅ Updated β€” raff pricing volume table view shows the ID column. (raff-cli v0.3.3)
Networking β€” CLI
  • πŸ”΅ Updated β€” Security-group attachment count now labeled β€œAttached VMs” everywhere (was inconsistent β€” VMS in list, Attached NICs in get). (raff-cli v0.3.4)
  • πŸ”΄ Removed β€” Unexplained SIZE column from raff sg get rules subtable. (raff-cli v0.3.4)
Virtual Machines β€” Terraform
  • 🟒 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_vpc argument on raff_vm. (terraform-provider-raff v0.1.7)
  • πŸ”΅ Updated β€” raff_vm schema descriptions for vpc_id / vpc_name / vpc_cidr / delete_vpc / volume_action rewritten 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)
Networking β€” Terraform
  • 🟒 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 to raff_security_group.template_id. (terraform-provider-raff v0.1.9)
Team & Access β€” Terraform
  • 🟒 Added β€” data "raff_permissions" β€” read-only catalog of permission identifiers; supports scope filter (account / project). (terraform-provider-raff v0.1.9)
Reference β€” site
  • πŸ”΅ Updated β€” Terraform Registry sidebar collapsed from 7 noisy buckets to a single Virtual Machines subcategory. (terraform-provider-raff v0.1.5)
Catalog β€” CLI / Terraform
  • 🟣 Fixed β€” category filter on raff template list (CLI v0.3.7) and data.raff_templates (terraform-provider-raff v0.1.10) β€” flag help, schema description, and README/Registry examples all incorrectly claimed values like linux / windows. The real enum is os (Linux/Windows OS templates) or marketplace (pre-baked apps); OS family (linux / windows / alpine / etc.) lives on the os_type response field with no API-level filter today.
Virtual Machines β€” Terraform
  • 🟣 Fixed β€” raff_vm Create now waits for the VM to reach active before returning. Previously terraform apply returned as soon as the API accepted the request, so public_ipv4 / private_ipv4 were empty until the customer ran terraform refresh. Default timeout 15 minutes; override with timeouts { create = "20m" }. (terraform-provider-raff v0.1.11)
  • πŸ”΅ Updated β€” volume_action description on raff_vm rewritten to clarify it only governs volumes not under Terraform management (attached out-of-band via dashboard / CLI). Volumes managed by raff_volume in 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|delete and raff backup schedule list|get|create|update|delete β€” documentation page for backups and recurring schedules.
Networking β€” Terraform
  • 🟒 Added β€” raff_vpc documentation page β€” VPC resource, CIDR immutability, gateway computed attrs.
  • 🟒 Added β€” raff_ip documentation page β€” floating IP reservation.
  • 🟒 Added β€” raff_security_group documentation page β€” firewall rulesets with nested rule blocks and template seeding.
Compute β€” Terraform
  • 🟒 Added β€” raff_volume, raff_snapshot, raff_backup, raff_backup_schedule documentation pages β€” covering immutability rules, retention semantics, and the β€œdon’t manage schedule-created backups” guidance.
Team & Access β€” CLI
  • 🟒 Added β€” raff ssh-key, raff api-key, raff member, raff role, raff permission, raff invitation documentation pages β€” full coverage of IAM commands.
  • 🟒 Added β€” raff project member subcommands documented under raff project β€” list, get, add, update, remove.
Team & Access β€” Terraform
  • 🟒 Added β€” raff_ssh_key, raff_api_key, raff_role, raff_member, raff_project_member documentation pages β€” including the secret returned-once warning on raff_api_key and the composite ID format on raff_project_member.
Catalog β€” CLI / Terraform
  • 🟒 Added β€” raff region, raff template, raff pricing (CLI) and a consolidated data-sources page (Terraform) covering raff_regions, raff_templates, and the *_pricing family.
Reference β€” site
  • πŸ”΅ Updated β€” Reference tab CLI and Terraform groups in docs.json reorganized to expose every command group and resource in the sidebar.
  • πŸ”΅ Updated β€” reference/cli/introduction.mdx and reference/terraform/introduction.mdx refreshed 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_id fields from volume responses (OpenNebula internal identifiers). Use id and product_vm instead.
Snapshots β€” API
  • 🟒 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 = active indicates the source has been reverted to this snapshot.
Backups β€” API
  • 🟒 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_id from backup/schedule responses (OpenNebula internal identifiers). Use id and product_vm.
SSH Keys β€” API
  • 🟒 Added β€” SSH key CRUD β€” GET/POST /api/v1/ssh-keys, GET/PUT/DELETE /api/v1/ssh-keys/{id}. Account-scoped (no X-Project-ID required).
Team & Access β€” API
  • 🟒 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 omits Invitation.token since it’s the acceptance secret.
Cross-cutting β€” wire/spec alignment
  • πŸ”΄ Removed β€” vm_id from VM responses, vnet_id / vxlan_vni / router_vm_id from VPC responses, ip_group_id / subnet_id / vm_id from floating IP responses, network_id / mac / bridge / vxlan_vni from VM network interface responses, and the legacy top-level project_id / project_name from 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_ip and skip_vpc flags on Create VM β€” POST /api/v1/vms. Build VPC-only VMs (no public IP) or public-IP-only VMs (no VPC). Cannot be combined.
Networking β€” API
  • 🟒 Added β€” Floating IP reserve/release β€” POST /api/v1/ips/reserve, DELETE /api/v1/ips/{id}/reserve, plus GET /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}] and GET /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|ipv6 query filter on List VM network interfaces β€” GET /api/v1/vms/{id}/networks?type=public.
  • πŸ”΅ Updated β€” VMNetwork.type enum now includes ipv6.
  • πŸ”΄ Removed β€” mac field from public VMNetwork schema (still in raw response for the dashboard, hidden from public API consumers).
Networking β€” CLI
  • 🟒 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|ipv6 filter
Virtual Machines β€” API
  • 🟒 Added β€” Update VM note β€” PATCH /api/v1/vms/{id}/notes/{type} β€” replaces existing note content; returns 404 if no note exists yet (use PUT to 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 β€” type query filter on Get VM notes β€” GET /api/v1/vms/{id}/notes?type=personal|account to fetch only one scope.
Virtual Machines β€” CLI
  • 🟒 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|account filter
  • 🟒 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_id field from VM responses (was an OpenNebula internal identifier β€” use id instead)
  • πŸ”΅ Updated β€” BillingError.reason enum trimmed to currently-returned values: banned, failed, no_billing_customer. Insufficient balance now consistently returns 402 with a plain Error body.
Virtual Machines β€” CLI
  • 🟒 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
Virtual Machines β€” Terraform
  • πŸ”΄ Removed β€” vm_id computed attribute from raff_vm (was the OpenNebula int ID; use id instead)

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_ipv6 parameter 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
Catalog β€” API
  • 🟒 Added β€” Browse available resources β€” regions, OS templates, pricing (no auth required)
    • GET /api/v1/public/regions Β· GET /api/v1/public/templates
    • GET /api/v1/public/pricing/vm Β· /volume Β· /snapshot Β· /backup Β· /ip
Last modified on May 14, 2026