Skip to main content

Avoid Azure AI Search billing surprises with semantic ranker and retrieval cost controls.

Pre-Upgrade FixAzure AI SearchREST 2026-04-01knowledgeRetrievalFoundry IQ

Splitting the Bill: Isolating Semantic Ranker Costs from
Agentic Retrieval Plans in Azure AI Search

One property used to control the billing consent for two very different features. That consolidation ended with REST API version 2026-04-01 — and if your service is about to migrate to it, the consent you signed for semantic ranker does not carry over to agentic retrieval. Miss this transition and one of two things happens: the ranker keeps billing while agentic retrieval silently falls to Free (breaking Foundry IQ), or agentic retrieval bills on capacity you thought was still under the single old switch.

The failure signature this guide resolves
# Microsoft's own migration warning, from the "Enable or Disable Agentic
# Retrieval Billing" documentation, restated exactly as it applies to you:
#
#   "If you previously relied on semanticSearch to enable paid agentic
#    retrieval usage, you must explicitly set knowledgeRetrieval to
#    standard before you migrate agentic retrieval workloads to Search
#    Service REST API version 2026-04-01 or later. Existing
#    semanticSearch=standard consent doesn't carry over to
#    knowledgeRetrieval."

# What that produces in practice — TWO opposite failure modes:

# ─── FAILURE MODE A ── Foundry IQ knowledge base returns nothing paid ──
POST /agents/{agent-name}/retrieve?api-version=2026-04-01
{
  "messages": [ { "role": "user", "content": "..." } ]
}
HTTP/1.1 403 Forbidden
{
  "error": {
    "code":    "FeatureNotEnabled",
    "message": "Agentic retrieval requires the 'knowledgeRetrieval'
               billing property to be set to 'standard'.
               Current value: 'free' (default).
               Free quota is exhausted."
  }
}
# → Foundry IQ hard-stops the moment monthly free allowance runs out.

# ─── FAILURE MODE B ── surprise bill after a portal action ────────────
# Team went to Portal → Premium features → Semantic ranker: Standard.
# Portal uses REST 2025-11-01-preview, which sets semanticSearch,
# and (per Microsoft's own note) ALSO affects agentic retrieval billing.

az cost management query ... --timeframe MonthToDate
{
  "Meter":                                                       "Cost"
  "Semantic ranker · Standard · queries"                       $  1,240
  "Knowledge retrieval · agentic reasoning tokens"             $ 18,600   ← unexpected
  "Knowledge retrieval · query planning + answer formulation"  $  4,110   ← unexpected
}
# → You enabled one plan, the portal quietly enabled another.

Symptom: Either agentic retrieval silently downgrades to the free tier the moment monthly allowance is exhausted (breaking Foundry IQ), or an intended semantic-ranker plan change unexpectedly enables agentic retrieval billing on top of it.  Failure point: Two features that share one billing property in REST 2025-11-01-preview and earlier were separated into two independent properties in 2026-04-01 — with no automatic migration of the old consent.  Default platform behaviour: The default value of knowledgeRetrieval is free. Existing semanticSearch=standard does not propagate.

2026-04-01
The Search Service REST API version where semanticSearch and knowledgeRetrieval became independent billing properties
free (default)
The default value of knowledgeRetrieval — set at service creation. Nothing you already have promotes to standard on your behalf
4 line items
Agentic retrieval bills across FOUR meters: search-side agentic reasoning + query planning + answer formulation, plus separate PAYG on Azure OpenAI
2026-03-01-preview
The Search Management REST API version needed to set the new properties. Different from the data-plane REST version

Azure AI Search has quietly become two products stapled together. The old one — a search index with BM25, keyword, hybrid, and vector queries, and an optional Microsoft-hosted reranker called semantic ranker — is the one your team probably built with. The new one is agentic retrieval: a multi-query pipeline that uses an LLM to plan subqueries, runs them in parallel against knowledge bases, semantically reranks each of them, and merges the results. They share a service, they share indexes, and until recently they shared a single billing property. That last part changed with REST API version 2026-04-01, and the change is exactly the kind of technical detail that costs money quietly. The old consent doesn't carry over. The default is Free. And the portal still uses an older API that behaves like the old world. So the pre-upgrade window is the moment to get this right — before the platform decides for you.

