The official Go SDK for the Bird API: email, SMS, WhatsApp, verification, and Realtime, over one typed client.
go get github.com/messagebird/bird-sdk-goRequires Go 1.24+.
This SDK is generated from Bird's public OpenAPI bundle inside Bird's internal monorepo, which is the single source of truth; this repository tracks tagged releases. Generation runs in the monorepo, so
make generatewon't work from a clone here — see CONTRIBUTING.md.
bird.NewClient(option.WithAPIKey(...)) returns a client whose region is inferred from the API key's prefix (bk_{region}_…); pass option.WithBaseURL or option.WithRegion to override. From there:
client.Email—Send,Get,List(auto-paginating;ListPagefor manual cursors).client.Sms—Send(free text or a stored template),SendBatch,Get,List(auto-paginating;ListPagefor manual cursors).client.SmsTemplates(List,Get) browses the templates a send can name.client.Whatsapp—Send(template messages),Get,List(auto-paginating;ListPagefor manual cursors),ListEvents(a message's delivery timeline). Browse your workspace's approved templates in the Bird dashboard.client.Verify—Verifications.Create(send a one-time passcode) andVerifications.Check(validate the code a recipient submitted).client.Realtime—Publish,PublishBatch, plusChannels(List,Get,Members) andMembers.Disconnect. Every call takes the Realtime app id and needs the app's own credentials on top of the API key:option.WithRealtimeCredentials(key, secret), at construction or per call.client.Contacts—Create,Get,Update,Delete,Batch,List(auto-paginating).client.Audiencesgroups them (Create,Get,Update,Delete,List, plusListContacts,AddContacts,RemoveContacts,RemoveContact), andclient.ContactPropertiesdefines the fields a contact carries (Create,Get,Update,List,Archive,Unarchive).client.Domains—Create,Get,Update,Delete,List, andVerify(check a sending domain's DNS).client.Webhooks—Unwrap(verify a signed event into a typed value).- Typed errors. A failure is a
*bird.APIError(or a richer*bird.RateLimitError/*bird.ValidationError) you branch on witherrors.As. Transient failures (timeouts, 429, 5xx) are retried automatically with a reused idempotency key. - Options configure the client and override per call (
option.WithEmailDefaults,WithTimeout,WithIdempotencyKey, …). client.Get/Post/Put/Patch/Deletereach endpoints outside the curated surface.
Runnable, per-method examples live in example_test.go and render under each method on pkg.go.dev: sending (simple and rich), error handling, get, pagination, channel defaults, the webhook receiver, and the escape hatch.
The wire types and a low-level client are generated from the OpenAPI spec into internal/oapi; this package is the hand-written idiomatic layer on top.