Work IQ, Fabric and Foundry: three currencies in one solution

Work IQ, Fabric and Foundry: three currencies in one solution

Leia em português: Work IQ, Fabric e Foundry: três moedas na mesma solução

The agent answers one question, but the bill crosses several services. Context comes from Microsoft 365, the number comes from Fabric, and a Foundry model produces the answer. Looking only at the model token usage leaves part of the work outside the budget. The problem surfaces when three teams arrive at the same meeting with three different units and nobody can explain the complete cost of the workflow.

The currency follows the call

What is an agent billing map?

It connects operation, service, consumption unit, and budget owner. It is an architecture artifact for custom agents, not a new billing product.

The Microsoft IQ map explained which question each layer answers. This article covers the billing boundary: what each call consumes and who owns the budget. Caching, batch, and PTU comparisons belong to the AI FinOps article.

Workflow layer Main unit Financial boundary
Work IQ API Copilot Credits Billing plan and policies in Microsoft 365
Fabric data agent or ontology CU-seconds of consumption Fabric capacity and separately billed services
Model in Microsoft Foundry Tokens or PTUs per hour Deployment, resource, and purchasing model
Foundry IQ AI Search retrieval; an LLM when used AI Search and Azure OpenAI; not a unified currency

Sources checked on October 11, 2026. The values below identify both operation and source. Monetary prices depend on plan, region, and agreement; there is no universal quote per “question to Microsoft IQ.”

The problem it solves

A user license does not pay for every API; purchased capacity does not make a workload costless. A short answer can require substantial retrieval, planning, and query execution.

The map prevents three mistakes: adding incompatible units, confusing attributed cost with incremental charges, and counting work already included in another meter twice. It also forces an operational decision: who approves increased consumption as the agent grows?

Claims agent architecture in six lanes: orchestration, question, call, source and engine, meter, owner and report. Three columns show Work IQ, Fabric and Foundry, with Microsoft 365, OneLake and Azure AI Search. Solid arrows are calls; dashed arrows are attribution. Notes distinguish credits, CUs, tokens or PTUs, additional charges and unknown complete cost.
Following the Microsoft IQ visual model: three columns, six lanes, and numbered notes. Solid arrows show calls; dashed arrows, later attribution. Colors qualify cost, not GA status. Illustrative composition, not internal topology. Click to enlarge.

How it works — step by step

  1. Draw the calls needed to answer, including retrieval, queries, model inference, tools, and additional attempts.
  2. Identify each endpoint and meter. “Uses Fabric” does not distinguish a data agent, an ontology, and a warehouse query.
  3. Separate variable consumption, purchased capacity, storage, and access licensing.
  4. Convert units using the price applicable to the plan; explicitly allocate shared capacity.
  5. Reconcile aggregates with each service report and assign a budget owner.
  6. Control the workflow in the application: bound attempts, sources, and context without turning failures into empty answers.

Work IQ: a user license does not close the bill

The Work IQ API uses Copilot Credits. Its overview distinguishes Copilot experiences from custom and third-party agent calls: a Microsoft 365 Copilot license does not remove usage-based billing for those agents.

The Copilot Credits Guide, October 2026 edition, separates two components:

  • Chat/Context: variable grounding, retrieval, and reasoning consumption, driven by models, runtime, context, and tools.
  • Tools API: a static component of 0.1 Copilot Credit per API call for actions and tools.

The guide reference price for the pay-as-you-go meter is US$0.01 per Copilot Credit. A call covered by the static component therefore corresponds to US$0.001 under that plan. This is not the price of a complete task or any MCP tool from another provider.

The Work IQ MCP article explains operation and path. Here, the financial consequence is different: when the application makes multiple billable calls, count each one. Calling Chat/Context as well does not make its variable component disappear.

P3 has an annual commitment and unused credits expire. Retail pricing is not every agreement’s effective rate; a credit does not represent a fixed token count.