Figure 1 — One property became two: the billing switch topology before and after REST 2026-04-01
BEFORE — REST API 2025-11-01-preview and earlier (one switch for two features)semanticSearch= "standard"(ONE property)SEMANTIC RANKER billingAGENTIC RETRIEVAL billingOne consent enables BOTH.No way to enable ranker whilekeeping agentic retrieval free —or vice versa.AFTER — REST API 2026-04-01 and later (billing consent is separated)semanticSearchindependentfree | standardSEMANTIC RANKER billingknowledgeRetrievalindependent · NEWfree | standardAGENTIC RETRIEVAL billingTwo independent switches.Old semanticSearch=standarddoes NOT carry over.knowledgeRetrieval default:FREE — you must explicitlypromote it to standard, andthe portal (still on the old API)will NOT do this for you.
Before REST 2026-04-01, one property controlled the paid consent for both semantic ranker and agentic retrieval. After 2026-04-01, they are two independent properties, and the old consent does not migrate. The default value of the new knowledgeRetrieval property is free, so any workload that depended on the shared switch will hit its free-tier ceiling and stop working — unless you explicitly promote it before the upgrade.
01The Property Split: One Switch Became TwoRoot Cause

The change is small, and it is the whole story. Before 2026-04-01, a single Search Management REST property — semanticSearch, with values "free" or "standard" — controlled billing consent for both semantic ranker and paid agentic retrieval on a search service. From 2026-04-01 forward, that property controls only semantic ranker, and a new property — knowledgeRetrieval — controls agentic retrieval independently. Both features can now be Free or Standard in any combination.

VersionProperty controlling semantic rankerProperty controlling agentic retrieval
≤ 2025-11-01-previewsemanticSearchsemanticSearch (same property — one switch, two features)
≥ 2026-04-01semanticSearch (now scoped to ranker only)knowledgeRetrieval (NEW, independent)

What Microsoft is careful to spell out — and worth reading verbatim from their own documentation — is what happens to your existing consent when the upgrade occurs. It does not carry over. If you previously relied on semanticSearch=standard to enable paid agentic retrieval, you must explicitly set knowledgeRetrieval=standard before migrating agentic retrieval workloads to the new API version.

Which "REST API" version does this refer to?

There are two REST APIs involved and it is easy to confuse them. The Search Service (data-plane) REST API is the one your application code calls to run queries, index documents, and hit knowledge bases — that is where 2026-04-01 is the version at which the billing split takes effect for agentic retrieval workloads. The Search Management REST API is a different API, and is the one you use to set the semanticSearch and knowledgeRetrieval properties themselves. As of writing you set them via version 2026-03-01-preview. Do not mix them up — a PATCH against the data-plane API version to change billing consent will not work.

02Agentic Retrieval Actually Bills on Four Line ItemsConcept

Before the fix, understand what you are actually being billed for. Agentic retrieval is not a single meter — it decomposes into four distinct billable operations, and they land on two different services on your invoice.

MeterWhat it countsBilled by
Semantic rerankingReranking passes per subquery, inside the agentic pipelineAzure AI Search — semantic ranker meter
Agentic reasoning tokensTokens consumed by the multi-turn planner reasoning about your queryAzure AI Search — knowledge retrieval meter
Query planning + answer formulationThe LLM calls that decompose your question into subqueries and (optionally) synthesise the final answerAzure OpenAI — standard PAYG on your assigned model
Remote knowledge source accessSeparate charges for SharePoint (remote) and Web knowledge sourcesAzure AI Search — per remote source

The financial architecture here is the point of this article: your semantic ranker line item is completely separate from your agentic retrieval line items, and both are separate from the Azure OpenAI PAYG your knowledge base drives on the assigned model. Once you know that, the reason Microsoft split the consent property makes sense — it is so you can enable one without enabling the other, and see them independently on your bill.

Only GPT-4o, GPT-4.1, and GPT-5 series are supported for query planning

The LLM you assign to the knowledge base drives the query planning and (optionally) answer formulation. As Microsoft's docs are explicit, the only supported model families for that role are gpt-4o, gpt-4.1, and gpt-5 series. This is not a soft "recommended" list — it is what the pipeline will accept. Point your knowledge base at gpt-4o-mini or one of the smaller supported variants when planning cost matters; the answer synthesis LLM can be a different, larger model called downstream by your own application.

03The Portal Behaviour Caveat (Read This Before Clicking Anything)Trap

This is where teams that thought they were being careful end up with surprise bills. The Azure portal has not yet caught up with the property split. The portal's Premium features blade currently uses Search Service REST API version 2025-11-01-preview — the old API where semanticSearch is still the single shared property. So when you go to the portal and toggle "Semantic ranker: Standard," you are setting a property that in your data-plane world now only affects the ranker, but that Microsoft's own note in the documentation flags: "Currently, using the portal to switch plans also affects agentic retrieval billing."

