Skip to content

Executable SDK examples

These examples are extracted at build time from the SDK source files between stable snippet markers. The documentation does not maintain a second hand-edited copy of SDK code.

Issuance guard

The first-invoice example validates before issue and requires an explicit caller confirmation setting and idempotency key. Do not run it against Production.

First invoice

var draft = await client.Invoices.CreateDraftAsync(
new CreateInvoiceDraftRequest
{
CustomerId = Required("EMISSARY_CUSTOMER_ID"),
SeriesId = Required("EMISSARY_SERIES_ID"),
Currency = "EUR",
IssueDate = DateOnly.FromDateTime(DateTime.UtcNow),
Lines =
[
new InvoiceLineRequest
{
Description = "Software development service",
Quantity = 1,
Unit = "service",
UnitPrice = 100m,
DiscountType = "None",
DiscountValue = 0,
TaxRateId = Required("EMISSARY_TAX_RATE_ID")
}
]
},
idempotencyKey: Required("EMISSARY_DRAFT_IDEMPOTENCY_KEY"));
var validation = await client.Invoices.ValidateAsync(draft.Id);
Console.WriteLine($"Draft {draft.Id}: valid={validation.IsValid}");
foreach (var error in validation.Errors)
{
Console.WriteLine($"Validation: {error}");
}
if (!validation.IsValid || !string.Equals(Environment.GetEnvironmentVariable("EMISSARY_CONFIRM_ISSUE"), "true", StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine("No invoice was issued. Set EMISSARY_CONFIRM_ISSUE=true to explicitly authorize the example issue call.");
return;
}
var issued = await client.Invoices.IssueAsync(
draft.Id,
new IssueInvoiceRequest { ExpectedVersion = draft.Version },
idempotencyKey: Required("EMISSARY_ISSUE_IDEMPOTENCY_KEY"));
Console.WriteLine($"Issued {issued.InvoiceNumber ?? issued.Id}; fiscal status: {issued.FiscalSubmissionStatus ?? issued.FiscalStatus ?? "not reported"}.");
//

Fiscal status

var status = await client.Invoices.GetFiscalStatusAsync(Required("EMISSARY_INVOICE_ID"));
Console.WriteLine($"Invoice {status.InvoiceId}: commercial={status.CommercialStatus}, fiscal={status.FiscalStatus}");
if (status.LatestOperation is { } operation)
{
Console.WriteLine($"Operation {operation.Id}: {operation.Status}; code={operation.LatestErrorCode ?? "none"}");
}
//

Download a document

var invoiceId = Required("EMISSARY_INVOICE_ID");
var documentId = Required("EMISSARY_DOCUMENT_ID");
await using var download = await client.Documents.DownloadAsync(invoiceId, documentId);
var destination = download.FileName ?? $"{documentId}.bin";
await using var file = File.Create(destination);
await download.Content.CopyToAsync(file);
Console.WriteLine($"Saved {destination} ({download.ContentType ?? "unknown content type"}).");
//

Webhook verification

var secret = Required("EMISSARY_WEBHOOK_SECRET");
var timestamp = Required("WEBHOOK-TIMESTAMP");
var signature = Required("WEBHOOK-SIGNATURE");
using var body = new MemoryStream();
await Console.OpenStandardInput().CopyToAsync(body);
var verified = EmissaryWebhookVerifier.Verify(body.ToArray(), timestamp, signature, secret);
Console.WriteLine(verified ? "Webhook signature verified." : "Webhook signature is invalid or outside the timestamp tolerance.");
//