Skip to content
FR Version françaiseBook a demo

Billing and pricing

graal counts what your workloads reserve on the cluster: an instance type, for a number of minutes. The same measurement engine serves two billing models, chosen by a deployment setting. Public prices and the calculators are on the Pricing page; this page explains what is counted and how.

The setting is called graal.billing.mode (variable GRAAL_BILLING_MODE, chart value billing.mode).

Mode For whom What is billed
saas graal.systems, operated by the vendor Usage, per minute, at the vendor’s price list. One invoice per month and per tenant
self-hosted (default) An installation on your side or at your host An annual per-vCPU subscription, billed outside the product. The engine serves internal rebilling: you set your own price grid

In self-hosted, the vendor’s invoice writes (issuing, sending, online payment) answer 501 feature_disabled: an installation built from the open image never issues an invoice in the vendor’s name, even if a price grid is set on it.

The unit is what is allocated, not what is consumed: the reserved instance type (so its vCPU, memory and GPUs) multiplied by its minutes, as with a cloud provider.

  • Start and end. The duration runs from the effective start of the workload, meaning its first moment in execution, to its end. Queue time and image pulls are not counted; a workload that never started is not either.
  • Started minute. 61 seconds count as 2 minutes.
  • Cancellation. A cancelled run is billed up to the cancellation, once.
  • One rate. The price depends on the instance type, not on the usage: job, workflow run, notebook or workspace, serving endpoint, managed warehouse and stream.
  • Long-running workloads. Workspaces, endpoints, warehouses and managed streams are closed out by period, at every stop and at every change of month: a month’s cost never spills into the next.
  • Attribution. Each usage line carries its project, job, run, workflow and workflow run, workspace or endpoint: costs can be read along each of these dimensions.

What is not billed: storage and outbound traffic (neither measured nor billed), and runs on an edge device, whose hardware is yours.

cost of a workload = price per minute of the type × number of instances × started minutes

For each instance type the grid stores a monthly price: price per minute × 43,200 (30 days of 1,440 minutes). The calculation brings it back to the minute by dividing by 43,200, which is exact. Example: General G2 (4 vCPU, 16 GB) stores €190.08; 190.08 ÷ 43,200 = €0.0044 per minute; one hour costs 60 × 0.0044 = €0.264.

The SaaS price list (20 instance types) is published on the Pricing page: the site reads the very file that operators set on the platform.

On an installation, pricing is tiered by band: each vCPU is billed at the price of its band, so the total never decreases when you add a vCPU. vCPU 1 to 64 are €290 excl. VAT per vCPU per year (Essential); vCPU 65 to 256 are €190 (Enterprise). Example: 128 vCPU = 64 × 290 + 64 × 190 = €30,720 excl. VAT per year. Above 256 vCPU, or for a Sovereign plan: on quote. The 3-year commitment (−15%) and 24×7 support (+25%) apply to the total: 30,720 × 0.85 × 1.25 = €32,640. The calculator shows the average price per vCPU, with the band breakdown under the total.

The current month’s costs are visible in the console before the invoice, computed the same way: by project, job, workflow and workspace. The “Costs by project” screen adds a utilization rate per project: the CPU and memory actually consumed divided by what was reserved (for example “8 vCPU reserved, 1.2 used”), to spot what is oversized. The rate is shown next to the amount; it is not part of it. The same figures are available to an agent through the MCP tool get_costs_by_project.

  • One invoice per month and per tenant, issued automatically once the month is closed, in addition to the manual request.
  • Numbering is continuous, per calendar year: a single sequence for the vendor (not one per tenant), GS-2026-0001, GS-2026-0002…, restarting at 0001 every 1 January. The number is drawn at issue time, in the same transaction as the invoice: two invoices issued at the same time never share a number, and a failed issue leaves no gap.
  • Invoices issued before this format keep their number (GS1, GS2…): an issued number never changes.
  • An issued invoice is never deleted. A mistake is corrected by a credit note, numbered in the same sequence.
  • Payment is manual by default; card payment is an option.
  • In automatic issuing, a month with nothing to bill produces neither an invoice nor a number.

The “Subscription” page (self-hosted mode)

Section titled “The “Subscription” page (self-hosted mode)”

On an installation, the console offers a Subscription page reserved to the platform administrator. It shows:

  • the subscribed vCPU (the chart value billing.subscription.vcpu);
  • the CPU quota of the execution space, read from the ResourceQuota of its namespace;
  • the peak of vCPU actually allocated over the period, computed from instance usage.

The vCPU counted by the subscription is that quota: you set it yourself, it is capped and verifiable. Users and agents are unlimited.

The platform administrator sets their own price grid (POST /prices). The platform then computes, with the same engine, costs per project, job, workflow and workspace, and exports them for your departments and teams. It is included in the subscription.

The graal.systems SaaS price list is versioned in dev/billing/grille-saas.csv. The price_per_minute column is authoritative; amount is the stored monthly price, equal to price_per_minute × 43,200. The dev/billing/poser-grille.sh script sets it on a platform through the API:

Terminal window
# plan: writes nothing, lists the prices to create, change, or that are identical
dev/billing/poser-grille.sh dev
# write: creates the missing prices and changes the different amounts
dev/billing/poser-grille.sh dev --appliquer

A price present on the platform but absent from the file is never deleted (it may carry usage): it is reported. Writing the grid is reserved to the platform administrator. Automatic invoice issuing is set by graal.billing.invoices.auto.enabled.