ActionWhat you probably thought would happenWhat actually happens today
Portal → Premium features → Semantic ranker: StandardEnable semantic ranker billing onlySets semanticSearch=standard via the old API — also affects agentic retrieval billing
Portal → Premium features → Knowledge retrieval: StandardA distinct button that enables agentic retrieval onlyPortal is being updated. Behaviour of the two toggles may still overlap during transition
Do nothing; migrate the data-plane API to 2026-04-01Existing consent carries overConsent does not carry over. knowledgeRetrieval defaults to free. Free quota then depletes
Use the Management REST API, not the portal, for the migration

The safe move during this transition window is to bypass the portal entirely for billing changes and go straight to the Management REST API at version 2026-03-01-preview. The API is precise about which property you are setting and does not have the "also affects the other feature" side-effect. Section 6 walks through the exact PATCH calls. You can and should go back to the portal for everything else — this specific decision is the one to do in code.

Architectural Topology: Failing vs Remediated

AspectFailing configuration (default drift)Remediated configuration (fix)
Consent property (semantic ranker)semanticSearch — value implicit or set through portalsemanticSearch — explicitly set to free or standard via Management REST
Consent property (agentic retrieval)Not set — inherits free default at upgrade timeknowledgeRetrieval — explicitly set to free or standard via Management REST
Migration pathData-plane API upgraded to 2026-04-01 with no billing consent changesBoth properties set to intended state BEFORE data-plane migration to 2026-04-01
Change surfacePortal — uses old API, side-effects the other featureManagement REST at 2026-03-01-preview — precise, single-property
Cost visibilityLine items co-mingle on the bill; hard to attributeCost tags per feature; alerts scoped per meter
Foundry IQ dependencyAssumed to "just work" post-upgradeExplicit dependency on knowledgeRetrieval=standard documented and monitored
Access ruleAnyone with Contributor can flip either plan via portalAzure Policy denies portal-driven changes; only pipeline can set via REST
Free-quota exhaustionSilent 403 in productionAlert fires at 80% free quota consumption per feature
05Fix 1 — Audit the Current State Before You Touch AnythingDiagnosis

Before you set anything, know where you are. Read both properties on every search service in your subscription, so the change you make is deliberate rather than a guess.

Azure CLI + Management REST — read the current state on every service# Enumerate all search services in a subscription, one line per service, # showing both billing properties. Uses the Management REST API — the same # version you use to SET them (2026-03-01-preview) — for consistency. subscription="00000000-0000-0000-0000-000000000000" token=$(az account get-access-token --query accessToken -o tsv) az search service list --query "[].{rg:resourceGroup, name:name}" -o tsv \ | while read -r rg name; do curl -s -H "Authorization: Bearer $token" \ "https://management.azure.com/subscriptions/$subscription/resourceGroups/$rg/providers/Microsoft.Search/searchServices/$name?api-version=2026-03-01-preview" \ | jq -r --arg n "$name" '. as $s | "\($n)\t\($s.properties.semanticSearch // "free")\t\($s.properties.knowledgeRetrieval // "free")"' done # Output columns: SERVICE_NAME | semanticSearch | knowledgeRetrieval # The two columns you want to look at are the last two. Neither being set # explicitly usually means "free" (the default).
The four states — read the table before you decide| semanticSearch | knowledgeRetrieval | Meaning | |----------------|--------------------|---------------------------------------------| | free | free | Both features gated by free monthly quota | | standard | free | Ranker paid; agentic retrieval free-only | | free | standard | Ranker free-only; agentic retrieval paid | | standard | standard | Both features paid (like the old combined) |
Match your INTENT to your CURRENT state before you change anything

The point of the audit is not to change everything to standard; it is to make the current state deliberate. A dev/test search service should almost certainly stay at free/free. A production Foundry IQ knowledge base needs knowledgeRetrieval=standard. A production classic RAG that never uses agentic retrieval should have knowledgeRetrieval=free and semanticSearch=standard — enabling agentic retrieval on it "just in case" is unnecessary spend. Match your state to your intent, service by service.

06Fix 2 — Explicitly Set Both Properties via Management RESTThe Fix

This is the fix. Two PATCH calls, one per property, using the Management REST API version 2026-03-01-preview. Do them before the workload migrates to data-plane REST 2026-04-01, so the state is deliberate when the split takes effect.

