Commitment Management lets nOps buy and manage Azure Reservations and Savings Plans for you. nOps watches your usage, recommends commitment levels, and buys when it finds savings.
What is the difference between Reservations and Savings Plans?
Reservations: discounts on a specific resource type (for example Virtual Machines or SQL Database) in a specific region. They save the most (up to 72%) but are less flexible.
Savings Plans: discounts on an hourly spend commitment across a broader range of compute services. They’re more flexible and save a little less.
nOps manages both to get you the most savings.
What access does nOps need to buy commitments?
nOps staff buy in the Azure portal through Azure Lighthouse. You delegate each subscription purchases are billed to with one template, the nOps Commitment Management delegation. It gives the nOps Customer Access Operators group, in the nOps tenant:
Reader, to see the subscription
Reservation Purchaser and Savings plan Purchaser, to buy commitments billed to it
Your enrollment or billing profile must also allow purchases: on EA, the Reserved Instances and Add Savings Plan policies; on MCA, the billing profile’s Azure Reservation purchases and Azure Savings Plan policies, set to Yes. Commitment Management adds nothing at the tenant, billing, or storage level, and nothing for the nOps.io application.
Where do the commitments nOps buys live?
In the nOps tenant. When nOps staff buy through Lighthouse, Azure creates the reservation or savings plan order in the buyer’s tenant. You still pay for it, because it’s billed to your purchase subscription, and it applies to your resources: shared commitments cover your enrollment or billing profile. You see it in Cost Management + Billing, not under Reservations in your own tenant.If you stop using nOps, nOps moves your reservations to your tenant. Savings plans can’t change tenant after purchase, so they stay in the nOps tenant until they end.
Which subscription should I use?
Any active subscription in your enrollment or billing profile works, including one you already use or one that already has commitments. It must sit under the management group you connected in Savings Analysis. nOps only bills purchases to it. If you prefer to keep purchasing apart from your workloads, create an empty subscription for it.
EA: one subscription in your enrollment. Shared commitments cover every subscription in the enrollment.
MCA: one subscription in each billing profile you want nOps to buy for. Shared commitments cover the subscriptions in that subscription’s billing profile.
Do I grant access once for my billing account, or for each billing profile?
Both, for different things:
Seeing costs and commitments: once, at the billing account. Savings Analysis already gives nOps.io Billing account reader, which covers every billing profile, including ones you add later.
Buying: once per billing profile. Microsoft only lets someone buy a reservation through a subscription where they hold Owner or Reservation Purchaser, even billing account owners. The subscription’s billing profile decides which invoice pays and which subscriptions a shared commitment covers, and a shared commitment never covers another billing profile. So nOps needs one delegated subscription in each billing profile it buys for, and no billing account role replaces that.
With many billing profiles, the wizard lists them all and gives you one command that delegates every subscription at once.
What if a billing profile already has reservations or savings plans?
Set it up the same way. Your existing commitments keep applying and stay where they are, and nOps sees them in the billing data Savings Analysis already reads.If nOps already buys for that billing profile through an earlier nOps delegation, enter the same subscription. Deploying the template updates that delegation in place, and nOps keeps managing what it bought. If Azure rejects the update, remove the old delegation under Service providers and deploy again.
Can nOps exchange or refund commitments?
nOps can exchange or refund the reservations it buys, without extra roles: the buyer owns the order. nOps also makes its operations team a co-owner of every order it buys, including earlier ones, so managing a commitment never depends on one person’s account. Partial exchanges are allowed, and Microsoft limits refunds to USD 50,000 in a rolling 12 months per enrollment or billing profile. Savings plans can’t be canceled, refunded, or exchanged by anyone.Reservations you bought yourself live in your tenant. Lighthouse can’t delegate them, so nOps can’t exchange or refund them there. If you want nOps to manage one, its owner can move it to nOps with Change directory; your nOps contact will walk you through it. Moving it doesn’t change who pays or which subscriptions a shared reservation covers. Savings plans can’t change tenant after purchase, so you keep managing the ones you bought (their scope and renewal).
What happens when I add a billing profile later?
Verify lists the billing profiles nOps has no purchase subscription for, so a new one shows up there. Check connectivity in Settings runs the same check, and you see the list when you open the integration’s Verify step. To include it, open the integration, enter a subscription for the new profile in step 1, deploy the delegation on that subscription, turn on the purchase policies on the new billing profile, and Verify again.
What happens to Savings Analysis while I set this up?
Nothing. Savings Analysis stays active the whole time, even if a Commitment Management check fails. Only Verify turns Commitment Management on. Once it has passed, it turns off only when a Verify finds something missing, such as the delegation or a policy. A read that failed doesn’t change it.
Do I need Inform to view Commitment Inventory?
No. Commitment Inventory is included on every nOps plan when your Azure integration is active. Inform is only required to email or schedule inventory reports.
Commitment Management is the second tier of Azure onboarding. It builds on Savings Analysis and lets nOps:
Buy and manage Azure Reservations for you
Buy and manage Azure Savings Plans for you
Watch utilization and adjust commitment levels
Set up Savings Analysis first. Commitment Management is added to a verified Savings Analysis integration. If you haven’t set it up yet, start with Savings Analysis Setup.
Owner on each subscription you’ll use for purchases, to deploy the delegation.
EA: an Enterprise Administrator, if the purchase policies need turning on.
MCA: a billing profile owner or contributor, if the purchase policies need turning on.
MCA billing account: keep the Billing account reader role on nOps.io from Savings Analysis. Verify uses it to check which billing profile each purchase subscription bills to.
Reader for nOps.io (inherited from your management group)
The nOps Commitment Management Lighthouse delegation for nOps staff: Reader, Reservation Purchaser, and Savings plan Purchaser
EA enrollment, MCA billing account or billing profile
Read-only billing role
Nothing. The purchase policies must allow purchases: Reserved Instances and Add Savings Plan on (EA enrollment), or Azure Reservation purchases and Azure Savings Plan set to Yes (each MCA billing profile you buy for)
Tenant, storage account, nOps.io
No change
Nothing
Earlier versions of this setup asked for Reservation Purchaser and Savings plan Purchaser for nOps.io, Reservations Administrator and Savings Plan Reader at the tenant, EA Purchaser or Billing account contributor, and Owner on the export storage account. None of these are needed now: nOps staff buy through the Lighthouse delegation. If you already have the older “nOps FinOps Management (Dedicated Subscription)” delegation, deploying the new template replaces it. If Azure rejects that, remove the old delegation under Service providers and deploy again. If Commitment Management is already on from the earlier setup, it stays on: open the integration and click Verify Permissions to run the new check. On EA, a service principal holds only one EA billing role. If you gave nOps.io EA Purchaser for the earlier setup, it replaced EnrollmentReader. If you remove EA Purchaser, assign EnrollmentReader to nOps.io again so Savings Analysis keeps its billing access.
In nOps Settings > Cloud Provider Integrations, find your verified Azure integration and click Enable CM. Or click Set Up Commitment Management after Savings Analysis verifies.
2
Enter the subscriptions
The wizard shows the layout for how you connected Savings Analysis:
EA: one subscription. We fill in your Savings Analysis export subscription; change it if you like.
MCA billing account: one row for each billing profile in your billing account. Enter a subscription billed to each profile you want nOps to buy for, and leave the others blank. If you only want some profiles managed, fill in only those. If nOps can’t list your billing profiles, you get a plain list instead: add one subscription per billing profile, and Verify tells you which profile each one bills to.
MCA billing profiles: one row for each billing profile you connected. Enter a subscription billed to that profile, or leave a row blank to skip the profile. To add a profile, connect it in Savings Analysis first.
A subscription bills to one billing profile, so the wizard won’t take the same subscription twice.
3
Click Continue
nOps saves the subscriptions and opens Run Setup.
A subscription’s billing profile is on its Overview page in the Azure portal.
The wizard walks you through two steps, A and B.A. Delegate purchasing to nOpsDo this on every purchase subscription. You need Owner on it.
1
Open the template
In the wizard, click Deploy to Azure. It opens the nOps Commitment Management template in the Azure portal.
2
Deploy it
Select the purchase subscription and any region, then click Review + create > Create. The deployment takes under a minute.
3
Repeat
Deploy it again for each other purchase subscription.
Prefer the command line? The wizard shows a ready-to-run command for your subscriptions; run it in Azure Cloud Shell (Bash). For one subscription it looks like this:
az deployment sub create --subscription "<subscription-id>" --location eastus \ --name nops-commitment-management \ --template-uri "https://axb8wyvkymvzx0t0.public.blob.vercel-storage.com/azure/templates/lighthouse-portal-write-sub.json"
For several billing profiles, the wizard gives you one loop over every purchase subscription. It keeps going if one fails and prints Delegated or FAILED for each, so you can fix and re-run only what failed. Running it again is safe.
for sub in \ <subscription-id-1> \ <subscription-id-2>; do az deployment sub create --subscription "$sub" --location eastus --name nops-commitment-management --template-uri "https://axb8wyvkymvzx0t0.public.blob.vercel-storage.com/azure/templates/lighthouse-portal-write-sub.json" --only-show-errors --output none && echo "Delegated $sub" || echo "FAILED $sub"done
You’ll see the delegation under Service providers in the Azure portal, where you can remove it at any time.B. Check the purchase policiesMicrosoft only lets subscription purchasers buy commitments when your enrollment or billing profile allows it.
Turn on Reserved Instances and Add Savings Plan, then click Save. An Enterprise Administrator can change these.
1
Open the billing profile's Policies
Go to Cost Management + Billing, select the billing account, then Billing profiles, the profile, and Policies.
2
Allow purchases
Under Azure Reservations, set Azure Reservation purchases to Yes. Under Azure Savings Plan, set Azure Savings Plan to Yes. Then click Save. A billing profile owner or contributor can change these. Repeat for each billing profile you buy for.
A new delegation can take a few minutes to show up.
2
Click Verify Permissions
For each purchase subscription, nOps checks that:
nOps can see the subscription (Reader from Savings Analysis covers it), and it is active, not disabled or deleted
MCA billing account: it is billed to your billing account
the nOps Commitment Management delegation is on it and gives nOps staff Reservation Purchaser and Savings plan Purchaser
MCA: it bills to the billing profile you chose
the purchase policies allow purchases: Reserved Instances and Add Savings Plan on (EA), or Azure Reservation purchases and Azure Savings Plan set to Yes (MCA)
If the delegation is missing Reader (an older template), or nOps can’t read a purchase policy, Verify shows a note instead of failing. It also notes two subscriptions that bill to the same billing profile, since one is enough.MCA billing account: nOps must also read which billing profile each subscription bills to. If it can’t, Verify fails and asks you to check that nOps.io still has Billing account reader, then run Verify again. If Commitment Management is already on, it stays on. On a billing profiles connection, that read only shows a note.MCA: Verify also says how many of your billing profiles have a purchase subscription and names the ones that don’t. On a billing account connection, a subscription counts only for the billing profile nOps confirms it bills to. Skipping a profile is fine; the list is there so a new billing profile doesn’t go unnoticed.
3
Review the result
Verify also re-checks Savings Analysis. When Savings Analysis and every purchase subscription pass, you’ll see Commitment Management Verified, and nOps can start buying for you.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"nOps Documentation","description":"nOps cloud cost optimization platform: platform guides, cloud provider onboarding, and more.","colors":{"primary":"#0071EA","light":"#3399FF","dark":"#0056B3"},"logo":{"light":"https://mintcdn.com/nopsio/soDze3u_2cvKfXf7/logo/light.svg?fit=max\u0026auto=format\u0026n=soDze3u_2cvKfXf7\u0026q=85\u0026s=52543d77f0daf2d0e4763930bdc46fe6","dark":"https://mintcdn.com/nopsio/soDze3u_2cvKfXf7/logo/dark.svg?fit=max\u0026auto=format\u0026n=soDze3u_2cvKfXf7\u0026q=85\u0026s=0ef246577335b94b314a9ea2acf070e4","href":"https://clara.nops.io"},"favicon":"https://mintcdn.com/nopsio/soDze3u_2cvKfXf7/favicon.svg?fit=max\u0026auto=format\u0026n=soDze3u_2cvKfXf7\u0026q=85\u0026s=fdd5f561841463f4a4d314cf20927244","api":{"openapi":"openapi.json","playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript","go"],"prefill":true},"url":"full"},"appearance":{"default":"dark"},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"mailto:support@nops.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://clara.nops.io"}},"footer":{"socials":{"linkedin":"https://linkedin.com/company/nops-io","website":"https://nops.io","x":"https://x.com/naborly"},"links":[{"header":"Resources","items":[{"label":"nOps Platform","href":"https://clara.nops.io"},{"label":"Help Center","href":"https://help.nops.io"},{"label":"Blog","href":"https://nops.io/blog"}]},{"header":"Company","items":[{"label":"About nOps","href":"https://nops.io"},{"label":"Contact Support","href":"mailto:support@nops.io"}]}]},"search":{"prompt":"Search nOps docs..."},"fonts":{"heading":{"family":"Poppins","weight":600},"body":{"family":"Inter"}},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":false},"errors":{"404":{"redirect":false,"title":"Page not found","description":"The page you're looking for doesn't exist. [Go back to the docs home](/)."}},"contextual":{"options":["copy","view","download-spec","chatgpt","claude","perplexity","mcp","add-mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nopsio","hasAudioNarration":false,"actualSubdomain":"nopsio","customDomains":["help.nops.io"],"gitSource":{"type":"github","owner":"nops-io","repo":"clara","deployBranch":"dev","contentDirectory":"public-docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae55e0a26aa84b3900a0419","collectionId":"0f8274eb-e2cd-40f5-95d6-664224c3446b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae55e0a26aa84b3900a0419"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{},"buildId":"6ae55e0a26aa84b3900a0419","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Developers","count":170},{"language":"default","tag":"API Reference","count":164},{"language":"default","tag":"Guides","count":68},{"language":"default","tag":"Seat Tracking","count":42},{"language":"default","tag":"Cost allocation","count":26},{"language":"default","tag":"Budgets","count":24},{"language":"default","tag":"Third-Party Integrations","count":18},{"language":"default","tag":"Cloud provider integrations","count":15},{"language":"default","tag":"Business unit economics","count":14},{"language":"default","tag":"AI","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"azure/commitment-management-setup","slug":"/azure/commitment-management-setup","pageMetadata":{"title":"Microsoft Azure - Commitment Management Setup","description":"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.","icon":"chart-line","href":"/azure/commitment-management-setup"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading,Info,Note,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`faqs`,children:`FAQs`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`What is Azure Commitment Management?`,id:`what-is-azure-commitment-management`,children:_jsx(_components.p,{children:`Commitment Management lets nOps buy and manage Azure Reservations and Savings Plans for you. nOps watches your usage, recommends commitment levels, and buys when it finds savings.`})}),_jsxs(Accordion,{title:`What is the difference between Reservations and Savings Plans?`,id:`what-is-the-difference-between-reservations-and-savings-plans`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reservations`}),`: discounts on a specific resource type (for example Virtual Machines or SQL Database) in a specific region. They save the most (up to 72%) but are less flexible.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Savings Plans`}),`: discounts on an hourly spend commitment across a broader range of compute services. They’re more flexible and save a little less.`]}),`\n`]}),_jsx(_components.p,{children:`nOps manages both to get you the most savings.`})]}),_jsxs(Accordion,{title:`What access does nOps need to buy commitments?`,id:`what-access-does-nops-need-to-buy-commitments`,children:[_jsxs(_components.p,{children:[`nOps staff buy in the Azure portal through `,_jsx(_components.strong,{children:`Azure Lighthouse`}),`. You delegate each subscription purchases are billed to with one template, the `,_jsx(_components.strong,{children:`nOps Commitment Management`}),` delegation. It gives the nOps Customer Access Operators group, in the nOps tenant:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reader`}),`, to see the subscription`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reservation Purchaser`}),` and `,_jsx(_components.strong,{children:`Savings plan Purchaser`}),`, to buy commitments billed to it`]}),`\n`]}),_jsxs(_components.p,{children:[`Your enrollment or billing profile must also allow purchases: on EA, the `,_jsx(_components.strong,{children:`Reserved Instances`}),` and `,_jsx(_components.strong,{children:`Add Savings Plan`}),` policies; on MCA, the billing profile’s `,_jsx(_components.strong,{children:`Azure Reservation purchases`}),` and `,_jsx(_components.strong,{children:`Azure Savings Plan`}),` policies, set to `,_jsx(_components.strong,{children:`Yes`}),`. Commitment Management adds nothing at the tenant, billing, or storage level, and nothing for the nOps.io application.`]})]}),_jsxs(Accordion,{title:`Where do the commitments nOps buys live?`,id:`where-do-the-commitments-nops-buys-live`,children:[_jsxs(_components.p,{children:[`In the nOps tenant. When nOps staff buy through Lighthouse, Azure creates the reservation or savings plan order in the buyer’s tenant. You still pay for it, because it’s billed to your purchase subscription, and it applies to your resources: shared commitments cover your enrollment or billing profile. You see it in `,_jsx(_components.strong,{children:`Cost Management + Billing`}),`, not under `,_jsx(_components.strong,{children:`Reservations`}),` in your own tenant.`]}),_jsx(_components.p,{children:`If you stop using nOps, nOps moves your reservations to your tenant. Savings plans can’t change tenant after purchase, so they stay in the nOps tenant until they end.`})]}),_jsxs(Accordion,{title:`Which subscription should I use?`,id:`which-subscription-should-i-use`,children:[_jsx(_components.p,{children:`Any active subscription in your enrollment or billing profile works, including one you already use or one that already has commitments. It must sit under the management group you connected in Savings Analysis. nOps only bills purchases to it. If you prefer to keep purchasing apart from your workloads, create an empty subscription for it.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`EA`}),`: one subscription in your enrollment. Shared commitments cover every subscription in the enrollment.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA`}),`: one subscription in each billing profile you want nOps to buy for. Shared commitments cover the subscriptions in that subscription’s billing profile.`]}),`\n`]})]}),_jsxs(Accordion,{title:`Do I grant access once for my billing account, or for each billing profile?`,id:`do-i-grant-access-once-for-my-billing-account-or-for-each-billing-profile`,children:[_jsx(_components.p,{children:`Both, for different things:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Seeing costs and commitments: once, at the billing account.`}),` Savings Analysis already gives nOps.io Billing account reader, which covers every billing profile, including ones you add later.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Buying: once per billing profile.`}),` Microsoft only lets someone buy a reservation through a subscription where they hold Owner or Reservation Purchaser, even billing account owners. The subscription’s billing profile decides which invoice pays and which subscriptions a shared commitment covers, and a shared commitment never covers another billing profile. So nOps needs one delegated subscription in each billing profile it buys for, and no billing account role replaces that.`]}),`\n`]}),_jsx(_components.p,{children:`With many billing profiles, the wizard lists them all and gives you one command that delegates every subscription at once.`})]}),_jsxs(Accordion,{title:`What if a billing profile already has reservations or savings plans?`,id:`what-if-a-billing-profile-already-has-reservations-or-savings-plans`,children:[_jsx(_components.p,{children:`Set it up the same way. Your existing commitments keep applying and stay where they are, and nOps sees them in the billing data Savings Analysis already reads.`}),_jsxs(_components.p,{children:[`If nOps already buys for that billing profile through an earlier nOps delegation, enter the same subscription. Deploying the template updates that delegation in place, and nOps keeps managing what it bought. If Azure rejects the update, remove the old delegation under `,_jsx(_components.strong,{children:`Service providers`}),` and deploy again.`]})]}),_jsxs(Accordion,{title:`Can nOps exchange or refund commitments?`,id:`can-nops-exchange-or-refund-commitments`,children:[_jsx(_components.p,{children:`nOps can exchange or refund the reservations it buys, without extra roles: the buyer owns the order. nOps also makes its operations team a co-owner of every order it buys, including earlier ones, so managing a commitment never depends on one person’s account. Partial exchanges are allowed, and Microsoft limits refunds to USD 50,000 in a rolling 12 months per enrollment or billing profile. Savings plans can’t be canceled, refunded, or exchanged by anyone.`}),_jsxs(_components.p,{children:[`Reservations you bought yourself live in your tenant. Lighthouse can’t delegate them, so nOps can’t exchange or refund them there. If you want nOps to manage one, its owner can move it to nOps with `,_jsx(_components.strong,{children:`Change directory`}),`; your nOps contact will walk you through it. Moving it doesn’t change who pays or which subscriptions a shared reservation covers. Savings plans can’t change tenant after purchase, so you keep managing the ones you bought (their scope and renewal).`]})]}),_jsx(Accordion,{title:`What happens when I add a billing profile later?`,id:`what-happens-when-i-add-a-billing-profile-later`,children:_jsxs(_components.p,{children:[`Verify lists the billing profiles nOps has no purchase subscription for, so a new one shows up there. `,_jsx(_components.strong,{children:`Check connectivity`}),` in Settings runs the same check, and you see the list when you open the integration’s Verify step. To include it, open the integration, enter a subscription for the new profile in step 1, deploy the delegation on that subscription, turn on the purchase policies on the new billing profile, and Verify again.`]})}),_jsx(Accordion,{title:`What happens to Savings Analysis while I set this up?`,id:`what-happens-to-savings-analysis-while-i-set-this-up`,children:_jsx(_components.p,{children:`Nothing. Savings Analysis stays active the whole time, even if a Commitment Management check fails. Only Verify turns Commitment Management on. Once it has passed, it turns off only when a Verify finds something missing, such as the delegation or a policy. A read that failed doesn’t change it.`})}),_jsx(Accordion,{title:`Do I need Inform to view Commitment Inventory?`,id:`do-i-need-inform-to-view-commitment-inventory`,children:_jsxs(_components.p,{children:[`No. `,_jsx(_components.a,{href:`/optimize/commitment-inventory`,children:`Commitment Inventory`}),` is included on every nOps plan when your Azure integration is `,_jsx(_components.strong,{children:`active`}),`. Inform is only required to `,_jsx(_components.strong,{children:`email`}),` or `,_jsx(_components.strong,{children:`schedule`}),` inventory reports.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Commitment Management`}),` is the second tier of Azure onboarding. It builds on `,_jsx(_components.a,{href:`/azure/integration-setup`,children:`Savings Analysis`}),` and lets nOps:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Buy and manage Azure `,_jsx(_components.strong,{children:`Reservations`}),` for you`]}),`\n`,_jsxs(_components.li,{children:[`Buy and manage Azure `,_jsx(_components.strong,{children:`Savings Plans`}),` for you`]}),`\n`,_jsx(_components.li,{children:`Watch utilization and adjust commitment levels`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Set up Savings Analysis first.`}),` Commitment Management is added to a verified Savings Analysis integration. If you haven’t set it up yet, start with `,_jsx(_components.a,{href:`/azure/integration-setup`,children:`Savings Analysis Setup`}),`.`]})}),`\n`,_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Before you start`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A verified Savings Analysis integration. Find it in `,_jsx(_components.a,{href:`https://clara.nops.io/settings`,children:`nOps Settings > Cloud Provider Integrations`}),` and look for `,_jsx(_components.strong,{children:`Enable CM`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Owner`}),` on each subscription you’ll use for purchases, to deploy the delegation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`EA:`}),` an Enterprise Administrator, if the purchase policies need turning on.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA:`}),` a billing profile owner or contributor, if the purchase policies need turning on.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA billing account:`}),` keep the `,_jsx(_components.strong,{children:`Billing account reader`}),` role on nOps.io from Savings Analysis. Verify uses it to check which billing profile each purchase subscription bills to.`]}),`\n`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-commitment-management-adds`,children:`What Commitment Management adds`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Savings Analysis`}),_jsx(_components.th,{children:`Commitment Management adds`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Purchase subscription (each)`}),_jsx(_components.td,{children:`Reader for nOps.io (inherited from your management group)`}),_jsx(_components.td,{children:`The nOps Commitment Management Lighthouse delegation for nOps staff: Reader, Reservation Purchaser, and Savings plan Purchaser`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`EA enrollment, MCA billing account or billing profile`}),_jsx(_components.td,{children:`Read-only billing role`}),_jsxs(_components.td,{children:[`Nothing. The purchase policies must allow purchases: `,_jsx(_components.strong,{children:`Reserved Instances`}),` and `,_jsx(_components.strong,{children:`Add Savings Plan`}),` on (EA enrollment), or `,_jsx(_components.strong,{children:`Azure Reservation purchases`}),` and `,_jsx(_components.strong,{children:`Azure Savings Plan`}),` set to `,_jsx(_components.strong,{children:`Yes`}),` (each MCA billing profile you buy for)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tenant, storage account, nOps.io`}),_jsx(_components.td,{children:`No change`}),_jsx(_components.td,{children:`Nothing`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Earlier versions of this setup asked for Reservation Purchaser and Savings plan Purchaser for nOps.io, Reservations Administrator and Savings Plan Reader at the tenant, EA Purchaser or Billing account contributor, and Owner on the export storage account. None of these are needed now: nOps staff buy through the Lighthouse delegation. If you already have the older “nOps FinOps Management (Dedicated Subscription)” delegation, deploying the new template replaces it. If Azure rejects that, remove the old delegation under `,_jsx(_components.strong,{children:`Service providers`}),` and deploy again. If Commitment Management is already on from the earlier setup, it stays on: open the integration and click `,_jsx(_components.strong,{children:`Verify Permissions`}),` to run the new check. On EA, a service principal holds only one EA billing role. If you gave nOps.io EA Purchaser for the earlier setup, it replaced EnrollmentReader. If you remove EA Purchaser, assign EnrollmentReader to nOps.io again so Savings Analysis keeps its billing access.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-choose-purchase-subscriptions`,children:`Step 1: Choose purchase subscriptions`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open the wizard`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.a,{href:`https://clara.nops.io/settings`,children:_jsx(_components.strong,{children:`nOps Settings > Cloud Provider Integrations`})}),`, find your verified Azure integration and click `,_jsx(_components.strong,{children:`Enable CM`}),`. Or click `,_jsx(_components.strong,{children:`Set Up Commitment Management`}),` after Savings Analysis verifies.`]})}),_jsxs(Step,{title:`Enter the subscriptions`,children:[_jsx(_components.p,{children:`The wizard shows the layout for how you connected Savings Analysis:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`EA`}),`: one subscription. We fill in your Savings Analysis export subscription; change it if you like.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA billing account`}),`: one row for each billing profile in your billing account. Enter a subscription billed to each profile you want nOps to buy for, and leave the others blank. If you only want some profiles managed, fill in only those. If nOps can’t list your billing profiles, you get a plain list instead: add one subscription per billing profile, and Verify tells you which profile each one bills to.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA billing profiles`}),`: one row for each billing profile you connected. Enter a subscription billed to that profile, or leave a row blank to skip the profile. To add a profile, connect it in Savings Analysis first.`]}),`\n`]}),_jsx(_components.p,{children:`A subscription bills to one billing profile, so the wizard won’t take the same subscription twice.`})]}),_jsx(Step,{title:`Click Continue`,children:_jsx(_components.p,{children:`nOps saves the subscriptions and opens Run Setup.`})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`A subscription’s billing profile is on its `,_jsx(_components.strong,{children:`Overview`}),` page in the Azure portal.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`run-the-setup`,children:`Run the setup`}),`\n`,_jsxs(_components.p,{children:[`The wizard walks you through two steps, `,_jsx(_components.strong,{children:`A`}),` and `,_jsx(_components.strong,{children:`B`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`A. Delegate purchasing to nOps`})}),`\n`,_jsxs(_components.p,{children:[`Do this on every purchase subscription. You need `,_jsx(_components.strong,{children:`Owner`}),` on it.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open the template`,children:_jsxs(_components.p,{children:[`In the wizard, click `,_jsx(_components.strong,{children:`Deploy to Azure`}),`. It opens the nOps Commitment Management template in the Azure portal.`]})}),_jsx(Step,{title:`Deploy it`,children:_jsxs(_components.p,{children:[`Select the purchase subscription and any region, then click `,_jsx(_components.strong,{children:`Review + create`}),` > `,_jsx(_components.strong,{children:`Create`}),`. The deployment takes under a minute.`]})}),_jsx(Step,{title:`Repeat`,children:_jsx(_components.p,{children:`Deploy it again for each other purchase subscription.`})})]}),`\n`,_jsx(_components.p,{children:`Prefer the command line? The wizard shows a ready-to-run command for your subscriptions; run it in Azure Cloud Shell (Bash). For one subscription it looks like this:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:`az`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` sub`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` create`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --subscription`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"\u003csubscription-id>\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --location`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` eastus`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --name`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` nops-commitment-management`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --template-uri`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"https://axb8wyvkymvzx0t0.public.blob.vercel-storage.com/azure/templates/lighthouse-portal-write-sub.json\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For several billing profiles, the wizard gives you one loop over every purchase subscription. It keeps going if one fails and prints `,_jsx(_components.strong,{children:`Delegated`}),` or `,_jsx(_components.strong,{children:`FAILED`}),` for each, so you can fix and re-run only what failed. Running it again is safe.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`for`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` sub `}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`in`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`subscription-id-1`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`>`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`subscription-id-2`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`>`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`; `}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`do`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` az`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` deployment`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` sub`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` create`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --subscription`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`$sub`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --location`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` eastus`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --name`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` nops-commitment-management`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --template-uri`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"https://axb8wyvkymvzx0t0.public.blob.vercel-storage.com/azure/templates/lighthouse-portal-write-sub.json\"`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --only-show-errors`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` --output`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` none`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:`echo`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"Delegated `}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`$sub`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:` ||`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#79B8FF`},children:` echo`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:` \"FAILED `}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`$sub`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#F97583`},children:`done`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`You’ll see the delegation under `,_jsx(_components.strong,{children:`Service providers`}),` in the Azure portal, where you can remove it at any time.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`B. Check the purchase policies`})}),`\n`,_jsx(_components.p,{children:`Microsoft only lets subscription purchasers buy commitments when your enrollment or billing profile allows it.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Enterprise Agreement (EA)`,id:`enterprise-agreement-ea`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Open Policies`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://portal.azure.com/#view/Microsoft_Azure_GTM/ModernBillingMenuBlade/~/Overview`,children:_jsx(_components.strong,{children:`Cost Management + Billing`})}),`, select your EA billing account, then `,_jsx(_components.strong,{children:`Policies`}),`.`]})}),_jsx(Step,{title:`Turn on purchases`,children:_jsxs(_components.p,{children:[`Turn on `,_jsx(_components.strong,{children:`Reserved Instances`}),` and `,_jsx(_components.strong,{children:`Add Savings Plan`}),`, then click `,_jsx(_components.strong,{children:`Save`}),`. An Enterprise Administrator can change these.`]})})]})}),_jsx(Tab,{title:`Microsoft Customer Agreement (MCA)`,id:`microsoft-customer-agreement-mca`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Open the billing profile's Policies`,children:_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://portal.azure.com/#view/Microsoft_Azure_GTM/ModernBillingMenuBlade`,children:_jsx(_components.strong,{children:`Cost Management + Billing`})}),`, select the billing account, then `,_jsx(_components.strong,{children:`Billing profiles`}),`, the profile, and `,_jsx(_components.strong,{children:`Policies`}),`.`]})}),_jsx(Step,{title:`Allow purchases`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Azure Reservations`}),`, set `,_jsx(_components.strong,{children:`Azure Reservation purchases`}),` to `,_jsx(_components.strong,{children:`Yes`}),`. Under `,_jsx(_components.strong,{children:`Azure Savings Plan`}),`, set `,_jsx(_components.strong,{children:`Azure Savings Plan`}),` to `,_jsx(_components.strong,{children:`Yes`}),`. Then click `,_jsx(_components.strong,{children:`Save`}),`. A billing profile owner or contributor can change these. Repeat for each billing profile you buy for.`]})})]})})]}),`\n`,_jsxs(_components.p,{children:[`When you’re done, click `,_jsx(_components.strong,{children:`I’ve completed all steps`}),`.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`verify`,children:`Verify`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Wait a few minutes`,children:_jsx(_components.p,{children:`A new delegation can take a few minutes to show up.`})}),_jsxs(Step,{title:`Click Verify Permissions`,children:[_jsx(_components.p,{children:`For each purchase subscription, nOps checks that:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`nOps can see the subscription (Reader from Savings Analysis covers it), and it is active, not disabled or deleted`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA billing account:`}),` it is billed to your billing account`]}),`\n`,_jsxs(_components.li,{children:[`the nOps Commitment Management delegation is on it and gives nOps staff `,_jsx(_components.strong,{children:`Reservation Purchaser`}),` and `,_jsx(_components.strong,{children:`Savings plan Purchaser`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCA:`}),` it bills to the billing profile you chose`]}),`\n`,_jsxs(_components.li,{children:[`the purchase policies allow purchases: `,_jsx(_components.strong,{children:`Reserved Instances`}),` and `,_jsx(_components.strong,{children:`Add Savings Plan`}),` on (EA), or `,_jsx(_components.strong,{children:`Azure Reservation purchases`}),` and `,_jsx(_components.strong,{children:`Azure Savings Plan`}),` set to `,_jsx(_components.strong,{children:`Yes`}),` (MCA)`]}),`\n`]}),_jsxs(_components.p,{children:[`If the delegation is missing `,_jsx(_components.strong,{children:`Reader`}),` (an older template), or nOps can’t read a purchase policy, Verify shows a note instead of failing. It also notes two subscriptions that bill to the same billing profile, since one is enough.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`MCA billing account:`}),` nOps must also read which billing profile each subscription bills to. If it can’t, Verify fails and asks you to check that nOps.io still has `,_jsx(_components.strong,{children:`Billing account reader`}),`, then run Verify again. If Commitment Management is already on, it stays on. On a billing profiles connection, that read only shows a note.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`MCA:`}),` Verify also says how many of your billing profiles have a purchase subscription and names the ones that don’t. On a billing account connection, a subscription counts only for the billing profile nOps confirms it bills to. Skipping a profile is fine; the list is there so a new billing profile doesn’t go unnoticed.`]})]}),_jsx(Step,{title:`Review the result`,children:_jsxs(_components.p,{children:[`Verify also re-checks Savings Analysis. When Savings Analysis and every purchase subscription pass, you’ll see `,_jsx(_components.strong,{children:`Commitment Management Verified`}),`, and nOps can start buying for you.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`additional-resources`,children:`Additional resources`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/lighthouse/overview`,children:`Azure Lighthouse`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/prepare-buy-reservation`,children:`Who can buy a reservation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/savings-plan/permission-buy-savings-plan`,children:`Permissions to buy a savings plan`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/mca-section-invoice#azure-reservation-benefits-might-not-apply-to-all-subscriptions`,children:`Shared reservations cover one billing profile`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/troubleshoot-reservation-transfers-between-tenants`,children:`Move a reservation to another tenant`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/reservations/save-compute-costs-reservations`,children:`Azure Reservations overview`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/cost-management-billing/savings-plan/savings-plan-compute-overview`,children:`Azure Savings Plans overview`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles`,children:`Azure built-in roles`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Microsoft Azure - Commitment Management Setup","description":"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.","icon":"chart-line","href":"/azure/commitment-management-setup"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"FAQs","slug":"faqs","depth":2,"children":[]},{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"What Commitment Management adds","slug":"what-commitment-management-adds","depth":2,"children":[]},{"title":"Step 1: Choose purchase subscriptions","slug":"step-1-choose-purchase-subscriptions","depth":2,"children":[]},{"title":"Run the setup","slug":"run-the-setup","depth":2,"children":[]},{"title":"Verify","slug":"verify","depth":2,"children":[]},{"title":"Additional resources","slug":"additional-resources","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"nopsio","siteName":"nOps Documentation","title":"Microsoft Azure - Commitment Management Setup - nOps Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T14:52:55.912Z","originalFileLocation":"azure/commitment-management-setup.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\">\u003cmeta data-mint-head name=\"application-name\" content=\"nOps Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Microsoft Azure - Commitment Management Setup - nOps Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"nOps Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://help.nops.io/azure/commitment-management-setup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nopsio.mintlify.app/_mintlify/api/og/v2?division=Microsoft+Azure\u0026amp;title=Microsoft+Azure+-+Commitment+Management+Setup\u0026amp;description=Let+nOps+staff+buy+Azure+Reservations+and+Savings+Plans+for+you+by+delegating+a+subscription+you+choose+with+Azure+Lighthouse.\u0026amp;theme=1b405a0e606eab946414f3c3\u0026amp;signature=275a0b0e2cea7dd9606a89c99b504c5b5526671ca589daa3797aec06fd99092a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Microsoft Azure - Commitment Management Setup - nOps Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nopsio.mintlify.app/_mintlify/api/og/v2?division=Microsoft+Azure\u0026amp;title=Microsoft+Azure+-+Commitment+Management+Setup\u0026amp;description=Let+nOps+staff+buy+Azure+Reservations+and+Savings+Plans+for+you+by+delegating+a+subscription+you+choose+with+Azure+Lighthouse.\u0026amp;theme=1b405a0e606eab946414f3c3\u0026amp;signature=275a0b0e2cea7dd9606a89c99b504c5b5526671ca589daa3797aec06fd99092a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/nopsio/fqCOsxgCfR4Zn53X/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"nOps Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0071EA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://help.nops.io/azure/commitment-management-setup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/azure/commitment-management-setup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://help.nops.io/#organization\",\"name\":\"nOps Documentation\",\"url\":\"https://help.nops.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/nopsio/soDze3u_2cvKfXf7/logo/light.svg?fit=max\u0026auto=format\u0026n=soDze3u_2cvKfXf7\u0026q=85\u0026s=52543d77f0daf2d0e4763930bdc46fe6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://help.nops.io#website\",\"name\":\"nOps Documentation\",\"url\":\"https://help.nops.io\",\"publisher\":{\"@id\":\"https://help.nops.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://help.nops.io/azure/commitment-management-setup#webpage\",\"url\":\"https://help.nops.io/azure/commitment-management-setup\",\"name\":\"Microsoft Azure - Commitment Management Setup\",\"description\":\"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\",\"dateModified\":\"2026-10-22T14:52:55.912Z\",\"isPartOf\":{\"@id\":\"https://help.nops.io#website\"},\"breadcrumb\":{\"@id\":\"https://help.nops.io/azure/commitment-management-setup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://help.nops.io/azure/commitment-management-setup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Cloud provider integrations\",\"item\":\"https://help.nops.io/platform/integrations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Azure\",\"item\":\"https://help.nops.io/azure/prerequisites\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Microsoft Azure - Commitment Management Setup\",\"item\":\"https://help.nops.io/azure/commitment-management-setup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://help.nops.io/azure/commitment-management-setup#article\",\"headline\":\"Microsoft Azure - Commitment Management Setup\",\"name\":\"Microsoft Azure - Commitment Management Setup\",\"description\":\"Let nOps staff buy Azure Reservations and Savings Plans for you by delegating a subscription you choose with Azure Lighthouse.\",\"url\":\"https://help.nops.io/azure/commitment-management-setup\",\"mainEntityOfPage\":{\"@id\":\"https://help.nops.io/azure/commitment-management-setup#webpage\"},\"dateModified\":\"2026-10-22T14:52:55.912Z\",\"publisher\":{\"@id\":\"https://help.nops.io/#organization\"},\"isPartOf\":{\"@id\":\"https://help.nops.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"nOps Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"nOps Documentation","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Getting Started","pages":[{"title":"Welcome to nOps","sidebarTitle":"Welcome","href":""}]},{"group":"Cloud provider integrations","pages":[{"title":"Integrations","sidebarTitle":"Integrations","href":"/platform/integrations"},{"group":"Amazon Web Services","pages":[{"title":"Amazon Web Services - Integration Setup","icon":"aws","href":"/aws/integration-setup"},{"title":"Amazon Web Services - Commitment Management Setup","icon":"chart-line","href":"/aws/commitment-management-setup"},{"title":"Amazon Web Services - Permissions \u0026 Resources","icon":"shield-check","href":"/aws/permissions-and-resources"}]},{"group":"Google Cloud Platform","pages":[{"title":"Google Cloud Platform - Prerequisites","icon":"list-check","href":"/gcp/prerequisites"},{"title":"Google Cloud Platform - Integration Setup","icon":"plug","href":"/gcp/integration-setup"},{"title":"Google Cloud Platform - Commitment Management Setup","icon":"chart-line","href":"/gcp/commitment-management-setup"},{"title":"Google Cloud Platform - Permissions \u0026 Resources - Savings Analysis","icon":"shield-check","href":"/gcp/permissions-and-resources-sa"},{"title":"Google Cloud Platform - Permissions \u0026 Resources - Commitment Management","icon":"shield-check","href":"/gcp/permissions-and-resources-cm"}]},{"group":"Microsoft Azure","pages":[{"title":"Microsoft Azure - Prerequisites","icon":"list-check","href":"/azure/prerequisites"},{"title":"Microsoft Azure - Savings Analysis Setup","icon":"plug","href":"/azure/integration-setup"},{"title":"Microsoft Azure - Setup Script (Azure CLI)","description":"Set up Azure Savings Analysis with one Azure CLI script: what it does, what it needs, how to run it, how to run it again, and how to fix anything it can't do for you.","icon":"terminal","href":"/azure/cli-setup"},{"title":"Microsoft Azure - Commitment Management Setup","icon":"chart-line","href":"/azure/commitment-management-setup"},{"title":"Microsoft Azure - Permissions \u0026 Resources","description":"Complete reference of all permissions nOps requires and all resources nOps creates in your Azure environment.","icon":"shield-check","href":"/azure/permissions-and-resources"},{"title":"Microsoft Azure - Security","icon":"lock-keyhole","href":"/azure/security"}]}]},{"group":"Platform","pages":[{"title":"Home page","sidebarTitle":"Home page","href":"/platform/home"},{"title":"Users and roles","sidebarTitle":"Users and roles","href":"/platform/users"},{"title":"Organizations","sidebarTitle":"Organizations","href":"/platform/organizations"},{"title":"Roles and data scopes","sidebarTitle":"Roles \u0026 data scopes","href":"/platform/roles-and-data-scopes"},{"title":"Notifications","sidebarTitle":"Notifications","href":"/platform/notifications"},{"title":"Issue creation from recommendations","sidebarTitle":"Issue creation","href":"/platform/issue-tracker-notifications"},{"title":"Slack \u0026 Teams Delivery","sidebarTitle":"Slack \u0026 Teams","href":"/platform/slack-and-teams"},{"title":"Security and authentication","sidebarTitle":"Security and auth","href":"/platform/security-and-auth"}]},{"group":"Clara","pages":[{"title":"Ask Clara","sidebarTitle":"Ask Clara","href":"/clara/clara-chat"},{"title":"Canvas","sidebarTitle":"Canvas","href":"/clara/canvas"}]},{"group":"Inform","pages":[{"title":"Inform","href":"/inform/introduction"},{"group":"Explorer","root":{"title":"Explorer","href":"/inform/explorer"},"pages":[{"title":"Explorer Dashboard","href":"/inform/explorer-dashboard"},{"title":"Reports","href":"/inform/reports"}]},{"group":"Recommendations","root":{"title":"Recommendations","href":"/inform/recommendations"},"pages":[{"title":"Supported recommendations","href":"/inform/supported-recommendations"}]},{"title":"Anomalies","href":"/inform/anomalies"},{"title":"MAP Manager","href":"/inform/map-manager"}]},{"group":"AI","pages":[{"title":"Introduction","href":"/ai/introduction"},{"title":"Set up AI seat tracking","href":"/ai/setup"},{"title":"Tracking","href":"/ai/tracking"},{"title":"Requests","href":"/ai/requests"},{"title":"Wallets","href":"/ai/wallets"},{"title":"Budgets","href":"/ai/budgets"},{"title":"Automated Rebalance","href":"/ai/automated-rebalance"},{"title":"AI Recommendations","href":"/ai/recommendations"},{"title":"AI Anomalies","href":"/ai/anomalies"}]},{"group":"Operate","pages":[{"title":"Budgets","href":"/operate/budgets"},{"title":"Business Unit Economics","href":"/operate/business-unit-economics"},{"title":"Cloud \u0026 SaaS Contract Tracker","href":"/operate/contract-tracker"}]},{"group":"Optimize","pages":[{"title":"Commitment Inventory","href":"/optimize/commitment-inventory"}]},{"group":"Third-Party Integrations","pages":[{"title":"Cursor","icon":"key","href":"/integrations/cursor-admin-api"},{"title":"Datadog","icon":"chart-line","href":"/integrations/datadog"},{"title":"MongoDB Atlas","icon":"database","href":"/integrations/mongodb-atlas"},{"title":"Fastly","icon":"globe","href":"/integrations/fastly"},{"title":"Cloudflare","icon":"cloud","href":"/integrations/cloudflare"},{"title":"OpenAI (Platform)","icon":"robot","href":"/integrations/openai"},{"title":"ChatGPT (Enterprise)","icon":"robot","href":"/integrations/openai-enterprise"},{"title":"Anthropic (Platform)","icon":"robot","href":"/integrations/anthropic"},{"title":"Claude.ai (Enterprise)","icon":"robot","href":"/integrations/claude-enterprise"},{"title":"Twilio","icon":"phone","href":"/integrations/twilio"},{"title":"LiteLLM","icon":"route","href":"/integrations/litellm"},{"title":"Atlassian","icon":"key","href":"/integrations/atlassian"},{"title":"GitHub","icon":"key","href":"/integrations/github"},{"title":"GitLab","icon":"key","href":"/integrations/gitlab"},{"title":"Amazon Bedrock","icon":"aws","href":"/integrations/amazon-bedrock"},{"title":"Databricks","icon":"boxes-stacked","href":"/integrations/databricks"},{"title":"Snowflake","icon":"snowflake","href":"/integrations/snowflake"},{"title":"Vercel","icon":"triangle","href":"/integrations/vercel"}]},{"group":"Telemetry","pages":[{"title":"Send OpenTelemetry data to nOps","sidebarTitle":"OpenTelemetry","href":"/telemetry/opentelemetry"}]},{"group":"Plugins","pages":[{"title":"Clara MCP","sidebarTitle":"Clara MCP","href":"/plugins/clara-mcp"},{"title":"Clara Slack Agent","sidebarTitle":"Clara Slack Agent","href":"/plugins/clara-slack-agent"}]},{"group":"Portfolio Portal","pages":[{"title":"Portfolio Portal","sidebarTitle":"Portfolio Portal","href":"/portfolio/introduction"}]},{"group":"Support","pages":[{"title":"nOps Customer Service SLAs","sidebarTitle":"Customer Service SLAs","href":"/support/customer-service-sla"}]}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers"}]}]},"basePath":"","title":"Microsoft Azure - Commitment Management Setup - nOps Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}