Developers
C#

Leal C# SDK

Async client for .NET, with nullable reference types. Enrol customers, add stamps, redeem rewards and read a card's Apple Wallet and Google Wallet links, without writing a single HTTP request.

Package
Leal
Registry
NuGet
Requires
.NET 6 or newer, or .NET Standard 2.0.
Licence
MIT

Install

dotnet add package Leal

Your first call

Create a token at app.getleal.com/api_tokens, keep it in an environment variable, and hand it to the client once. Every request after that carries it for you.

using Leal;

var token = Environment.GetEnvironmentVariable("LEAL_API_TOKEN");
var leal = new LealClient(token);

var stores = await leal.Stores.ListAsync();
Console.WriteLine(stores[0].Name);

A token reaches every store its owner belongs to. There is no separate sandbox yet, so build against a store you do not mind changing.

Common tasks

Enrol a customer

Create the customer and put them straight onto a card. The response carries the Apple Wallet and Google Wallet links, so you can send them yourself.

var customer = await leal.Customers.CreateAsync(
    new CreateCustomersRequest
    {
        AccountId = storeId,
        Customer = new CreateCustomersRequestCustomer
        {
            FirstName = "Ada",
            Email = "ada@example.com",
        },
        CardId = cardId,
    });

Add a stamp

The call most integrations need. Leal records the stamp, updates the wallet pass and sends the notification.

var card = await leal.CustomerCards.StampAsync(
    new StampCustomerCardsRequest
    {
        AccountId = storeId,
        CustomerId = customerId,
        Id = customerCardId,
        Stamps = 1,
    });

Redeem a reward

Spend the stamps a customer has earned. Leal checks the reward is available before recording the redemption.

await leal.CustomerCards.RedeemAsync(
    new RedeemCustomerCardsRequest
    {
        AccountId = storeId,
        CustomerId = customerId,
        Id = customerCardId,
        RewardId = rewardId,
    });

Handle a failure

Every failure throws a typed exception carrying the status code, so you can tell a missing record from a rate limit without reading strings.

try
{
    await leal.CustomerCards.StampAsync(request);
}
catch (LealClientApiException error) when (error.StatusCode == 429)
{
    // Wait for the seconds in the Retry-After header, then try again.
}

Every endpoint is available, not just these. The C# repository lists them all, and the API reference documents each field.

Rate limits and retries

Leal allows 300 requests per minute per API token. The client retries a failed request on its own, backing off between attempts, so a brief wobble does not need handling in your code. Go past the limit and you get a 429 carrying Retry-After in seconds. If you need a higher limit, ask us.

Other languages

The same API, the same methods, in eight other languages.