HTTP — set semanticSearch (semantic ranker billing)PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{rg}/providers/Microsoft.Search/searchServices/{search-service-name}?api-version=2026-03-01-preview Content-Type: application/json Authorization: Bearer {token} { "properties": { "semanticSearch": "standard" // or "free" } }
HTTP — set knowledgeRetrieval (agentic retrieval billing) INDEPENDENTLYPATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{rg}/providers/Microsoft.Search/searchServices/{search-service-name}?api-version=2026-03-01-preview Content-Type: application/json Authorization: Bearer {token} { "properties": { "knowledgeRetrieval": "standard" // or "free" } } # NOTE: the "disabled" value is no longer valid in Search Management REST # API version 2026-03-01-preview and later. Only "free" and "standard".
Azure CLI — set both properties in a scripted loop across servicessubscription="00000000-0000-0000-0000-000000000000" token=$(az account get-access-token --query accessToken -o tsv) api="2026-03-01-preview" set_billing() { local rg=$1 name=$2 semantic=$3 knowledge=$4 curl -s -X PATCH \ -H "Authorization: Bearer $token" \ -H "Content-Type: application/json" \ "https://management.azure.com/subscriptions/$subscription/resourceGroups/$rg/providers/Microsoft.Search/searchServices/$name?api-version=$api" \ -d "{\"properties\":{\"semanticSearch\":\"$semantic\",\"knowledgeRetrieval\":\"$knowledge\"}}" \ | jq '{name:.name, semanticSearch:.properties.semanticSearch, knowledgeRetrieval:.properties.knowledgeRetrieval}' } # Production RAG service - ranker paid, agentic retrieval also paid (Foundry IQ): set_billing rg-search-prod search-prod-eastus standard standard # Classic prod - ranker only, no agentic retrieval: set_billing rg-search-prod search-classic-westus standard free # Dev / test - keep everything free: set_billing rg-search-dev search-dev-eastus free free
Change ONE property at a time when you're unsure

The PATCH above sets both properties in a single call, which is efficient but harder to roll back if something misbehaves. When you are doing this the first time on a production service, do the semantic ranker property in one PATCH and the knowledge retrieval property in a second — that way if a downstream monitor fires you know precisely which switch caused it. Once you have run the pattern a few times, batching is fine.

Bicep / Terraform: express intent in code, not in a portal click

If you provision search services via IaC, both properties belong in the resource definition, not as a post-hoc PATCH. In Bicep, add semanticSearch and knowledgeRetrieval under properties on Microsoft.Search/searchServices. Provider support arrives in AzureRM and AzAPI as the property matures — for anything not yet in the mainline resource, use AzAPI (Terraform) or Microsoft.Resources/deploymentScripts (Bicep) to make the PATCH call from within your pipeline. The point is: whichever state you land on, encode it, so a future portal click can't undo it silently.

Figure 2 — The pre-migration decision flow: what to set before your data-plane hits 2026-04-01
PRE-MIGRATION STATE MACHINE — do this ONCE per search service, then upgrade the data-plane APIAudit current state (Section 5)Do queries usequeryType=semantic?YESNOsemanticSearch ="standard"semanticSearch ="free"Uses knowledge base /agentic retrieval /Foundry IQ?YESNOknowledgeRetrieval ="standard"knowledgeRetrieval ="free"NOW safe to migrate data-plane calls to REST API 2026-04-01
Two yes/no decisions, four possible end-states — decide each per search service based on what workloads actually run against it, not on what "might" run against it later. Only after both properties are set deliberately is it safe to point application code at the new data-plane API version.
07Fix 3 — Guardrails: Alerts, Policy, and Cost IsolationPrevention

Setting the properties once is the fix. Keeping them set is the guardrail. Three cheap controls make it robust:

1. Cost alerts, per feature, per meter

Both features have Free plans with a monthly allowance and Standard plans that are pay-as-you-go past the allowance. That means the single most useful alert is one that fires at ~80% of your free-quota consumption for each feature — before the paid meter starts.

Azure CLI — budget alert scoped to the Azure AI Search resource# Two budgets, one per feature — the meter names below use the values # that appear in your Cost Management exports; adjust to match your bill. az consumption budget create \ --resource-group rg-search-prod \ --budget-name search-semantic-ranker-monthly \ --amount 500 \ --time-grain Monthly \ --category cost \ --start-date $(date +%Y-%m-01) \ --end-date $(date -d "+1 year" +%Y-%m-%d) \ --meter-filter "Search Query · Semantic Ranker" \ --notifications-enabled true \ --contact-emails oncall-search@example.com \ --threshold 80 az consumption budget create \ --resource-group rg-search-prod \ --budget-name search-knowledge-retrieval-monthly \ --amount 2000 \ --time-grain Monthly \ --category cost \ --start-date $(date +%Y-%m-01) \ --end-date $(date -d "+1 year" +%Y-%m-%d) \ --meter-filter "Knowledge Retrieval · Agentic Reasoning Tokens" \ --notifications-enabled true \ --contact-emails oncall-search@example.com \ --threshold 80

2. Azure Policy to prevent portal drift

Because the portal still uses the older API, a well-meaning teammate can flip a plan and unintentionally affect both features. An Azure Policy that audits (or denies, if you're feeling brave) any change to properties.semanticSearch or properties.knowledgeRetrieval outside a pipeline gives you a paper trail. In audit mode, the compliance dashboard tells you when something drifted; in deny mode, only your IaC pipeline can change it.

3. Tags for cost attribution

Neither of the two premium meters lands on your bill with a "team" or "cost centre" label unless you put one there. Tag the search service resource with costCentre, workload, and featureIntent (classic-rag, agentic-only, foundry-iq), and pipe those tags into your Cost Management exports. Splitting the properties bought you separate line items; tags let you attribute them.

Alert on the AOAI side too — that's the other half of agentic retrieval spend

Agentic retrieval bills across two services: Azure AI Search for reranking and reasoning tokens, and Azure OpenAI for the query planner + answer formulation model calls. If you only monitor the AI Search side, you'll miss a hot planning workload that is burning Azure OpenAI tokens without changing your Search bill much. Add a matching alert on the AOAI resource for the specific model deployment your knowledge base is pointed at.

08The Foundry IQ Special CaseHard Dep

If your service backs Microsoft Foundry IQ — the managed knowledge layer used by agents in the Foundry portal — the setting is not optional. Foundry IQ knowledge bases require a subscription and a standard knowledgeRetrieval plan. This is Microsoft's own published requirement, not an operational guideline.

Practically:

  • Any search service you point at from a Foundry IQ knowledge source must have knowledgeRetrieval=standard.
  • The billing appears under "Azure AI Search" on the bill, even when the caller is Foundry IQ.
  • Free-tier usage still gets a monthly allowance, but as an integration path for real agent workloads it will hit the ceiling in hours, not weeks.
  • Turning knowledgeRetrieval back to free "to save money" on a service that Foundry IQ agents depend on returns a 403 the moment allowance runs out. Foundry IQ knowledge bases don't degrade gracefully — they hard-stop.
Cross-service billing: where agentic retrieval bills, not who caused it

Foundry IQ agentic retrieval activity is billed under Azure AI Search regardless of which Foundry portal, app, or agent triggered it. So on the invoice, you see a bigger Search bill — not a Foundry IQ line item. This is not a design flaw, but it does mean the finance team's dashboard needs a note attaching the Search spike to the responsible workload upstream, or the wrong team gets asked to explain the number.

09Anti-Patterns: "Fixes" That Move the Bill in the Wrong DirectionTraps

Because the property split looks simple, the wrong instincts are strong. These are the reactions that make the situation worse.

Anti-patternWhy it feels rightWhy it isn't
Set both to standard "to be safe""I don't want to break anything post-upgrade"You've now enabled a paid meter that may have been free until now. If the workload never uses agentic retrieval, you'll pay for a monthly allowance you don't touch and beyond
Set both to free "to cut costs""We were spending a lot, this must save money"Silent 403s in production as soon as the free allowance is exhausted. Foundry IQ will hard-stop
Toggle "Semantic ranker: Standard" in the portal"It's the same UI I always use"The portal still calls the old REST API. On some services it will also enable agentic retrieval billing as a side-effect — the exact thing this split was created to prevent
Leave everything unset and see what happens"Microsoft will migrate the consent"They don't. The docs are explicit: existing semanticSearch=standard consent does not carry over to knowledgeRetrieval
Fix production first, dev/test later"Prod is where the money is"Dev/test on standard is a common source of quiet spend — nobody watches the bill on the sandbox account. Fix the whole subscription in one pass
Use "disabled" to fully block a feature"That value used to work""disabled" is no longer valid in Search Management REST 2026-03-01-preview and later. Only "free" and "standard". Use "free" plus a query-side guard rail if you need to prevent usage

Validation & Verification: Confirm the Fix

Two failure modes are symmetric: the properties look right and the bill is wrong, or the properties look wrong and the workload starts failing. Verify both.

Step 1 — Confirm the properties are set to what you intended# Read back BOTH properties on the target service and eyeball them. subscription="00000000-0000-0000-0000-000000000000" rg="rg-search-prod"; name="search-prod-eastus" token=$(az account get-access-token --query accessToken -o tsv) curl -s -H "Authorization: Bearer $token" \ "https://management.azure.com/subscriptions/$subscription/resourceGroups/$rg/providers/Microsoft.Search/searchServices/$name?api-version=2026-03-01-preview" \ | jq '{name, semanticSearch: .properties.semanticSearch, knowledgeRetrieval: .properties.knowledgeRetrieval}' # PASS: both fields present, with the value you intended for that service. # FAIL: knowledgeRetrieval missing or set to "free" when you meant "standard".
Step 2 — Prove semantic ranker responds independently of agentic retrieval# A query that uses the classic ranker only. Should succeed if semanticSearch # is either "standard" or "free" (until the free monthly allowance is out). POST https://{search-service-name}.search.windows.net/indexes/{index}/docs/search?api-version=2026-04-01 Content-Type: application/json api-key: {query-key} { "search": "pet friendly hotels in New York", "queryType": "semantic", "semanticConfiguration": "default", "top": 10 } # Reminder from Microsoft: charges for semantic ranker only occur when the # search string is NON-EMPTY. A "search":"*" with queryType=semantic is # NOT billed against semantic ranker (though other charges apply). # PASS: 200 OK with results including @search.rerankerScore.
Step 3 — Prove agentic retrieval works — or fails — as configured# If knowledgeRetrieval=standard, this should succeed for real workloads. # If knowledgeRetrieval=free, this will succeed within the free allowance # and return 403 with FeatureNotEnabled once the allowance is exhausted. POST https://{search-service-name}.search.windows.net/agents/{agent-name}/retrieve?api-version=2026-04-01 Content-Type: application/json api-key: {query-key} { "messages": [ { "role": "user", "content": "what does our refund policy say for opened items?" } ], "targetIndexParams": [ { "indexName": "kb-policies", "filterAddOn": "" } ] } # PASS (standard): 200 OK with unified merged response + references # PASS (free): 200 OK — but the free allowance is finite # FAIL: 403 FeatureNotEnabled once free quota is exhausted
What "fixed" actually means here

Four conditions must hold together. One: the audit output shows both semanticSearch and knowledgeRetrieval set to their intended values on every search service in scope. Two: your data-plane clients have migrated to REST 2026-04-01 and both feature tests above return the response you expected for the configured plan. Three: budget alerts fire on each meter individually — proving the line items are actually separated on the bill. Four: your IaC has the properties encoded, so a future portal click cannot silently undo the fix. Miss any of the four and the win is fragile.

Key Takeaways

Two properties, not one. From REST 2026-04-01, semanticSearch controls semantic ranker billing and knowledgeRetrieval controls agentic retrieval billing — independently.
Old consent doesn't carry over. An existing semanticSearch=standard does not promote knowledgeRetrieval to standard. The default is free. Set it explicitly before the data-plane migration.
Use the Management REST API, not the portal. The portal still calls the older data-plane API and, per Microsoft's own note, changing a plan there can also affect agentic retrieval billing as a side-effect. Management REST at 2026-03-01-preview is precise.
Agentic retrieval bills four meters. Search-side reranking, agentic reasoning tokens, remote knowledge source access, plus Azure OpenAI PAYG for query planning and answer formulation. Alert on all four.
Foundry IQ needs knowledgeRetrieval=standard. That's the published dependency; without it the pipeline hard-stops the moment the monthly free allowance is exhausted. Not degradation — 403.
Only gpt-4o, gpt-4.1, and gpt-5 series are supported for query planning. Choose the cheapest of these that meets your accuracy target — the answer synthesis model can be different, called by your own code.
Match state to intent, service by service. Dev & test: usually free/free. Classic RAG: standard/free. Foundry IQ backend: standard/standard. Encoding this in IaC prevents portal drift.

Frequently Asked Questions

Does my existing semanticSearch=standard automatically enable agentic retrieval billing after the REST API 2026-04-01 upgrade?
No, and this is the specific transition point Microsoft's documentation calls out. In REST 2025-11-01-preview and earlier, semanticSearch was a single property controlling paid consent for both semantic ranker and agentic retrieval. From REST 2026-04-01, it only controls semantic ranker; agentic retrieval billing consent is a separate property called knowledgeRetrieval. The existing semanticSearch=standard value does not carry over to knowledgeRetrieval. The default value of knowledgeRetrieval is free. If your workload used the old shared property to enable paid agentic retrieval, you must explicitly PATCH knowledgeRetrieval to standard before migrating that workload to the new API version, or the free allowance will exhaust and the workload will start returning 403.
Can I use the Azure portal to set these two properties independently?
Not reliably at the time of writing. Microsoft's own documentation includes a note that "currently, using the portal to switch plans also affects agentic retrieval billing." The portal calls the older Search Service REST API version 2025-11-01-preview, where semanticSearch is still the shared property. So a portal toggle labeled "Semantic ranker: Standard" can, on some services, also flip agentic retrieval billing — the exact side-effect this split was created to prevent. The safe path during the transition is to use the Search Management REST API at version 2026-03-01-preview — a PATCH call per property — which affects only the property you set. Once the portal is updated to the new API, the toggles will match the underlying model.
What does agentic retrieval actually charge me for, and can I see the line items separately?
Agentic retrieval bills across four distinct meters, and they land on two services. On Azure AI Search: (1) semantic reranking of each subquery inside the agentic pipeline; (2) agentic reasoning tokens consumed by the multi-turn planner; (3) any remote knowledge sources you use (SharePoint remote, Web) charged per source. On Azure OpenAI: pay-as-you-go input and output tokens on the model you assigned to the knowledge base, covering both query planning and (optionally) answer formulation. Only gpt-4o, gpt-4.1, and gpt-5 series models are supported for the planner. Yes, all four meters are separable in Cost Management — the point of the property split is that you can enable and monitor them independently.
If I run Foundry IQ, do I need knowledgeRetrieval=standard?
Yes. Foundry IQ knowledge bases require a subscription and a standard knowledgeRetrieval plan on the backing Azure AI Search service; that is Microsoft's own published requirement. The Free plan monthly allowance is intended for evaluation and small-scale exploration, not for production agent workloads. Practically, the moment your Foundry IQ agents cross the free-quota ceiling for the month, the pipeline returns 403 with FeatureNotEnabled — it does not degrade gracefully. If Foundry IQ is a production dependency, set knowledgeRetrieval=standard before the upgrade, encode it in your IaC, and set a budget alert on the agentic reasoning tokens meter so a runaway session doesn't ambush the finance team.

Popular posts from this blog

Learn how to use Azure Chaos Studio to simulate data center outages, test Azure OpenAI failover, and validate AI app resiliency using KQL and CLI workflows

Resiliency Testing Chaos Studio Zone Down Azure OpenAI Failover Testing AI Resiliency: Using Azure Chaos Studio to Simulate Data Center Outages on Your LLM Every multi-region Azure OpenAI architecture diagram has a failover arrow drawn on it. Almost none of them have ever actually been triggered. The arrow is a hypothesis, confirmed only by a real outage — unless you deliberately cause a controlled one first, on your own schedule, with a rollback plan, instead of finding out during an incident that the failover you designed never quite worked the way the diagram promised. The failure signature this guide resolves # The gap this article closes — a real architecture review finding: Design doc, page 4: "In the event of a regional outage, Azure Front Door automatically routes traffic to the secondary Azure OpenAI deployment in West Europe, with an expected failover time under 60 seconds." Verification performed to support this claim: NONE. Last time this path was ac...

Improve AI application performance by reducing latency, optimizing embeddings, and lowering cloud inference costs

Performance Fix Foundry Local 1.2 Linux ARM64 Embeddings Offline ASR The Edge Latency Drop: Fixing Latency Spikes by Offloading Embeddings to Foundry Local 1.2 You are paying a full cloud round trip — network, TLS, queue, throttle risk — to turn a twelve-word search query into a vector. That is the most expensive way possible to do one of the cheapest computations in your stack. Foundry Local 1.2 now runs on Linux ARM64, which means embeddings and speech recognition can happen on a Raspberry Pi, a Jetson, or a Graviton instance — offline, unmetered, and in single-digit milliseconds. The failure signature this guide resolves # Application Insights — the embedding call, not the LLM, is your tail latency: name p50 p95 p99 calls/day POST /embeddings (cloud) 89 ms 412 ms 3,847 ms 1,240,000 POST /chat/completions (cloud) 940 ms 1,720 ms 2,910 ms 38,000 ^^^^^^^^ ...

Learn how to select Azure Files and Blob storage tiers, avoid early deletion fees, model costs, and automate lifecycle management for large file migrations.

Choosing the Right Azure Storage Tier for Large File Migrations The complete decision framework for storage tier selection during large file migrations — Azure Files tiers, Blob tiers, cost modelling, early deletion traps, lifecycle automation, and the 2026 changes that affect every migration running today. By Francis Avorgbedor | Azure Engineer  ·  July 14, 2026  ·  18 min read  ·  Storage Tiers · Cost Optimisation · Migration FA Francis Avorgbedor Azure Engineer  ·  SEVENAI  ·  Azure Field Notes 9 Distinct Azure storage tiers across Files and Blob — most engineers know only 3 15hrs Archive tier rehydration time at standard priority — the delay teams forget to plan for 128KB Minimum billable object size for Cool/Cold/Archive from July 2026 — a 32× trap for small files 70% How much retrieval and transaction fees add to a theoretical Archive storage bill The most expensive mistake I see on large Azure file migrations is not choosing the w...

Find the hidden Windows 10 system files consuming up to 500GB, including hibernation, shadow copies, backups, and WinSxS, with safe cleanup steps.

  The 500GB System File That Eats Your Hard Drive Something on your Windows 10 drive is consuming hundreds of gigabytes and the normal tools cannot find it. This guide identifies every known culprit — from hibernation files and shadow copies to runaway backups and the Windows component store — and tells you exactly what is safe to delete, what to leave alone, and what the commands actually do.

Learn safe methods to reset Azure virtual machines using managed disks while preserving critical workloads

How to Reset an Azure Virtual Machine to Factory Settings Using a Managed Disk Azure does not have a single "factory reset" button. What it does have is something better: the OS Disk Swap — a method that swaps out the corrupted or misconfigured OS disk for a clean Windows Server managed disk without deleting the VM, its NICs, its IP addresses, or any attached data disks. Here is how it works, when to use it, and the exact steps to execute it safely. FA Francis Avorgbedor Azure Engineer July 16, 2026 15 min read Azure VMs · Windows Server · Real-World Fix 3 Methods to achieve a clean Windows Server installation on an existing Azure VM ~15min Typical OS Disk Swap duration — VM retains its NICs, IPs, and data disks throughout 0 Data disks affected by an OS Disk Swap — data disks remain attached and untouched 1 Snapshot of the original OS disk you must take before starting — no exceptions Introduction Why Azure Does Not Have a Simple Factory Reset — and What to Do Instead On a ph...

Determine Windows 11 compatibility, upgrade requirements, costs, and performance expectations on older hardware

Can I Update My Old Computer to Windows 11 — and How Much Will It Cost? Your i7, 16GB RAM, 512GB SSD machine is powerful enough to run Windows 11 comfortably. The TPM 2.0 and Secure Boot wall is a security checkbox, not a performance ceiling. Here are two proven ways to get past it, what each one costs, and what you are trading away by doing so. $0 Cost of the Windows 11 licence if your existing Windows 10 is genuine — the upgrade remains free in 2026 2 Proven methods to bypass TPM 2.0 and Secure Boot — Rufus (easy) and Registry edit (manual) 25H2 Current Windows 11 version — all known bypass methods tested and confirmed working as of July 2026 Oct 2025 Windows 10 end of life — no more security updates. Staying on Windows 10 now carries real risk. First — Check Your BIOS Before Anything Else You Might Not Actually Need a Bypass Before running any bypass, open your BIOS and look at two settings. Many computers that fail the Windows 11 compatibility check have TPM 2.0 present in the hard...

Solve common AKS issues with practical troubleshooting techniques for networking, scaling, upgrades, and workloads

Troubleshooting Guide AKS Kubernetes Real Solutions kubectl Azure Kubernetes Service (AKS) Troubleshooting Guide: Real Solutions to Common Problems CrashLoopBackOff at 2am. Pods stuck Pending with no obvious cause. Nodes going NotReady mid-deployment. DNS resolution silently failing in production. Every AKS engineer encounters these — the difference between engineers who panic and engineers who stay calm is knowing the exact sequence of diagnostic commands to run. This guide gives you that sequence, the root cause analysis for each failure mode, and the fix. 3 commands 90% of AKS problems are diagnosed with the same three kubectl commands: describe pod, logs --previous, and get events — in that order, every time Exit 137 The exit code that tells you everything: container killed by SIGKILL — either the Linux OOM killer (memory limit exceeded) or kubelet after grace period expired 5 min The CrashLoopBackOff ceiling: Kubernetes applies exponential backoff (10s → 20s → 40s → 80s → 160s → 3...

Step-by-step guide to deploying scalable AI chatbots on Azure with OpenAI and App Service

Step-by-Step Guide Azure OpenAI App Service Production Python How to Deploy an AI Chatbot on Azure Using Azure OpenAI and App Service From zero to a production-grade AI chatbot: provision Azure OpenAI, write a streaming Flask API backend, deploy it on Azure App Service with Managed Identity, wire in conversation history and content safety, and instrument it with Application Insights — all with complete code and Terraform IaC. No API keys in environment variables. No hardcoded secrets. No half-finished PoC patterns. 7 phases This guide covers the full deployment lifecycle: architecture design → resource provisioning → backend code → App Service deployment → streaming → security → monitoring Zero keys The chatbot authenticates to Azure OpenAI using Managed Identity and DefaultAzureCredential — no API keys stored in environment variables, Key Vault, or code SSE Server-Sent Events stream GPT tokens to the browser as they generate — the same token-by-token typing effect users expect from pr...