Corporate merch in other countries:AMArmeniaGEGeorgiaTRTürkiyeRSSerbiaAEUAECYCyprusPTPortugalPLPolandESSpain

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.

Talk to a specialist