THE LINUX FOUNDATION PROJECTS

FOCUS Working Group / Release 1.5

What’s coming in FOCUS 1.5, and what is not

FOCUS 1.5 gives AI token billing a common set of labels across providers, and cost rows can name the person, service account, or agent behind a charge. A SKU Price dataset that publishes prices on their own is in final review. This page explains each capability, why it matters, and where it stands, along with the work that is not in 1.5. FOCUS, the FinOps Open Cost and Usage Specification, is an open specification supported by the FinOps Foundation that normalizes billing data from cloud, SaaS, AI, and other technology providers.

At a glance

A price catalog alongside cost data

A SKU Price dataset, in final review, publishes list and negotiated prices, effective dates, quantity tiers, and eligibility, so a workload can be priced before it runs and a rate tested after.

AI cost that compares across providers

Cost data can name the model and its developer, separate cached from uncached tokens and input from output, and record provider-issued credits in their own unit.

Spend that names who drove it

Cost rows can identify the principal and the credential behind a charge, such as the user or service account and the API key it used.

Clearer pricing, allocation, and classification

A column naming the service that receives allocated cost, service categories that no longer assume cloud, and preserved tag keys, with tighter list and contracted cost definitions in final review.

Easier to implement and verify

The conditions that decide when a column must appear are named and defined in the specification, with a migration guide and machine-readable validation rules updated alongside the release.

What is not in 1.5

A Recommendation dataset, region scope for prices, and a feature-level rubric, plus the feature requests 1.5 did not take up.

If you use FOCUS data today: data that conforms to FOCUS 1.4 stays valid as 1.4, and 1.5 applies once a data generator adopts it. No existing column is renamed or removed. The new Cost and Usage columns are additions, as is the SKU Price dataset in final review, and each is Conditional, present only where a provider’s billing works that way. A few values read differently in 1.5 data: bare metal servers classify apart from virtual machines, contract terms use the largest whole time unit (“1 Year”, not “12 Months”), tag keys keep the form the customer set, and Pricing Currency can hold a provider’s own unit, such as platform credits, which must not use an ISO 4217 currency code.

How to read the status

In the working draft
Merged into the 1.5 working draft. Expected in the release; the consistency review can still make editorial changes, and the release is final at ratification.
In final review
An open pull request in Member review, the last review step. It joins the working draft when Members approve it. Work not approved by the 8 October Member approval deadline moves to the next release.
Alongside the release
Release work completed with the release itself rather than through one pull request, such as the Requirements Model.
Not in 1.5
Postponed during this cycle, or filed and not taken up. Listed so the gaps are explicit.

Development timeline

  1. Scope

    Oct 2025 to Apr 2026

    Feature requests prioritized for the release.

  2. Development and review

    Apr to 8 Oct 2026

    Pull requests drafted, then reviewed by Task Forces and Members. Member approval closes on 8 October.

  3. Consistency review

    8 to 29 Oct 2026

    Three weeks reading the full draft for consistency.

  4. IP rights review

    2 Nov to 1 Dec 2026

    At least 30 days, during which members can exclude essential patent claims from their licensing commitments.

  5. Approval and ratification

    3 Dec 2026

    The working group approves and the Steering Committee ratifies the same day.

  6. Public announcement

    December 2026

    Publication date confirmed in December.

Terms used here

Working draft
The live version of the specification between releases. Merged work sits there until 1.5 publishes.
Member review
The last review step, where the working group’s Members review a pull request after its Task Force has. Member approval merges it into the working draft.
Feature request and pull request
A feature request (FR) proposes a change to the specification; a pull request (PR) carries the proposed text. Both are public on GitHub and linked in each card’s additional details.
Data generator
The organization that produces a FOCUS dataset, such as a cloud, SaaS, or AI provider, or a platform that converts billing data into FOCUS.
SKU and SKU price
A SKU is the thing being bought, at the granularity the provider prices it. A SKU price is one price for it; a SKU can have several, such as a list price and a negotiated one.
SKU Price Details
A Cost and Usage column carrying properties that describe what a price is for, such as instance type or storage class. FOCUS defines common property names so queries work across providers.
Supported feature
A use case documented in the specification, with the columns it depends on and example queries that show the data answering it.
Operating model condition
A named fact about how a provider bills, such as whether it uses unit pricing, that decides whether a Conditional column or dataset must be present.
Token
The unit AI models bill on, a small piece of the content a model reads or writes. Input and output tokens are usually priced differently.

