Azure.ResourceManager.MongoDBAtlas SDK
Manage MongoDB Atlas Organizations as Azure ARM resources with unified billing through Azure Marketplace.
Package Information
| Property | Value |
|---|---|
| Package | Azure.ResourceManager.MongoDBAtlas |
| Version | 1.0.0 (GA) |
| API Version | 2025-06-01 |
| Resource Type | MongoDB.Atlas/organizations |
| NuGet | Azure.ResourceManager.MongoDBAtlas |
Installation
bash
dotnet add package Azure.ResourceManager.MongoDBAtlasdotnet add package Azure.Identitydotnet add package Azure.ResourceManagerImportant Scope Limitation
This SDK manages MongoDB Atlas Organizations as Azure ARM resources for marketplace integration. It does NOT directly manage:
- Atlas clusters
- Databases
- Collections
- Users/roles
For cluster management, use the MongoDB Atlas API directly after creating the organization.
Environment Variables
bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id> # Required: Azure subscription IDAZURE_RESOURCE_GROUP=<your-resource-group> # Required: Azure resource group nameAZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in productionAZURE_TENANT_ID=<your-tenant-id> # For service principal auth (optional)AZURE_CLIENT_ID=<your-client-id> # For service principal auth (optional)AZURE_CLIENT_SECRET=<your-client-secret> # For service principal auth (optional)Authentication
csharp
using Azure.Identity;using Azure.ResourceManager;using Azure.ResourceManager.MongoDBAtlas;using Azure.ResourceManager.MongoDBAtlas.Models;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential( DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();var armClient = new ArmClient(credential);Core Types
| Type | Purpose |
|---|---|
MongoDBAtlasOrganizationResource | ARM resource representing an Atlas organization |
MongoDBAtlasOrganizationCollection | Collection of organizations in a resource group |
MongoDBAtlasOrganizationData | Data model for organization resource |
MongoDBAtlasOrganizationProperties | Organization-specific properties |
MongoDBAtlasMarketplaceDetails | Azure Marketplace subscription details |
MongoDBAtlasOfferDetails | Marketplace offer configuration |
MongoDBAtlasUserDetails | User information for the organization |
MongoDBAtlasPartnerProperties | MongoDB-specific properties (org name, ID) |
Workflows
Get Organization Collection
csharp
// Get resource groupvar subscription = await armClient.GetDefaultSubscriptionAsync();var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");
// Get organizations collectionMongoDBAtlasOrganizationCollection organizations = resourceGroup.Value.GetMongoDBAtlasOrganizations();Create Organization
csharp
var organizationName = "my-atlas-org";var location = AzureLocation.EastUS2;
// Build organization datavar organizationData = new MongoDBAtlasOrganizationData(location){ Properties = new MongoDBAtlasOrganizationProperties( marketplace: new MongoDBAtlasMarketplaceDetails( subscriptionId: "your-azure-subscription-id", offerDetails: new MongoDBAtlasOfferDetails( publisherId: "mongodb", offerId: "mongodb_atlas_azure_native_prod", planId: "private_plan", planName: "Pay as You Go (Free) (Private)", termUnit: "P1M", termId: "gmz7xq9ge3py" ) ), user: new MongoDBAtlasUserDetails( emailAddress: "[email protected]", upn: "[email protected]" ) { FirstName = "Admin", LastName = "User" } ) { PartnerProperties = new MongoDBAtlasPartnerProperties { OrganizationName = organizationName } }, Tags = { ["Environment"] = "Production" }};
// Create the organization (long-running operation)var operation = await organizations.CreateOrUpdateAsync( WaitUntil.Completed, organizationName, organizationData);
MongoDBAtlasOrganizationResource organization = operation.Value;Console.WriteLine($"Created: {organization.Id}");Get Existing Organization
csharp
// Option 1: From collectionMongoDBAtlasOrganizationResource org = await organizations.GetAsync("my-atlas-org");
// Option 2: From resource identifiervar resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier( subscriptionId: "subscription-id", resourceGroupName: "my-resource-group", organizationName: "my-atlas-org");MongoDBAtlasOrganizationResource org2 = armClient.GetMongoDBAtlasOrganizationResource(resourceId);await org2.GetAsync(); // Fetch dataList Organizations
csharp
// List in resource groupawait foreach (var org in organizations.GetAllAsync()){ Console.WriteLine($"Org: {org.Data.Name}"); Console.WriteLine($" Location: {org.Data.Location}"); Console.WriteLine($" State: {org.Data.Properties?.ProvisioningState}");}
// List across subscriptionawait foreach (var org in subscription.GetMongoDBAtlasOrganizationsAsync()){ Console.WriteLine($"Org: {org.Data.Name} in {org.Data.Id}");}Update Tags
csharp
// Add a single tagawait organization.AddTagAsync("CostCenter", "12345");
// Replace all tagsawait organization.SetTagsAsync(new Dictionary<string, string>{ ["Environment"] = "Production", ["Team"] = "Platform"});
// Remove a tagawait organization.RemoveTagAsync("OldTag");Update Organization Properties
csharp
var patch = new MongoDBAtlasOrganizationPatch{ Tags = { ["UpdatedAt"] = DateTime.UtcNow.ToString("o") }, Properties = new MongoDBAtlasOrganizationUpdateProperties { // Update user details if needed User = new MongoDBAtlasUserDetails( emailAddress: "[email protected]", upn: "[email protected]" ) }};
var updateOperation = await organization.UpdateAsync( WaitUntil.Completed, patch);Delete Organization
csharp
// Delete (long-running operation)await organization.DeleteAsync(WaitUntil.Completed);Model Properties Reference
MongoDBAtlasOrganizationProperties
| Property | Type | Description |
|---|---|---|
Marketplace | MongoDBAtlasMarketplaceDetails | Required. Marketplace subscription details |
User | MongoDBAtlasUserDetails | Required. Organization admin user |
PartnerProperties | MongoDBAtlasPartnerProperties | MongoDB-specific properties |
ProvisioningState | MongoDBAtlasResourceProvisioningState | Read-only. Current provisioning state |
MongoDBAtlasMarketplaceDetails
| Property | Type | Description |
|---|---|---|
SubscriptionId | string | Required. Azure subscription ID for billing |
OfferDetails | MongoDBAtlasOfferDetails | Required. Marketplace offer configuration |
SubscriptionStatus | MarketplaceSubscriptionStatus | Read-only. Subscription status |
MongoDBAtlasOfferDetails
| Property | Type | Description |
|---|---|---|
PublisherId | string | Required. Publisher ID (typically "mongodb") |
OfferId | string | Required. Offer ID |
PlanId | string | Required. Plan ID |
PlanName | string | Required. Display name of the plan |
TermUnit | string | Required. Billing term unit (e.g., "P1M") |
TermId | string | Required. Term identifier |
MongoDBAtlasUserDetails
| Property | Type | Description |
|---|---|---|
EmailAddress | string | Required. User email address |
Upn | string | Required. User principal name |
FirstName | string | Optional. User first name |
LastName | string | Optional. User last name |
MongoDBAtlasPartnerProperties
| Property | Type | Description |
|---|---|---|
OrganizationName | string | Name of the MongoDB Atlas organization |
OrganizationId | string | Read-only. MongoDB Atlas organization ID |
Provisioning States
| State | Description |
|---|---|
Succeeded | Resource provisioned successfully |
Failed | Provisioning failed |
Canceled | Provisioning was canceled |
Provisioning | Resource is being provisioned |
Updating | Resource is being updated |
Deleting | Resource is being deleted |
Accepted | Request accepted, provisioning starting |
Marketplace Subscription Status
| Status | Description |
|---|---|
PendingFulfillmentStart | Subscription pending activation |
Subscribed | Active subscription |
Suspended | Subscription suspended |
Unsubscribed | Subscription canceled |
Best Practices
Use Async Methods
csharp
// Prefer async for all operationsvar org = await organizations.GetAsync("my-org");await org.Value.AddTagAsync("key", "value");Handle Long-Running Operations
csharp
// Wait for completionvar operation = await organizations.CreateOrUpdateAsync( WaitUntil.Completed, // Blocks until done name, data);
// Or start and poll latervar operation = await organizations.CreateOrUpdateAsync( WaitUntil.Started, // Returns immediately name, data);
// Poll for completionwhile (!operation.HasCompleted){ await Task.Delay(TimeSpan.FromSeconds(5)); await operation.UpdateStatusAsync();}Check Provisioning State
csharp
var org = await organizations.GetAsync("my-org");if (org.Value.Data.Properties?.ProvisioningState == MongoDBAtlasResourceProvisioningState.Succeeded){ Console.WriteLine("Organization is ready");}Use Resource Identifiers
csharp
// Create identifier without API callvar resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier( subscriptionId, resourceGroupName, organizationName);
// Get resource handle (no data yet)var orgResource = armClient.GetMongoDBAtlasOrganizationResource(resourceId);
// Fetch data when neededvar response = await orgResource.GetAsync();Common Errors
| Error | Cause | Solution |
|---|---|---|
ResourceNotFound | Organization doesn't exist | Verify name and resource group |
AuthorizationFailed | Insufficient permissions | Check RBAC roles on resource group |
InvalidParameter | Missing required properties | Ensure all required fields are set |
MarketplaceError | Marketplace subscription issue | Verify offer details and subscription |