Fabric: CU consumption is not a price per answer

Microsoft Fabric capacity is a shared pool. CU-seconds, or CU-s, measure operation consumption; they are not a currency you can add directly to Copilot Credits.

For the Fabric data agent, the resource-specific page publishes the AI Query rates:

Processing component Unit Consumption
Uncached input 1,000 tokens 100 CU-s
Cached input 1,000 tokens 10 CU-s
Output 1,000 tokens 400 CU-s

Agent instructions, context, and history contribute to input; do not count only the typed question. Generated query execution is metered separately in the corresponding engine. Counting only AI Query excludes the work required to obtain the data.

The ontology has a different table

The new ontology experience, still in preview, has three meter groups:

  • Ontology Discovery: 1,000 CU-seconds per metered definition read.
  • Ontology Logic and Operations: Eventhouse and Graph consumption at the child item’s rate.
  • Ontology AI Reasoning: dynamic consumption, based on the tokens and resources used by the task.

Do not apply the AI Query table to the ontology. The current page does not publish a universal fixed token conversion for Ontology AI Reasoning. The four meters of the old experience do not describe the new one.

Discovery is not a price per click either: when the cached definition is current, navigation normally causes no additional read. The interface can read again after saving or refreshing, and automatic refresh occurs approximately every 20 minutes while it remains open. Closing the tab avoids unnecessary refresh reads; it does not replace controlling application calls.

OneLake, storage, and read/write operations have separate charges. Idle capacity can absorb consumption without immediately changing the invoice, but it uses headroom other workloads could need. Scaling capacity or enabling overage can change cash spending: attributed consumption and incremental cost are different questions.

Foundry: the model is not the complete bill

In Microsoft Foundry, standard deployments bill by token; provisioned deployments bill per PTU per hour, or use reservations. Allocated PTUs cost money even without requests. Tokens remain useful for measuring utilization, but do not become a second per-token charge for the same provisioned inference.

Foundry Agent Service adds no charge for creating or running native prompt and workflow agents. That does not make the solution free: models, tools, and connections can incur charges. Hosted agents bill for container compute per hour; they are a different offering.

Foundry IQ adds the AI Search boundary

Foundry IQ uses Azure AI Search knowledge bases. Agentic retrieval bills retrieval tokens during subquery execution and semantic ranking; when LLM planning or synthesis is used, Azure OpenAI bills its tokens separately.

Do not automatically add a classic semantic ranker per-query charge to the same agentic retrieval: the billing models differ. Include classic queries actually executed outside that pipeline.

The free retrieval plan has a monthly allowance. Once exhausted, requests that would require paid usage return a payment-required error; the standard plan permits paid continuation and requires Basic or higher.

Starting with service API 2026-04-01, retrieval billing consent is controlled by knowledgeRetrieval, independently of semanticSearch. Migrating versions without reviewing this can interrupt the workflow.

Also separate availability from price: the stable version supports minimal, extractive retrieval with GA sources; LLM planning, synthesis, and non-minimal capabilities remain in preview in the documentation checked.

A use case: the insurance claim

Revisit the reference article’s residential flooding claim. The analyst needs coverage, inspection, and policy conditions. The agent prepares the assessment; the analyst decides, without an automatic payment instruction.

Assessment component Call Financial record
Report and inspection Work IQ Tools Billable calls → credits
Policy status, coverage, and amount Fabric data agent AI Query → CU-s; engine extra
Manual and synthesis Foundry IQ + model Search + tokens or PTUs; no double count

The plan selects necessary sources; it does not call everything by default. Tool integration is covered in the reference article. Here we instrument its financial boundary, without copying reports or personal data into consumption records.

A calculated example, not a simulated invoice

Imagine a custom agent preparing a case assessment for an analyst. The example is illustrative: calculations checked against documentation, not executed in a tenant.