No capabilities match that filter.

A price catalog alongside cost and usage

The largest single piece of work proposed for 1.5, and the difference between reporting on cost and negotiating it.

In final review

A SKU Price dataset publishes what a SKU costs, before anyone buys it.

A new dataset that carries a provider’s prices on their own, separate from consumption: list and negotiated prices, the dates each applies, quantity tiers, the accounts eligible for a price, and purchase terms for commitments. Each price connects to the cost rows billed at it through the SKU Price ID that Cost and Usage already carries. Two supported features come with it, one for estimating cost from the catalog and one for evaluating the rates already being paid.

Why it matters. Today, FOCUS data shows a rate only once a charge has been billed at it. With the catalog, a planned workload can be priced from published rates before it runs, and the rate already being paid can be tested against the list price, the next quantity tier, or a contracted rate.

Additional details

How the dataset works

  • Each record carries one unit price and says what kind of price it is, such as a public list price, a list price fixed for a contract, usually when it starts, or another contracted rate. Contract ID is empty for a price that is not specific to a contract and identifies the contract for one that is.
  • A data generator includes the dataset when its operating model includes unit pricing, the same condition that governs the SKU columns in Cost and Usage.
  • It is delivered as a snapshot of the current price list. History comes from each price’s effective dates, and from keeping successive snapshots where a provider does not deliver past prices.
  • Matching a cost row to its price uses the service provider, the SKU Price ID, the charge date against the price’s effective dates, the contract, the currency, and the kind of price being compared.
  • SKU Price Eligibility describes which accounts or scopes a price applies to, with inclusions and exclusions, validated by a published JSON schema.

The two supported features

  • Catalog Discovery and Price Estimation: the list prices in force at a point in time, the estimated cost of a planned workload, the prices a billing account is eligible for, usage rates separated from purchase fees and credit values, announced price changes and retirements, and list prices compared across regions.
  • Rate Optimization and Contract Evaluation: what negotiation reduces a rate by, public and negotiated prices at a given quantity, the quantity tier that applies to observed consumption, the effect of reaching the next tier, the purchase terms offered for a SKU, the effect of moving consumption to a contracted rate, and recorded unit prices compared with published rates.

AI cost that compares across providers

FOCUS has carried token counts since version 1.0. What 1.5 adds is the labeling that makes them comparable: which model, which kind of token, and which unit a provider’s own credits are priced in. The FOCUS 1.5 AI and token costs page covers this work in more depth.

In the working draft

Cost data can name the AI model and who built it.

Four recommended FOCUS-defined properties in SKU Price Details record the model behind a charge: the developer that created it, the model family, the model identifier as billed, and the version. Developer, family, and version read the same way whether the model is bought from its developer or through a cloud provider; the model identifier is recorded as each provider bills it.

Why it matters. This is what makes AI spend comparable across providers. Without it, an organization can total its model spend but cannot break it down by model without provider-specific parsing.

Additional details

The properties are ModelDeveloper, ModelFamily, ModelId, and ModelVersion. ModelId is the identifier as it appears in billing and can differ between providers selling the same model; family and version are as the model developer defines them. No columns are added and existing requirements are unchanged, so the change is additive for every data generator. Including these properties is recommended rather than required, so a conformant dataset can omit them.

A worked example covers a model bought directly from its developer and the same model served by a cloud provider, where the service provider and the model developer are different companies.

In the working draft

Cached tokens separate from uncached ones, and input from output.

Two recommended FOCUS-defined properties label token prices: whether the tokens were read from a prompt cache, written to it, or neither, and whether they are input or output. They normalize meter names that differ from one provider to the next.

Why it matters. Cached tokens often cost a fraction of uncached ones at the same provider. With a common label, a rising AI bill driven by a falling cache hit rate can be told apart from one driven by more traffic, across providers and without matching each provider’s meter names.

Additional details
  • TokenCacheAction takes “Uncached”, “Read”, “Write”, or “Other”. TokenDirection takes “Input” or “Output”. They are the first FOCUS-defined SKU Price Details properties with a fixed set of allowed values. Including them is recommended rather than required.
  • A price that bills several kinds of tokens on one meter omits the property that would misdescribe them.
  • A cached token counted on a “Read” or “Write” row is not counted again on another row, so token totals do not double count.
  • Reasoning tokens metered separately carry “Output”. Modality, reasoning effort, cache retention duration, and context window size are not values of these properties.
  • A worked example shows two providers that meter caching differently, and two example queries join the Resource Usage supported feature: cache hit rate by model, and the ratio of input to output tokens by model.
