# Create an Order via Code

In some cases, such as when importing orders from another system, it may be necessary to create a fully finalized order via code.

The example below demonstrates how to do this. The `api` variable is an instance of the `IUmbracoCommerceApi` interface, which is an injectable service accessed via [dependency injection](https://docs.umbraco.com/umbraco-commerce/key-concepts/dependency-injection).

```csharp
await api.Uow.ExecuteAsync(async (uow) =>
{
    // Fetch the store
    var store = await api.GetStoreAsync("blendid");
    
    // Create or get the current order
    var order = await api.GetOrCreateCurrentOrderAsync(store.Id).AsWritableAsync(uow);

    // Add product
    var productId = "2fa949e4-2acb-4aef-bb7c-4d3a5f7bbe52"; // The product node Key
    await order.AddProductAsync(productId, null, 1);

    // Set customer details
    var country = await api.GetCountryAsync(store.Id, "GB");
    await order.SetPropertiesAsync(new Dictionary<string, string>
        {
            { Constants.Properties.Customer.EmailPropertyAlias, $"customer@example.com" },
            { "marketingOptIn", "0" },
            { Constants.Properties.Customer.FirstNamePropertyAlias, "Example" },
            { Constants.Properties.Customer.LastNamePropertyAlias, $"Customer" },
            { "billingAddressLine1", "10 Example Road" },
            { "billingCity", "Example City" },
            { "billingZipCode", "EX3 3PL" },
            { "billingTelephone", "0123456789" },
            { "shippingSameAsBilling", "1" }
        })
        .SetPaymentCountryRegionAsync(country, null)
        .SetShippingCountryRegionAsync(country, null);

    // Set shipping method
    var shippingMethod = await api.GetShippingMethodAsync(store.Id, "pickup");
    await order.SetShippingMethodAsync(shippingMethod);

    // Set payment method
    var paymentMethod = await api.GetPaymentMethodAsync(store.Id, "invoicing");
    await order.SetPaymentMethodAsync(paymentMethod);

    // Recalculate order
    await order.RecalculateAsync();

    // Finalize order
    await order.InitializeTransactionAsync();
    await order.FinalizeAsync(order.TransactionAmount.Value, Guid.NewGuid().ToString("N"), PaymentStatus.Authorized);

    // Save order
    await api.SaveOrderAsync(order);

    // Commit the unit of work
    uow.Complete();
});
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.umbraco.com/umbraco-commerce/how-to-guides/create-order-via-code.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