Work IQ. Assume 20 billable Tools calls: 20 × 0.1 = 2 Copilot Credits. Under the reference PAYG plan, 2 × US$0.01 = US$0.02. Any additional Chat/Context consumption needs another line.

Fabric data agent. Assume 2,000 uncached input tokens and 500 output tokens. The calculation is (2,000 × 100 + 500 × 400) / 1,000 = 400 CU-s, or approximately 0.111 CU-hour, excluding query execution.

Ontology, if also queried. One metered definition read adds 1,000 CU-s. The subtotal for these two consumption components would be 1,400 CU-s, approximately 0.389 CU-hour. It excludes dynamic reasoning, child items, and OneLake.

To illustrate allocation, use a hypothetical US$0.18/CU-hour rate: 1,400 / 3,600 × US$0.18 = US$0.07 of attributed cost. This is neither a quote for your agreement nor an automatic per-call charge. For purchased capacity, allocation must reconcile amortized cost, utilization, and headroom.

Foundry. For standard inference, keep uncached input, cached input, and output tokens separate and apply their model/deployment rates. For PTUs, allocate a share of capacity cost over the period. Add AI Search and other services actually used.

Attributed workflow cost =
  Work IQ converted under the credit plan
  + allocated Fabric capacity + separate charges
  + Foundry model: tokens OR allocated PTU cost
  + applicable AI Search + tools + storage

Do not publish “US$0.09 per assessment”: the example has components not yet calculated. The useful unit is cost attributed to a workflow with a declared scope, not a number pretending to include absent services.

In practice: recording claim consumption

Python 3.10+, standard library only. Save as example.py and run python example.py. Counters are illustrative, not actual API responses. tools_calls represents billable Tools calls, not every MCP message; model tokens and components without rates stay separate.

import json
from decimal import Decimal as D

COUNTERS = (
    "tools_calls", "fabric_uncached_tokens", "fabric_cached_tokens",
    "fabric_output_tokens", "discovery_reads", "foundry_uncached_tokens",
    "foundry_cached_tokens", "foundry_output_tokens",
)


def attribute_partial(trace_id: str, counters: dict[str, int],
                      model_mode: str) -> dict[str, object]:
    if not isinstance(trace_id, str) or not trace_id.strip():
        raise ValueError("A nonempty application trace_id is required")
    if set(counters) != set(COUNTERS) or any(
        type(value) is not int or value < 0 for value in counters.values()
    ):
        raise ValueError("Provide exactly the nonnegative integer counters")
    if model_mode not in {"standard", "provisioned"}:
        raise ValueError("Declare standard or provisioned model billing")

    credits = D(counters["tools_calls"]) * D("0.1")
    ai_query = (
        D(counters["fabric_uncached_tokens"]) * 100
        + D(counters["fabric_cached_tokens"]) * 10
        + D(counters["fabric_output_tokens"]) * 400
    ) / 1000
    discovery = D(counters["discovery_reads"]) * 1000
    return {
        "trace_id": trace_id,
        "basis": "illustrative",
        "work_iq_credits": str(credits),
        "fabric_ai_query_cu_s": str(ai_query),
        "fabric_discovery_cu_s": str(discovery),
        "foundry_mode": model_mode,
        "foundry_tokens": {
            "uncached_input": counters["foundry_uncached_tokens"],
            "cached_input": counters["foundry_cached_tokens"],
            "output": counters["foundry_output_tokens"],
        },
        "work_iq_tools_reference_usd": f"{credits * D('0.01'):.4f}",
        "fabric_hypothetical_allocation_usd":
            f"{(ai_query + discovery) / 3600 * D('0.18'):.4f}",
        "complete_workflow_cost_usd": None,
        "unpriced": [
            "Chat/Context", "query engines", "ontology reasoning",
            "OneLake", "Foundry model or PTU", "AI Search", "tools/compute",
        ],
    }


