Go SDK for Italy
github.com/corp-merch/sdk-go — context-aware client, generics paginators, typed errors for Italy.
Architecture — Install and initialise for Italy
go get github.com/corp-merch/sdk-go. Init: cm := corpmerch.New(os.Getenv("CM_KEY"), corpmerch.WithCountry("Italy")). The country option auto-applies IVA 22% and routes invoicing via SdI (Milano hub). Go 1.22+; zero external dependencies in the core (uses net/http and encoding/json). Drop-in for any chi/gin/echo router.
How to wire it up — Quickstart with context
ctx, cancel := context.WithTimeout(ctx, 10*time.Second); defer cancel(). order, err := cm.Orders.Create(ctx, &corpmerch.OrderCreateParams{IdempotencyKey: uuid.NewString(), Buyer: &corpmerch.Buyer{VatID: "EU…"}, Lines: []corpmerch.Line{{SKU: "TSH-001", Qty: 200}}}). Pagination via generics: iter := cm.Catalog.List(ctx, params); for iter.Next() { item := iter.Current() }.
Operations and edge cases — Typed errors and webhook signature
Errors implement standard errors.Is and errors.As. Check with if errors.Is(err, corpmerch.ErrRateLimit) { … }. Webhook verification: event, err := cm.Webhooks.ConstructEvent(body, signature, secret) with constant-time compare via subtle.ConstantTimeCompare. Sistema di Interscambio (SdI) acknowledgement ids accessible as event.Invoice.AcknowledgementID.
FAQ
Go versions?
1.22 and 1.23 in CI; 1.21 may work but isn't guaranteed.
Dependencies?
Core has zero external deps. Optional modules (otel) bring in OpenTelemetry packages.
Generics?
Yes — paginators are generic Iterator[T] with strongly-typed items. Improves DX significantly vs reflection.
Webhook signature?
cm.Webhooks.ConstructEvent(body, sig, secret) — constant-time compare via subtle.ConstantTimeCompare.
IVA 22% and SdI?
Server-side via WithCountry('Italy'). SdI acknowledgement id available on invoice event types.