# Management SDK Configuration and Usage

This guide is designed to help you configure your application and start using LicenseSpring Management SDK functionality.

As you navigate through this tutorial, you'll acquire the knowledge to issue licenses and manage orders within your .NET application.

### Configuration

To initialize the SDK, you must fill in your LicenseSpring Management API key. It can be found on your LicenseSpring account under Settings->Keys:

![](https://lh6.googleusercontent.com/sjOHepSGSvoibbgDvQFp65NqS-69SWc2tsCYxX6cidCO6S0L4NkyIyNyfijVOlIEcd7TuciT2LHI-nHNr3BcnuoF1Szy8duHmaYfJ7UinCCZIrx3aiKaZAh4M_jHbzuIeBXEahui62Fa2Z6vN2dCeA)

{% hint style="info" %}
Note: API keys for licensing and management SDKs are different.
{% endhint %}

Copy this value and create the configuration as shown below:

{% code title="Configuration" %}

```csharp
var configuration = new LicenseSpring.ManagementConfiguration( ManagementAPIKey );
```

{% endcode %}

Now you can create a ManagementService using this configuration object:

{% code title="Create ManagementService" %}

```csharp
var service = new ManagementService( configuration );
```

{% endcode %}

### Creating licenses

The following stepper shows the typical flow to create key-based licenses and create an order.

{% stepper %}
{% step %}

### Generate license keys

Generate one or more license keys for the product:

{% code title="GenerateLicenseKey" %}

```csharp
string productCode = "CODE";
var licenseKeys = service.LicenseService.GenerateLicenseKey( productCode );
```

{% endcode %}
{% endstep %}

{% step %}

### Prepare LicenseDetails

Create a LicenseDetails object and set the required properties:

{% code title="LicenseDetails" %}

```csharp
var license1 = new LicenseDetails();
license1.LicenseKey = licenseKeys[0];
license1.EnableMaintenancePeriod = true;
license1.MaintenanceDuration = "3m";
```

{% endcode %}
{% endstep %}

{% step %}

### Create the order

Create an order with the license details:

{% code title="CreateOrder" %}

```csharp
var keyBasedOrderId = service.OrderService.CreateOrder( new[] { license1 }, productCode );
```

{% endcode %}

You can also provide order info such as customer:

{% code title="CreateOrder with Customer" %}

```csharp
var customer = new Customer()
{
   CompanyName = "TestCompany",
   Email = "someone@test.com"
};
var orderInfo = new Order( customer );
var keyBasedOrderId = service.OrderService.CreateOrder( new[] { license1 }, productCode, orderInfo );
```

{% endcode %}
{% endstep %}
{% endstepper %}

### Managing orders

Use the returned order id to get order information and manage the order. Example: get licenses from the order.

{% code title="ListOrders and ListOrderLicenses" %}

```csharp
ListOrdersRequestDto dto = new ListOrdersRequestDto()
{
   ClientOrderId = keyBasedOrderId 
};
uint count;
var ret = service.OrderService.ListOrders( dto, out count );
License[] licenses = null;
if( count == 1 && ret != null )
   licenses = service.OrderService.ListOrderLicenses( ret[0].Id );
```

{% endcode %}

You can also append licenses to an existing order. Example flow:

{% stepper %}
{% step %}

### Generate additional keys

{% code title="Generate additional license key" %}

```csharp
licenseKeys = service.LicenseService.GenerateLicenseKey( productCode );
```

{% endcode %}
{% endstep %}

{% step %}

### Prepare new LicenseDetails

```csharp
var license2 = new LicenseDetails
{
   LicenseKey = licenseKeys[0],
   Type = LicenseType.Consumption,
   MaxConsumptions = 100,
   AllowOverages = true,
   MaxOverages = 50,
   ResetConsumption = true,
   ConsumptionPeriod = ConsumptionPeriod.Weekly
};
```

{% endstep %}

{% step %}

### Append to existing order

Pass the existing order id and customer to create/update the order with the new license:

{% code title="Append license to order" %}

```csharp
orderInfo = new Order( keyBasedOrderId, customer );
keyBasedOrderId = service.OrderService.CreateOrder(  new[] { license2 }, productCode, orderInfo );
```

{% endcode %}
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Note: one order cannot contain key-based and user-based licenses. It contains licenses for one product.
{% endhint %}

### User-based licenses

Creating a user-based license is similar but you do not generate license keys. Ensure the product is user-based.

{% code title="Create user-based license" %}

```csharp
string productCode = "UBCODE";
var license = new LicenseDetails
{
   EnableMaintenancePeriod = true,
   MaintenanceDuration = "7m", // 7 months
   Type = LicenseType.Consumption,
   MaxConsumptions = 10
};
var userBasedOrderId = service.OrderService.CreateOrder( new[] { license }, productCode );
```

{% endcode %}

To assign a user to the created license, retrieve the license via the order ID (see Managing orders) and assign the user by license ID:

{% code title="AssignUser" %}

```csharp
LicenseUser user = new LicenseUser()
{
   Email = "example@email.com",
   IsManager = false
};
service.LicenseService.AssignUser( license.Id, user );
```

{% endcode %}
