{"id":"a39b008e-d9e5-429a-a890-c29d55fcd8ca","shortId":"crnk6Y","kind":"skill","title":"azure-mgmt-apimanagement-dotnet","tagline":"Azure Resource Manager SDK for API Management in .NET.","description":"# Azure.ResourceManager.ApiManagement (.NET)\n\nManagement plane SDK for provisioning and managing Azure API Management resources via Azure Resource Manager.\n\n> **⚠️ Management vs Data Plane**\n> - **This SDK (Azure.ResourceManager.ApiManagement)**: Create services, APIs, products, subscriptions, policies, users, groups\n> - **Data Plane**: Direct API calls to your APIM gateway endpoints\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.ApiManagement\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.3.0\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=<your-subscription-id>\n# For service principal auth (optional)\nAZURE_TENANT_ID=<tenant-id>\nAZURE_CLIENT_ID=<client-id>\nAZURE_CLIENT_SECRET=<client-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.ApiManagement;\n\n// Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\n// Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"/subscriptions/{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── ApiManagementServiceResource\n            ├── ApiResource\n            │   ├── ApiOperationResource\n            │   │   └── ApiOperationPolicyResource\n            │   ├── ApiPolicyResource\n            │   ├── ApiSchemaResource\n            │   └── ApiDiagnosticResource\n            ├── ApiManagementProductResource\n            │   ├── ProductApiResource\n            │   ├── ProductGroupResource\n            │   └── ProductPolicyResource\n            ├── ApiManagementSubscriptionResource\n            ├── ApiManagementPolicyResource\n            ├── ApiManagementUserResource\n            ├── ApiManagementGroupResource\n            ├── ApiManagementBackendResource\n            ├── ApiManagementGatewayResource\n            ├── ApiManagementCertificateResource\n            ├── ApiManagementNamedValueResource\n            └── ApiManagementLoggerResource\n```\n\n## Core Workflow\n\n### 1. Create API Management Service\n\n```csharp\nusing Azure.ResourceManager.ApiManagement;\nusing Azure.ResourceManager.ApiManagement.Models;\n\n// Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n// Define service\nvar serviceData = new ApiManagementServiceData(\n    location: AzureLocation.EastUS,\n    sku: new ApiManagementServiceSkuProperties(\n        ApiManagementServiceSkuType.Developer, \n        capacity: 1),\n    publisherEmail: \"admin@contoso.com\",\n    publisherName: \"Contoso\");\n\n// Create service (long-running operation - can take 30+ minutes)\nvar serviceCollection = resourceGroup.Value.GetApiManagementServices();\nvar operation = await serviceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-apim-service\",\n    serviceData);\n\nApiManagementServiceResource service = operation.Value;\n```\n\n### 2. Create an API\n\n```csharp\nvar apiData = new ApiCreateOrUpdateContent\n{\n    DisplayName = \"My API\",\n    Path = \"myapi\",\n    Protocols = { ApiOperationInvokableProtocol.Https },\n    ServiceUri = new Uri(\"https://backend.contoso.com/api\")\n};\n\nvar apiCollection = service.GetApis();\nvar apiOperation = await apiCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-api\",\n    apiData);\n\nApiResource api = apiOperation.Value;\n```\n\n### 3. Create a Product\n\n```csharp\nvar productData = new ApiManagementProductData\n{\n    DisplayName = \"Starter\",\n    Description = \"Starter tier with limited access\",\n    IsSubscriptionRequired = true,\n    IsApprovalRequired = false,\n    SubscriptionsLimit = 1,\n    State = ApiManagementProductState.Published\n};\n\nvar productCollection = service.GetApiManagementProducts();\nvar productOperation = await productCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"starter\",\n    productData);\n\nApiManagementProductResource product = productOperation.Value;\n\n// Add API to product\nawait product.GetProductApis().CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-api\");\n```\n\n### 4. Create a Subscription\n\n```csharp\nvar subscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent\n{\n    DisplayName = \"My Subscription\",\n    Scope = $\"/products/{product.Data.Name}\",\n    State = ApiManagementSubscriptionState.Active\n};\n\nvar subscriptionCollection = service.GetApiManagementSubscriptions();\nvar subOperation = await subscriptionCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-subscription\",\n    subscriptionData);\n\nApiManagementSubscriptionResource subscription = subOperation.Value;\n\n// Get subscription keys\nvar keys = await subscription.GetSecretsAsync();\nConsole.WriteLine($\"Primary Key: {keys.Value.PrimaryKey}\");\n```\n\n### 5. Set API Policy\n\n```csharp\nvar policyXml = @\"\n<policies>\n    <inbound>\n        <rate-limit calls=\"\"100\"\" renewal-period=\"\"60\"\" />\n        <set-header name=\"\"X-Custom-Header\"\" exists-action=\"\"override\"\">\n            <value>CustomValue</value>\n        </set-header>\n        <base />\n    </inbound>\n    <backend>\n        <base />\n    </backend>\n    <outbound>\n        <base />\n    </outbound>\n    <on-error>\n        <base />\n    </on-error>\n</policies>\";\n\nvar policyData = new PolicyContractData\n{\n    Value = policyXml,\n    Format = PolicyContentFormat.Xml\n};\n\nawait api.GetApiPolicy().CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    policyData);\n```\n\n### 6. Backup and Restore\n\n```csharp\n// Backup\nvar backupParams = new ApiManagementServiceBackupRestoreContent(\n    storageAccount: \"mystorageaccount\",\n    containerName: \"apim-backups\",\n    backupName: \"backup-2024-01-15\")\n{\n    AccessType = StorageAccountAccessType.SystemAssignedManagedIdentity\n};\n\nawait service.BackupAsync(WaitUntil.Completed, backupParams);\n\n// Restore\nawait service.RestoreAsync(WaitUntil.Completed, backupParams);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `ApiManagementServiceResource` | Represents an APIM service instance |\n| `ApiManagementServiceCollection` | Collection for service CRUD |\n| `ApiResource` | Represents an API |\n| `ApiManagementProductResource` | Represents a product |\n| `ApiManagementSubscriptionResource` | Represents a subscription |\n| `ApiManagementPolicyResource` | Service-level policy |\n| `ApiPolicyResource` | API-level policy |\n| `ApiManagementUserResource` | Represents a user |\n| `ApiManagementGroupResource` | Represents a group |\n| `ApiManagementBackendResource` | Represents a backend service |\n| `ApiManagementGatewayResource` | Represents a self-hosted gateway |\n\n## SKU Types\n\n| SKU | Purpose | Capacity |\n|-----|---------|----------|\n| `Developer` | Development/testing (no SLA) | 1 |\n| `Basic` | Entry-level production | 1-2 |\n| `Standard` | Medium workloads | 1-4 |\n| `Premium` | High availability, multi-region | 1-12 per region |\n| `Consumption` | Serverless, pay-per-call | N/A |\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** for long operations like service creation (30+ min)\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Navigate hierarchy** via `Get*` methods (e.g., `service.GetApis()`)\n7. **Policy format** — Use XML format for policies; JSON is also supported\n8. **Service creation** — Developer SKU is fastest for testing (~15-30 min)\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await serviceCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, serviceName, serviceData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Service already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Bad request: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Reference Files\n\n| File | When to Read |\n|------|--------------|\n| references/service-management.md | Service CRUD, SKUs, networking, backup/restore |\n| references/apis-operations.md | APIs, operations, schemas, versioning |\n| references/products-subscriptions.md | Products, subscriptions, access control |\n| references/policies.md | Policy XML patterns, scopes, common policies |\n\n## Related Resources\n\n| Resource | Purpose |\n|----------|---------|\n| [API Management Documentation](https://learn.microsoft.com/en-us/azure/api-management/) | Official Azure docs |\n| [Policy Reference](https://learn.microsoft.com/en-us/azure/api-management/api-management-policies) | Complete policy reference |\n| [SDK Reference](https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.apimanagement) | .NET API reference |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","mgmt","apimanagement","dotnet","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-azure-mgmt-apimanagement-dotnet","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-mgmt-apimanagement-dotnet","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (9,418 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:31.803Z","embedding":null,"createdAt":"2026-04-18T21:32:41.867Z","updatedAt":"2026-04-24T18:50:31.803Z","lastSeenAt":"2026-04-24T18:50:31.803Z","tsv":"'-01':387 '-12':494 '-15':388 '-2':481 '-2024':386 '-30':577 '-4':486 '/api':239 '/en-us/azure/api-management/)':659 '/en-us/azure/api-management/api-management-policies)':667 '/en-us/dotnet/api/azure.resourcemanager.apimanagement)':675 '/products':317 '/subscriptions':123 '1':152,187,277,474,480,485,493,506 '15':576 '2':218,516 '3':255,527 '30':200,525 '4':304,534 '400':607 '409':597 '5':347,541 '6':368,547 '7':555 '8':567 'access':271,641 'accesstyp':389 'action':691 'add':60,64,293 'admin@contoso.com':189 'alreadi':600 'also':565 'alway':98,528 'api':11,25,41,50,154,221,229,250,253,294,303,349,426,442,539,634,654,677 'api-level':441 'api.getapipolicy':364 'apicollect':241 'apicollection.createorupdateasync':246 'apicreateorupdatecont':226 'apidata':224,251 'apidiagnosticresourc':136 'apim':54,212,382,415 'apim-backup':381 'apimanag':4 'apimanagementbackendresourc':145,453 'apimanagementcertificateresourc':147 'apimanagementgatewayresourc':146,458 'apimanagementgroupresourc':144,449 'apimanagementloggerresourc':149 'apimanagementnamedvalueresourc':148 'apimanagementpolicyresourc':142,435 'apimanagementproductdata':263 'apimanagementproductresourc':137,290,427 'apimanagementproductstate.published':279 'apimanagementservicebackuprestorecont':377 'apimanagementservicecollect':418 'apimanagementservicedata':179 'apimanagementserviceresourc':130,215,412 'apimanagementserviceskuproperti':184 'apimanagementserviceskutype.developer':185 'apimanagementsubscriptioncreateorupdatecont':312 'apimanagementsubscriptionresourc':141,333,431 'apimanagementsubscriptionstate.active':320 'apimanagementuserresourc':143,445 'apioper':244 'apioperation.value':254 'apioperationinvokableprotocol.https':233 'apioperationpolicyresourc':133 'apioperationresourc':132 'apipolicyresourc':134,440 'apiresourc':131,252,423 'apischemaresourc':135 'applic':685 'arm':410,538,616 'armclient':106,108,127,405 'armclient.getsubscriptionresource':120 'ask':729 'auth':79 'authent':90 'avail':489 'await':167,207,245,285,297,326,341,363,391,396,587 'azur':2,6,24,29,73,81,84,87,115,583,661 'azure-mgmt-apimanagement-dotnet':1 'azure.identity':66,93 'azure.resourcemanager':95 'azure.resourcemanager.apimanagement':15,38,62,97,159 'azure.resourcemanager.apimanagement.models':161 'azurelocation.eastus':181 'backend':456 'backend.contoso.com':238 'backend.contoso.com/api':237 'backup':369,373,383,385 'backup/restore':632 'backupnam':384 'backupparam':375,394,399 'bad':609 'bash':58,72 'basic':475 'best':504 'boundari':737 'call':51,502 'capac':186,469 'catch':592,602,612 'clarif':731 'clear':704 'client':85,88 'collect':419 'common':648 'complet':668 'console.writeline':343,598,608,615 'consumpt':497 'containernam':380 'contoso':191 'control':642 'core':150 'creat':39,153,192,219,256,305 'createorupdateasync':299,365,543 'creation':524,569 'credenti':102,109 'criteria':740 'crud':422,629 'csharp':91,157,222,259,308,351,372,581 'current':67 'customvalu':354 'data':34,47 'defaultazurecredenti':100,104,530 'defin':174 'describ':692,708 'descript':266 'develop':470,570 'development/testing':471 'direct':49 'displaynam':227,264,313 'doc':662 'document':656 'dotnet':5,59,63 'e.g':553 'endpoint':56 'entri':406,477 'entry-level':476 'environ':70,720 'environment-specif':719 'environment.getenvironmentvariable':114 'error':540,579,617 'ex':594,604,614 'ex.errorcode':619 'ex.message':611,620 'ex.status':596,606,618 'execut':687 'exist':601 'expert':725 'fals':275 'fastest':573 'file':622,623 'finish':513 'format':361,557,560 'gateway':55,464 'get':110,162,336,551 'getresourcegroupasync':169 'group':46,164,173,452 'handl':535,580 'hardcod':532 'hierarchi':126,549 'high':488 'host':463 'id':75,83,86,117 'idempot':545 'input':734 'instal':57 'instanc':417 'isapprovalrequir':274 'issubscriptionrequir':272 'json':563 'key':338,340,345,400,533 'keys.value.primarykey':346 'learn.microsoft.com':658,666,674 'learn.microsoft.com/en-us/azure/api-management/)':657 'learn.microsoft.com/en-us/azure/api-management/api-management-policies)':665 'learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.apimanagement)':673 'level':438,443,478 'like':522 'limit':270,696 'locat':180 'long':195,520 'long-run':194 'manag':8,12,17,23,26,31,32,155,655 'match':705 'medium':483 'method':552 'mgmt':3 'min':526,578 'minut':201 'miss':742 'multi':491 'multi-region':490 'must':512 'my-api':248,301 'my-apim-servic':210 'my-resource-group':170 'my-subscript':329 'myapi':231 'mystorageaccount':379 'n/a':503 'navig':548 'net':14,16,676 'network':631 'never':531 'new':103,107,121,178,183,225,235,262,311,357,376 'offici':660 'oper':197,206,411,510,521,546,586,635 'operation.value':217 'option':80 'output':714 'overview':695 'packag':61,65 'path':230 'pattern':646 'pay':500 'pay-per-cal':499 'per':495,501 'permiss':735 'plane':18,35,48 'point':407 'polici':44,350,439,444,556,562,644,649,663,669 'policycontentformat.xml':362 'policycontractdata':358 'policydata':356,367 'policyxml':353,360 'practic':505 'premium':487 'primari':344 'princip':78 'proceed':515 'product':42,258,291,296,430,479,639 'product.data.name':318 'product.getproductapis':298 'productapiresourc':138 'productcollect':281 'productcollection.createorupdateasync':286 'productdata':261,289 'productgroupresourc':139 'productoper':284 'productoperation.value':292 'productpolicyresourc':140 'protocol':232 'provis':21 'publisheremail':188 'publishernam':190 'purpos':404,468,653 'read':626 'refer':402,621,664,670,672,678 'references/apis-operations.md':633 'references/policies.md':643 'references/products-subscriptions.md':638 'references/service-management.md':627 'region':492,496 'relat':650 'repres':413,424,428,432,446,450,454,459 'request':610 'requestfailedexcept':536,593,603,613 'requir':733 'resourc':7,27,30,125,163,172,651,652 'resourcegroup':166 'resourcegroup.value.getapimanagementservices':204 'resourcegroupresourc':129 'resourceidentifi':122 'restor':371,395 'review':726 'run':196 'safeti':736 'schema':636 'scope':316,647,707 'sdk':9,19,37,671 'secret':89 'self':462 'self-host':461 'serverless':498 'servic':40,77,156,175,193,213,216,416,421,437,457,523,568,599,628 'service-level':436 'service.backupasync':392 'service.getapimanagementproducts':282 'service.getapimanagementsubscriptions':323 'service.getapis':242,554 'service.restoreasync':397 'servicecollect':203 'servicecollection.createorupdateasync':208,588 'servicedata':177,214,591 'servicenam':590 'serviceuri':234 'set':348 'skill':683,699 'skill-azure-mgmt-apimanagement-dotnet' 'sku':182,465,467,571 'skus':630 'sla':473 'source-sickn33' 'specif':721 'standard':482 'starter':265,267,288 'state':278,319 'stop':727 'storageaccount':378 'storageaccountaccesstype.systemassignedmanagedidentity':390 'suboper':325 'suboperation.value':335 'subscript':43,74,111,116,119,168,307,315,331,334,337,434,640 'subscription.getsecretsasync':342 'subscriptioncollect':322 'subscriptioncollection.createorupdateasync':327 'subscriptiondata':310,332 'subscriptionid':113,124 'subscriptionresourc':128 'subscriptionslimit':276 'substitut':717 'success':739 'support':566 'take':199 'task':703 'tenant':82 'test':575,723 'tier':268 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':712 'tri':584 'true':273 'type':401,403,466 'uri':236 'use':92,94,96,99,158,160,507,517,529,542,558,582,681,697 'user':45,448 'v1.3.0':69 'valid':722 'valu':359 'var':101,105,112,118,165,176,202,205,223,240,243,260,280,283,309,321,324,339,352,355,374,585 'variabl':71 'version':68,637 'via':28,550 'vs':33 'waituntil.completed':209,247,287,300,328,366,393,398,508,589 'waituntil.started':518 'workflow':151,689 'workload':484 'xml':559,645","prices":[{"id":"4c89412e-630c-487e-9fe1-3b5b847ae99a","listingId":"a39b008e-d9e5-429a-a890-c29d55fcd8ca","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:41.867Z"}],"sources":[{"listingId":"a39b008e-d9e5-429a-a890-c29d55fcd8ca","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-mgmt-apimanagement-dotnet","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-mgmt-apimanagement-dotnet","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:41.867Z","lastSeenAt":"2026-04-24T18:50:31.803Z"}],"details":{"listingId":"a39b008e-d9e5-429a-a890-c29d55fcd8ca","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-mgmt-apimanagement-dotnet","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"989456bd352497d48cdc82ece19878efbd49ae26","skill_md_path":"skills/azure-mgmt-apimanagement-dotnet/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-mgmt-apimanagement-dotnet"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-mgmt-apimanagement-dotnet","description":"Azure Resource Manager SDK for API Management in .NET."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-mgmt-apimanagement-dotnet"},"updatedAt":"2026-04-24T18:50:31.803Z"}}