Price cards
The Price cards screen lets you record and retire the versioned prices of a provider model, used by the Control
Plane to compute the measured cost of each call. Portal path: /finops/price-cards (menu FinOps > Price
cards). FinOps analysts and tenant administrators maintain the cards; auditors read them.
What the screen shows
| Area | Content |
|---|---|
| Price cards table | Columns: Provider, Model pattern, Region, Version, Currency, Prices (JSON of price per unit), Scope (tenant for a card of your tenant, global for a platform card), Effective from, Status. |
| List content | The server lists the active cards only: a retired card leaves the list. |
| Detail panel | A click on a row loads the full card (tiers, image and video prices, reasoning billing, notes). |
| Empty state | No price card: add the prices of a provider model. |
Actions
| Button or action | What it does | API call | Roles |
|---|---|---|---|
| New price card | Opens the form: Provider (required), Model pattern (required, for example gpt-4o-mini*), Region (default *), Version (for example openai-2026-01, else v<n>), Currency (required, default USD), Prices (required JSON, price per 1M units), Effective from (ISO 8601, default now), Notes. Create sends it. | POST /v1/finops/price-cards | finops, tenant_admin, platform_admin |
| Retire (row menu, active cards) | Asks for a confirmation, then ends the card now: status retired and end of validity set. | POST /v1/finops/price-cards/{card_id}/retire | finops, tenant_admin, platform_admin |
| Click on a row | Opens the detail panel of the card. | GET /v1/finops/price-cards/{card_id} | Readers of the FinOps section |
| Refresh (round arrow icon) | Reloads the list. | GET /v1/finops/price-cards | Readers of the FinOps section |
The default Prices value of the form is:
{"input_tokens": "0.15", "output_tokens": "0.60", "cached_input_tokens": "0.075"}
The keys accepted by the server include input_tokens, output_tokens, reasoning_tokens, cached_input_tokens,
cache_read_tokens, cache_write_tokens, audio_tokens, embedding_tokens, characters, images,
audio_seconds, video_seconds, requests and tool_calls; a key outside the list is refused.
Roles
| Role | Access |
|---|---|
finops, tenant_admin | Create and retire the cards of the tenant (ADMIN_ROLES). |
platform_admin | Same rights. Signed in without a tenant, the card created is a global card shared by all tenants. |
auditor | Reads the cards; the New price card button and the Retire action are 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
Record the new prices of a model
- Open the form. A new card keeps the history: the previous card of the same provider, pattern and region is
closed at the date of the new one. Click New price card.
Expected result: the form opens on the right.
If it fails: if the button is missing, your roles are not
finops,tenant_adminorplatform_admin. - Fill the card. Enter Provider, Model pattern, Currency and the Prices JSON, and set
Effective from to the date of the new price list.
Expected result: the form accepts the values.
If it fails: the currency must be three capital letters (
EUR,USD). - Create it. Click Create.
Expected result: the toast Created appears and the card is listed with the status
active. If it fails:price_card_invalidnames the wrong price keys;conflictmeans a later card of the same model already exists from that date.
Retire an obsolete card
- Find the card. Look for the provider and the pattern in the table.
Expected result: the card is listed with the status
active. If it fails: click Refresh. - Retire it. Open the row menu, choose Retire and confirm the message.
Expected result: the toast Done appears and the card leaves the list (the server lists active cards only).
If it fails:
not_foundmeans the card was already removed; reload the list.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Error price_card_invalid (HTTP 422): "The price card is invalid: ..." | A key of Prices is not a known unit, or a price is negative. | Use the keys listed above with positive values. |
Error conflict (HTTP 409): "The resource already exists or is in conflict." | A card of the same provider, pattern and region starts at or after Effective from. | Choose a later Effective from, or retire the later card first. |
Error validation_error (HTTP 422) | Currency is not three capital letters, or Effective from is not a timestamp. | Fix the field. |
Error forbidden (HTTP 403) | Not a FinOps administrator, or platform_admin needed for a global card. | Ask for the finops role. |
| The measured cost of a call stays empty | No active card matches the provider and the model. | Create a card whose Model pattern matches the model id. |