In final review

Worked examples for mapping AI model billing into FOCUS.

Six worked scenarios, each with sample data, showing how token billing maps onto existing FOCUS columns, plus an AI Model Billing supported feature with example queries. No columns are added: the gap these close is consistent use of the columns that already exist.

Why it matters. Every AI provider formats its billing differently, so each one gets normalized differently. Shared examples give data generators and FinOps Practitioners one reference for the arrangements they meet most.

Additional details

The scenarios

  • A model developer billing per token, directly.
  • Several models on one invoice, each priced separately.
  • Cached tokens bought through a cloud provider’s marketplace.
  • A cloud provider billing for its own service that serves a third-party model.
  • A prepayment drawn down by token usage.
  • A multi-model invoice through a cloud marketplace, with cache meters.

The AI Model Billing supported feature adds two queries: effective cost per million tokens by SKU, token direction, and cache action, and token consumption over time. The example rows use the model identity and token properties and the requester columns described on this page. Requested by NatWest, SLB, UK Government Digital Service, Shutterstock, Syngenta, Anglepoint, AWS, and the FinOps Foundation.

In the working draft

Provider-issued credits can be recorded as a consumption currency.

The currency rules now recognize a consumption currency: a provider-issued unit such as platform credits or normalized billing units. ISO 4217 currency codes are reserved for national currencies.

Why it matters. Much AI and SaaS usage is priced in a provider’s own credits or billing units. The price can now be recorded in that unit, alongside the billed cost in national currency, so a practitioner sees both the credits a workload consumed and what they cost.

Additional details

The CurrencyFormat attribute previously allowed virtual currency while also requiring an ISO 4217 code on every value, which no provider-issued unit has. Now ISO 4217 applies when a value represents a national currency, and a column must not use an ISO 4217 code for anything else. The glossary adds consumption currency. A SaaS example shows a consumption currency pricing model.

In the working draft

Common unit names for multimodal and agentic usage.

The recommended unit names now include Character, Image, Job, Message, Page, and Session alongside Token and Request, each with a description.

Why it matters. Without common names, providers describe multimodal and agentic usage in their own strings, so unit costs cannot be compared without mapping each one by hand.

Additional details

These are recommended values in the Unit Format attribute, which governs how units are written in columns such as Consumed Unit and Pricing Unit.

Spend that names who drove it

In the working draft

Cost rows can identify the principal and the credential behind a charge.

Three new Cost and Usage columns. Principal ID identifies the user, service account, or other identity that was granted access. Credential ID identifies the credential presented on the request, such as an API key or a session. Requester Details carries the attributes a provider publishes for each, such as a display name, type, and email address.

Why it matters. As spend moves to per-request API and AI billing, the question shifts from which account owns a resource to which developer, service, or agent made the call. These columns answer it inside billing data, without joining to logs.

Additional details
  • The columns are PrincipalId, CredentialId, and RequesterDetails. All three are Conditional, governed by a new operating model condition for requester attribution.
  • Principal ID is the attribution dimension: it stays the same while the credentials that authenticate it rotate. Credential ID is the audit dimension: it separates charges that share a principal but came from different keys or sessions.
  • Neither ID column may contain a value that authenticates a request, such as the key string itself.
  • Neither column identifies who benefits from a charge. A shared workload, a gateway, or an embedded assistant can act for people who never appear in billing data.
  • Requester Details is a JSON array of the attributes a provider publishes for the principal and the credential, validated by a published JSON schema. It is populated whenever either ID is, and an entry for the principal or the credential appears only when that ID is populated. Further levels, such as a delegating identity or a client application, can be carried as custom entries.
  • A worked example walks through 14 scenarios, from a generative AI API key owned by a user to seat-based SaaS, marketplace purchases, and billing-system charges that carry neither identifier.

Clearer rules for pricing, allocation, and classification

In final review

Tighter definitions for list and contracted cost.

Revised definitions for List Cost, List Unit Price, Contracted Cost, and Contracted Unit Price that state which pricing effects each one reflects.

