Products and Subscriptions
Patterns for managing products, subscriptions, and access control.
Create Product
var productData = new ApiManagementProductData
{
DisplayName = "Premium",
Description = "Premium tier with full access",
IsSubscriptionRequired = true,
IsApprovalRequired = true, // Requires admin approval
SubscriptionsLimit = 5,
State = ApiManagementProductState.Published,
Terms = "Terms and conditions for premium tier..."
};
var product = await service.GetApiManagementProducts()
.CreateOrUpdateAsync(WaitUntil.Completed, "premium", productData);List Products
await foreach (var product in service.GetApiManagementProducts())
{
Console.WriteLine($"{product.Data.DisplayName}: {product.Data.State}");
}Add API to Product
// Get product
var product = await service.GetApiManagementProductAsync("premium");
// Add API
await product.Value.GetProductApis()
.CreateOrUpdateAsync(WaitUntil.Completed, "my-api");Remove API from Product
var productApi = await product.Value.GetProductApiAsync("my-api");
await productApi.Value.DeleteAsync(WaitUntil.Completed);List APIs in Product
await foreach (var api in product.Value.GetProductApis())
{
Console.WriteLine($" - {api.Data.DisplayName}");
}Create Subscription
// Subscription to product
var subscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent
{
DisplayName = "Customer A Subscription",
Scope = $"/products/premium",
State = ApiManagementSubscriptionState.Active,
AllowTracing = true
};
var subscription = await service.GetApiManagementSubscriptions()
.CreateOrUpdateAsync(WaitUntil.Completed, "customer-a-sub", subscriptionData);
// Subscription to specific API
var apiSubscriptionData = new ApiManagementSubscriptionCreateOrUpdateContent
{
DisplayName = "API-specific Subscription",
Scope = $"/apis/my-api",
State = ApiManagementSubscriptionState.Active
};Get Subscription Keys
var secrets = await subscription.Value.GetSecretsAsync();
Console.WriteLine($"Primary Key: {secrets.Value.PrimaryKey}");
Console.WriteLine($"Secondary Key: {secrets.Value.SecondaryKey}");Regenerate Subscription Keys
// Regenerate primary key
await subscription.Value.RegeneratePrimaryKeyAsync();
// Regenerate secondary key
await subscription.Value.RegenerateSecondaryKeyAsync();List Subscriptions
await foreach (var sub in service.GetApiManagementSubscriptions())
{
Console.WriteLine($"{sub.Data.DisplayName}: {sub.Data.State}");
}Suspend/Activate Subscription
// Suspend
var patch = new ApiManagementSubscriptionPatch
{
State = ApiManagementSubscriptionState.Suspended
};
await subscription.Value.UpdateAsync(patch);
// Reactivate
patch.State = ApiManagementSubscriptionState.Active;
await subscription.Value.UpdateAsync(patch);Create User
var userData = new ApiManagementUserCreateOrUpdateContent
{
Email = "user@contoso.com",
FirstName = "John",
LastName = "Doe",
State = ApiManagementUserState.Active,
Password = "SecurePassword123!" // Optional, can send invite instead
};
var user = await service.GetApiManagementUsers()
.CreateOrUpdateAsync(WaitUntil.Completed, "john-doe", userData);Create Group
var groupData = new ApiManagementGroupCreateOrUpdateContent
{
DisplayName = "Premium Users",
Description = "Users with premium access",
GroupContractType = ApiManagementGroupType.Custom
};
var group = await service.GetApiManagementGroups()
.CreateOrUpdateAsync(WaitUntil.Completed, "premium-users", groupData);Add User to Group
await group.Value.GetGroupUsers()
.CreateOrUpdateAsync(WaitUntil.Completed, "john-doe");Add Group to Product
await product.Value.GetProductGroups()
.CreateOrUpdateAsync(WaitUntil.Completed, "premium-users");Delete Subscription
await subscription.Value.DeleteAsync(WaitUntil.Completed);