The Cheqi .NET SDK provides a simple, type-safe way to integrate digital receipt delivery into your .NET applications.
Install the Cheqi SDK via NuGet:
dotnet add package Cheqi.SdkOr via Package Manager Console:
Install-Package Cheqi.Sdkusing Cheqi.Sdk;
using Cheqi.Sdk.Config;
var sdk = CheqiSdk.Builder()
.ApiEndpoint(Environment.Production)
.ApiKey(System.Environment.GetEnvironmentVariable("CHEQI_API_KEY"))
.Build();using Cheqi.Sdk.Models;
// 1. Identify customer
var customer = IdentificationDetails.Builder()
.PaymentType(PaymentType.CARD_PAYMENT)
.CardDetails(CardDetails.Builder()
.Par("PAR123456789")
.CardProvider(CardProvider.VISA)
.Build())
.RecipientEmail("customer@example.com") // Fallback
.Build();
// 2. Create receipt
var receipt = ReceiptTemplateRequest.Builder()
.DocumentNumber("INV-2024-001")
.IssueDate(DateTimeOffset.UtcNow)
.Currency("EUR")
.InvoiceSubtotal(10.00m)
.TotalBeforeTax(10.00m)
.TotalTaxAmount(2.10m)
.TotalAmount(12.10m)
.AddProduct(Product.Builder()
.Name("Coffee")
.Quantity(2)
.BaseQuantity(1.0)
.UnitCode(UnitCode.ONE)
.UnitPrice(5.00m)
.Subtotal(10.00m)
.Total(12.10m)
.AddTax(21.0, "VAT", 2.10m)
.Build())
.Build();
// 3. Send receipt
var result = await sdk.ReceiptService.ProcessCompleteReceiptAsync(customer, receipt);
// 4. Check result
if (result.IsSuccess)
{
Console.WriteLine($"✅ Receipt delivered to {result.ReceiptCount} devices");
}
else if (!result.RecipientsFound)
{
Console.WriteLine("⚠️ Customer not found");
}
else
{
Console.WriteLine($"❌ Failed: {result.ErrorMessage}");
}// Production
.ApiEndpoint(Environment.Production)
// Sandbox (for testing)
.ApiEndpoint(Environment.Sandbox)
// Custom endpoint
.ApiEndpoint("https://custom-api.cheqi.io")The SDK requires an API key for authentication:
// From environment variable (recommended)
.ApiKey(System.Environment.GetEnvironmentVariable("CHEQI_API_KEY"))
// From configuration (appsettings.json)
.ApiKey(configuration["Cheqi:ApiKey"])
// Direct (not recommended for production)
.ApiKey("your-api-key-here")var customer = IdentificationDetails.Builder()
.PaymentType(PaymentType.CARD_PAYMENT)
.CardDetails(CardDetails.Builder()
.Par("PAR123456789")
.CardProvider(CardProvider.VISA)
.Build())
.Build();var customer = IdentificationDetails.Builder()
.PaymentType(PaymentType.IBAN_PAYMENT)
.PaymentAccountDetails(PaymentAccountDetails.Builder()
.Iban("NL91ABNA0417164300")
.Build())
.Build();var customer = IdentificationDetails.Builder()
.PaymentType(PaymentType.CARD_PAYMENT)
.CardDetails(CardDetails.Builder()
.Par("PAR123456789")
.CardProvider(CardProvider.VISA)
.Build())
.RecipientEmail("customer@example.com") // Fallback if not found
.Build();var receipt = ReceiptTemplateRequest.Builder()
.DocumentNumber("INV-2024-001")
.IssueDate(DateTimeOffset.UtcNow)
.Currency("EUR")
.InvoiceSubtotal(10.00m)
.TotalBeforeTax(10.00m)
.TotalTaxAmount(2.10m)
.TotalAmount(12.10m)
.AddProduct(/* ... */)
.AddTax(/* ... */)
.Build();var product = Product.Builder()
.Name("Product Name")
.Quantity(1)
.BaseQuantity(1.0)
.UnitCode(UnitCode.ONE)
.UnitPrice(10.00m)
.Subtotal(10.00m)
.Total(12.10m)
.Identifier("SKU-123")
.Brand("Brand Name")
.AddTax(21.0, "VAT", 2.10m)
.Build();var tax = Tax.Builder()
.Rate(21.0)
.Type("VAT")
.TaxableAmount(10.00m)
.Amount(2.10m)
.Label("VAT 21%")
.Build();try
{
var result = await sdk.ReceiptService.ProcessCompleteReceiptAsync(customer, receipt);
if (result.IsSuccess)
{
// Handle success
}
else if (!result.RecipientsFound)
{
// Prompt for email
}
}
catch (CheqiSdkException ex)
{
_logger.LogError(ex, "Failed to send receipt");
// Handle error
}// Program.cs or Startup.cs
services.AddSingleton<ICheqiSdk>(sp =>
{
var configuration = sp.GetRequiredService<IConfiguration>();
return CheqiSdk.Builder()
.ApiEndpoint(configuration["Cheqi:ApiEndpoint"])
.ApiKey(configuration["Cheqi:ApiKey"])
.Build();
});{
"Cheqi": {
"ApiEndpoint": "https://api.cheqi.io",
"ApiKey": "your-api-key-here"
}
}public class ReceiptService
{
private readonly ICheqiSdk _cheqiSdk;
private readonly ILogger<ReceiptService> _logger;
public ReceiptService(ICheqiSdk cheqiSdk, ILogger<ReceiptService> logger)
{
_cheqiSdk = cheqiSdk;
_logger = logger;
}
public async Task SendReceiptAsync(IdentificationDetails customer, ReceiptTemplateRequest receipt)
{
var result = await _cheqiSdk.ReceiptService.ProcessCompleteReceiptAsync(customer, receipt);
if (!result.IsSuccess)
{
throw new InvalidOperationException($"Failed to send receipt: {result.ErrorMessage}");
}
}
}All SDK methods are async and return Task<T>:
// Use await
var result = await sdk.ReceiptService.ProcessCompleteReceiptAsync(customer, receipt);
// Or use .Result (not recommended - can cause deadlocks)
var result = sdk.ReceiptService.ProcessCompleteReceiptAsync(customer, receipt).Result;- .NET 6.0 or higher
- C# 10.0 or higher
- Receipt Flow Overview - Understand the complete receipt flow
- Authentication - API Keys and OAuth 2.0
- Java SDK - Alternative SDK for Java applications