Why it matters. These columns feed effective savings rate and rate optimization analysis. When their definitions leave room for interpretation, two conformant datasets can report different savings for the same purchase.

Additional details

The columns are ListCost, ListUnitPrice, ContractedCost, and ContractedUnitPrice. The revision also aligns the pricing currency unit price columns with their billing currency counterparts and consolidates the operating model conditions that decide when these columns must appear.

In the working draft

Split cost allocation names the service that receives the cost.

A new Allocated Service Name column identifies the service a split charge is allocated to, while the original Service Name stays on the row. Updated supported features and a field mapping for data generators come with it.

Why it matters. Shared platform and container costs have to be divided among the services and teams that used them. Naming the receiving service keeps allocated cost queryable without overwriting where the charge came from.

Additional details

The column, AllocatedServiceName, is populated on rows a data generator produces through split cost allocation and empty otherwise, and it should match the Service Name the data generator uses for that service. Worked examples and a field mapping for data generators accompany the updated split cost allocation supported features.

In the working draft

Service categories that no longer assume cloud, with bare metal apart from virtual machines.

Service Category descriptions are rewritten to apply to any technology provider. The Compute category covers physical as well as virtual, containerized, and serverless computing, and a new Bare Metal subcategory separates physical servers from virtual machines.

Why it matters. Service category is the first cut most analyses make. A taxonomy that assumes cloud misclassifies spend from providers that are not clouds, and capacity bought as bare metal, common for GPUs, now classifies on its own.

Additional details

The broader expansion of allowed values for on-premises, SaaS, and physical infrastructure is not part of 1.5; see the last section.

In the working draft

Tag keys are preserved as the customer set them.

User-defined tag keys in the Tags column must match the keys as assigned at their source, with a provider’s scheme prefix only where one is prepended.

Why it matters. Tag keys are how organizations attribute spend to teams and cost centers. If a provider rewrites a key, allocation queries stop matching the organization’s own taxonomy.

Additional details

This restores a preservation requirement to the Tags column so provider-side normalization cannot silently rename a key.

In the working draft

One way to write a contract commitment’s duration.

Contract commitment durations use the largest whole time unit that fits, so a one-year term reads “1 Year” rather than “12 Months”.

Why it matters. A one-year term no longer arrives as both “1 Year” and “12 Months”, so comparing commitment terms across providers takes less normalization.

Additional details

ContractCommitmentDurationType should use a “number and unit” format, with unit names from the Unit Format attribute from Minute through Year. The compound format rule was also split into separate requirements.

Easier to implement and verify

In the working draft

The conditions that decide when a column must appear are named and defined in the specification.

Named operating model conditions, such as whether a provider uses unit pricing, offers commitment discounts, or supports tags, now decide whether each Conditional column and dataset must be present. Each Conditional column names the condition that governs it.

Why it matters. When each column words its condition differently and only the validation tooling names them, the specification and the validator can drift apart. Defined once in the specification, the conditions are authoritative and visible where implementers already read.

Additional details

The specification already stated each presence rule, in each column’s own words; the named criteria behind them lived only in the Requirements Model. Each condition is now a defined term, the Conditional columns’ Content Constraints tables name the condition that governs them, and the dataset overview tables use one convention for columns that depend on more than one condition.

In the working draft

A migration guide from FOCUS 1.3 to 1.4.

One place that sets out what changed between 1.3 and 1.4, what requires migration, and separate guidance for FinOps Practitioners and data generators.

Why it matters. Version migration is where adoption stalls. Laying out what changed and what to do about it removes a reason to wait.

Additional details

The guide is published as supporting content alongside the specification rather than as normative text.

Alongside the release

The Requirements Model kept current with 1.5.

The Requirements Model is the machine-readable form of the specification’s requirements that validation tools build on. It is updated alongside each release, and its 1.5 rules follow the specification changes they describe.

Why it matters. Validation tooling is how a requirement reaches implementers as a test. If it lags the specification, conformance testing checks the wrong version.

Additional details

The 1.5 model’s structure, including an entity for operating model conditions, is merged, along with an automated workflow that extracts rules from the specification text. The 1.5 rule additions follow the specification changes they describe.

In the working draft

Smaller corrections and build improvements.

Fixes that are not features on their own but are part of the release, from removing a duplicated requirement to validating the specification’s links during every build.

