Accounts, quota & billing

vrtmv bills one price per distinct instance, per year. A seat is claimed by a real migration, a signed verify, or a lightweight license (the vrtmv license/enroll verb); analysis and feasibility checks are free, and re-running any kind against the same VM never bills twice.

On-Demand is $799 per instance a year, Pro $599 (bought 10 at a time) and Fleet $399 (100 at a time). Each price covers the migration, its signed parity attestation, and ongoing monitoring. There is no separate one-time fee.

What is billable

A usage event is billable-eligible only when all hold:

  • its kind is a billable seat kind — migration, verify, or license (preflight and readiness are always free; cve_scan and drift are license-gated and never metered — drift is refused on a VM not already seated by a migration, verify, or license, while cve_scan auto-claims a lightweight license seat when the account has capacity (VRTMV-620) and is refused only when capacity is genuinely exhausted);
  • the target is not a free target (api.free_target, which is currently empty — every target bills);
  • the account is not on an unlimited plan.

Billing counts distinct VMs by fingerprint, so re-migrating the same VM does not bill twice.

The waterfall

Each account's position is computed as a waterfall:

  1. Free quota — a number of billable instances included at no charge (10 by default).
  2. Annual subscription — beyond the free quota, each instance is billed at the account's tier rate, per year, as a single subscription whose quantity tracks the instance count.

GET /v1/account returns this summary — free quota, billable instances, paid instances, the per-instance annual rate and the annual total — which is what an account page renders.

Prepaid credits were retired on 2026-08-07 along with the one-time migration fee, since a credit pre-bought a per-migration charge that no longer exists. The credits_* fields remain in the API response for compatibility and report zero. The ledger is preserved and closed: no new grants can be created. To comp an account, its free quota is raised instead.

Licensing became first-class with vrtmv license / enroll (POST /v1/enroll). Until then the only way to seat a VM was as a byproduct of a full migrate or verify — minutes of translation and attestation. Enrolment claims the same per-instance seat from just a fingerprint, so spare seats can be lit up directly and a VM can be licensed before it is ever migrated (which is what lets cve-scan/drift run on it). It changes how a seat is claimed, not what a seat costs: the price, the per-fingerprint dedup, and the 402 capacity gate are all unchanged.

Seeing your seats and terms

GET /v1/account/capacity shows what the account holds and through when. Alongside the pooled totals (licensed_seats and the active license_valid_from/valid_until), it returns a terms array with one entry per active term — each licence term (grouped by window, source and note) and each active POV, with its own seat count and dates. An account whose seats run through different dates therefore shows each term rather than a single pooled figure collapsed to the longest one. The gate enforces each term per grant; terms is how a customer verifies that breakdown. /v1/account/entitlements and /v1/account/terms are aliases of the same payload. The same response also carries free_quota (the free allowance) and billable_vms_used (how many VMs are seated), so free_quota + licensed_seats + active_pov_seats reads as provisioned capacity against billable_vms_used consumed, without a second call. See Endpoints for the response shape.

GET /v1/account/vms lists those seated VMs one by one: each VM's fingerprint, when it first became billable (its "licensed since" date), its last activity, and the operation kinds it has run. It answers "which hosts are licensed, and since when" — the per-host view. Because seats and POV are account-level pools with no per-VM assignment, it reports per-VM licensed status, not a per-VM seat type. See Endpoints.

Enforcement

  • A non-paying account whose free quota is exhausted is refused a new billable seat (migration or verify) with 402 Payment Required.
  • A paying account soft-overages into invoiced on-demand usage rather than being blocked.
  • An absolute hard cap applies to every non-unlimited account: once it reaches the per-account VM limit, further billable seat events are hard-blocked with 402 until the limit is raised. Unlimited accounts (negotiated large estates) are exempt.

Feasibility checks (preflight, readiness) are never gated.

Data boundary

Metering carries only a one-way VM fingerprint and the release pair — never host identity or workload data. See Security posture.