usage = {
    "tools_calls": 20, "fabric_uncached_tokens": 2000,
    "fabric_cached_tokens": 0, "fabric_output_tokens": 500,
    "discovery_reads": 1, "foundry_uncached_tokens": 1500,
    "foundry_cached_tokens": 0, "foundry_output_tokens": 250,
}
print(json.dumps(attribute_partial("sinistro-demo-001", usage, "standard"),
                 indent=2))

Example output, checked by local execution:

{
  "trace_id": "sinistro-demo-001",
  "basis": "illustrative",
  "work_iq_credits": "2.0",
  "fabric_ai_query_cu_s": "400",
  "fabric_discovery_cu_s": "1000",
  "foundry_mode": "standard",
  "foundry_tokens": {"uncached_input": 1500, "cached_input": 0, "output": 250},
  "work_iq_tools_reference_usd": "0.0200",
  "fabric_hypothetical_allocation_usd": "0.0700",
  "complete_workflow_cost_usd": null,
  "unpriced": [
    "Chat/Context", "query engines", "ontology reasoning",
    "OneLake", "Foundry model or PTU", "AI Search", "tools/compute"
  ]
}

The code validates input and calculates components; it does not call services or reconcile invoices. unpriced lists components to measure or price, when used. For provisioned inference, tokens remain utilization, not a second tariff. Preserve attempts and measurement provenance in a real application; trace_id does not automatically connect dashboards.

Who owns the budget and the limit?

Define three responsibilities: the Microsoft 365 administrator for credit policies; the capacity administrator for Fabric; and the resource/deployment owner for Foundry and AI Search. One person can hold several roles, but the workflow needs an accountable owner.

Use application correlation, with service, operation, attempts, and consumption provenance. Dashboards do not necessarily accept the identifier or provide task-level cost; reconcile aggregates.

In the Microsoft 365 admin center, use Copilot > Cost management. In Fabric, follow AI Query, Ontology Discovery, and other operations in Capacity Metrics. In Azure, reconcile resources and billing models.

These dashboards are not an instant brake: the documentation specifies 4-hour refresh for the credit Overview and 2-hour refresh for Consumption. Control retries and operational budgets in the application; disclose failures instead of retrying until the limit is consumed.

Production best practices

  • Version the map: endpoint, operation, price, region, plan, source-check date, and owner.
  • Separate caches: model caching, data agent cached input, and ontology definition caching have different financial effects.
  • Bound fan-out and retry: multiple sources and attempts can increase consumption even when the final answer is short.
  • Allocate without duplication: the full capacity invoice and the agent’s share are not two costs to add to the consolidated total.
  • Treat allowances and preview as conditions: do not project sustained operation as if every call were free.
  • Optimize with quality: reducing context or reasoning is a saving only if it preserves the answer the business needs.

Frequently asked questions (FAQ)

Does Microsoft 365 Copilot remove Work IQ API charges?

Not for custom and third-party agents. The access and pricing page distinguishes those calls from experiences covered by the license.

Does a question cost 0.1 Copilot Credit?

Not necessarily. That is the static component per Tools API call, not a universal question or task tariff.

If Fabric is already paid for, does the agent cost nothing?

The invoice might not increase immediately, but the agent consumes capacity and competes for headroom. Show attributed cost and incremental impact separately.

Do Foundry IQ and the model use the same meter?

No. AI Search measures retrieval; Azure OpenAI meters the LLM when used. Agent, knowledge, and model calls can cross resources and budgets.

Conclusion

Architecture decides where work happens; the meter decides how it appears on the bill. Before choosing the cheapest model, identify the calls it will trigger. A reliable budget preserves original units, converts using the correct plan, allocates capacity, and names the owner accountable for growth.

Official references

👉 If you are composing an agent with Microsoft 365, Fabric, and Foundry — especially on shared capacity, this is the point to map the bill before expanding usage. Want to discuss agent FinOps? Reach out on LinkedIn.

Leave a Reply