FinOps settings
The FinOps settings screen lets you set the currency and the monthly budget of your tenant, load the exchange
rates and record the dated unit prices of media, GPU and storage. Portal path: /finops/settings (menu FinOps >
FinOps settings). FinOps analysts and tenant administrators change the settings; auditors read them.
What the screen shows
The screen has three tabs: Currency and budget (default), Exchange rates (?tab=fxRates) and Unit
prices (?tab=mediaPrices).
| Area | Content |
|---|---|
| Current settings | JSON of the values the cost estimation, the budget alerts and the quota reservations use now: currency, monthly_budget, variance_threshold_pct, reservation_ttl_seconds. |
| Update the settings | Form: Currency (for example EUR), Monthly budget (for example 10000.00), Variance threshold (%), Reservation lifetime (s), with a Result panel. |
| Exchange rates table | Filters Base currency and Quote currency. Columns: Base currency, Quote currency, Rate, As of, Source. A click on a row shows it as JSON. |
| Load exchange rates | Form with one Rates field (JSON list) and a Result panel. |
| Media, GPU and storage unit prices table | Filter Unit (audio_second, image, video_second, gpu_second, storage_gb_month). Columns: Unit, Provider, Resource, Unit price, Effective from, Source. A click on a row shows it as JSON. |
| Empty states | No exchange rate; No unit price (an unknown price is never counted as zero). |
Actions
| Button or action | What it does | API call | Roles |
|---|---|---|---|
| Current settings (loaded with the tab) | Reads the settings of the tenant. | GET /v1/finops/settings | Readers of the FinOps section |
| Run (Update the settings) | Saves the fields filled; an empty field keeps its current value. | PUT /v1/finops/settings | finops, tenant_admin, platform_admin |
| Filter (Exchange rates) | Filters the rates on the currencies. | GET /v1/finops/fx-rates (base, quote) | Readers of the FinOps section |
| Run (Load exchange rates) | Writes the rates; an existing rate at the same date is replaced. | PUT /v1/finops/fx-rates | finops, tenant_admin, platform_admin |
| Filter (unit prices) | Filters the prices on the unit. | GET /v1/finops/media-prices (unit) | Readers of the FinOps section |
| New unit price | Opens the form: Unit (required), Provider (required), Resource (required), Unit price (required, for example 0.006), Currency (default EUR), Effective from, Source. Create sends it. | POST /v1/finops/media-prices | finops, tenant_admin, platform_admin |
| Refresh (round arrow icon) | Reloads the table of the tab. | GET /v1/finops/fx-rates or GET /v1/finops/media-prices | Readers of the FinOps section |
The default value of Rates is:
[{"base": "EUR", "quote": "USD", "rate": "1.08", "as_of": "2026-01-01T00:00:00Z", "source": "ecb"}]
Roles
| Role | Access |
|---|---|
finops, tenant_admin | Change the settings, the rates and the unit prices (ADMIN_ROLES of services/control-plane/src/eai/domains/finops/__init__.py and services/control-plane/src/eai/domains/finops/media.py). |
platform_admin | Same rights. The settings and the unit prices need a tenant context; rates loaded without a tenant are platform rates. |
auditor | Reads every tab. The forms show Requires one of these roles: FinOps, Tenant admin, Platform admin and New unit price is hidden. |
developer, viewer, security_officer | Allowed to read by the API, but the FinOps section of the portal menu does not open for them. |
Typical tasks
Set the currency and the monthly budget
- Read the current values. Current settings shows what the estimation uses now.
Expected result: the JSON shows
currencyandmonthly_budget. If it fails: an errortenant_requiredmeans you are not signed in to a tenant. - Fill the form. In Update the settings, enter Currency (three capital letters) and Monthly budget,
which the
budgetalerts compare with the spend. Expected result: the fields are filled; the other fields can stay empty. If it fails: if the form is replaced by a role notice, ask for thefinopsrole. - Save. Click Run.
Expected result: the Result panel shows the new values. Current settings shows them after a reload of the
page.
If it fails:
validation_errormeans a currency that is not three capital letters or a negative value.
Load the exchange rates of the month
- Open the tab. Click Exchange rates. The costs in another currency are converted with the rate valid at their date. Expected result: the list of rates is shown. If it fails: click Refresh.
- Paste the rates. Replace the Rates JSON with your list of
base,quote,rate,as_of,source(1 to 1000 rates), then click Run. Expected result: the Result panel showsupdatedand the list of rates. If it fails:validation_errornames the invalid entry (a rate must be above zero).
Record the price of a media unit
- Open the form. In Unit prices, click New unit price. Expected result: the form opens on the right. If it fails: the button is shown to FinOps administrators only.
- Fill and create. Choose the Unit, enter Provider, Resource, Unit price and Source (the
server requires it), then click Create.
Expected result: the toast Created appears and the price is listed.
If it fails:
media_price_existsmeans a revision already exists at that date; choose another Effective from.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Error media_price_invalid (HTTP 422): "The media price field source is invalid." | Source left empty, or another field is invalid (the message names it). | Fill Source and check the named field. |
Error media_price_exists (HTTP 409) | A revision exists for this unit, provider, resource and date. | Choose another Effective from. |
Error validation_error (HTTP 422) | Currency not three capital letters, negative budget, rate not above zero, or more than 1000 rates. | Fix the value. |
| Current settings shows the old values | The block is read when the tab opens. | Reload the page. |
Error tenant_required (HTTP 403) | Platform administrator without a tenant on the settings or unit prices. | Sign in to a tenant. |
Error fx_rate_missing elsewhere in FinOps | No rate covers the currency pair at the date of a cost. | Load the rate here. |