Additional details
  • A duplicative cost formula requirement removed from Pricing Quantity.
  • Feature Level value lists completed in the overview and the contributor guidelines.
  • Commitment discount example data reconciled so SKU Price IDs are used consistently.
  • Specification components and anchor links validated during the build, and blockquotes delineated in the PDF.
  • The contributor guidelines refactored for consistent style and rules.

What is not in 1.5

Work postponed from 1.5 during this cycle, and feature requests that 1.5 did not take up. Both remain open for the next release’s scoping.

Next release

A Recommendation dataset.

A normalized dataset for the optimization recommendations, from cost and performance to reliability and security, that providers and tools produce. The draft reached Member review, and in October it moved to the next release, with open questions on its currency handling, columns, and naming.

Why it matters. Every provider emits recommendations in its own format, so anyone consuming them from more than one source has no common structure to build on. The draft stays open, and input from anyone who produces or consumes recommendations shapes it.

Additional details

The draft dataset and its supported feature stay open on GitHub for review.

Postponed

Other work postponed during this cycle.

Region scope for SKU prices, a rubric for which columns are Mandatory or Conditional, specification examples checked against the FOCUS Validator, configurable detail levels, a Consumer ID column, broader service category values, and glossary terms for tiered pricing.

Additional details
  • Region scope on SKU prices, telling globally served pricing from region-pinned pricing. Postponed in September, with its name and its relationship to the SKU Price dataset still open.
  • A feature-level rubric for deciding whether a column is Mandatory or Conditional, so requirements hold across regions and billing models.
  • Specification examples checked against the FOCUS Validator, moved so the examples and the validator can both align with 1.5.
  • Scoped detail configuration, letting a practitioner choose optional, higher-cardinality detail such as principal-level attribution for parts of a dataset.
  • A Consumer ID column alongside the requester columns.
  • Broader Service Category allowed values for on-premises, SaaS, and physical infrastructure.
  • Tiered pricing glossary terms, held for a later release.
Not taken up

Feature requests filed but not taken up in 1.5.

Feature requests filed for consideration that did not get a pull request during the 1.5 window: further AI pricing dimensions, new datasets, pricing and discount clarifications, classification defaults, and more worked examples. Each stays open for the working group to consider for a later release.

Additional details

AI pricing dimensions

  • Reasoning tokens billed but not returned in the response (FR 2487).
  • The standing charge for keeping a context cache (FR 2488).
  • Input modality: text, image, audio, and video (FR 2489).
  • Prices that change with context window size (FR 2521).
  • Priority, standard, and batch inference tiers (FR 2437).
  • Provisioned throughput as a commitment (FR 2371).
  • Deeper AI service subcategories, including Agentic AI (FR 1943).

New datasets and extensions

  • A SKU Properties dataset for normalized attributes such as vCPU and memory (FR 1045).
  • The second phase of the Contract Commitment dataset (FR 1938).
  • Invoice Detail enhancements for reconciliation (FR 1936).
  • A companion Utilization dataset (FR 2654).

Pricing and discount clarity

  • An empty List Cost for negotiated-only pricing (FR 1523).
  • List price defaulting rules (FR 1832) and tier handling in list prices (FR 1625).
  • Pricing categories for SaaS commitments (FR 1933) and a Charge Subcategory (FR 1934).
  • Payment currency support (FR 1997) and content requirements for every column (FR 1890).

Classification, defaults, and examples

  • IaaS, PaaS, and SaaS service-model classification (FR 959) and defaults for empty name columns (FR 1039).
  • Line-item examples for adjustments (FR 1489) and pricing unit conversion (FR 1490).
  • Link validation on every pull request, alongside the build-time check (FR 2012).

Where to go next. The published specification, currently FOCUS 1.4, is at focus.finops.org, with every column in the Column Library. The 1.5 working draft is public on GitHub, and anyone can comment on the open pull requests.

A terminology note. In the FOCUS repository, an issue prefixed “AI” is an Action Item, a unit of working-group work, unrelated to artificial intelligence. This page spells out “Action Item” wherever it links to one.

Sources. The working group’s public records: the 1.5 milestone, the working-group board, merged commits on the working draft, and the 1.5 release plan. Those carry day-to-day movement; this page tracks the release story, not the full changelog. Updated October 2026, superseding the 17 September edition. Nothing here is a commitment on behalf of the working group; the release is final when the Steering Committee ratifies it.