Send messages from Go with the SendiMessage API
Go has an official SendiMessage module: go get github.com/sendimessage/sendimessage-go. It uses only the standard library, takes a context on every call, and returns errors instead of ignoring them, in idiomatic Go style.
Drop the client into an HTTP handler, a worker consuming a queue, or a scheduled job — anywhere your Go service decides a customer should hear something.
What this integration enables
Architecture
- Your application eventAn order ships, a booking nears, a ticket updates
- Go server codeBuilds the request with credentials from the environment
- SendiMessage APIPOST /send-message returns the queued message
- Managed messaging lineSMS, or iMessage on supported lines and destinations
- Webhook eventsDelivery status and incoming replies post back to your endpoint
Example request
// go get github.com/sendimessage/sendimessage-gopackage mainimport ("context""fmt""log""os"sendimessage "github.com/sendimessage/sendimessage-go")func main() {client := sendimessage.New(os.Getenv("SENDIMESSAGE_KEY"),os.Getenv("SENDIMESSAGE_SECRET"),)msg, err := client.SendMessage(context.Background(), sendimessage.SendMessageParams{Number: "+15555550123",Content: "Hello from SendiMessage",})if err != nil {log.Fatal(err)}fmt.Println(msg.MessageHandle, msg.Status) // 4e828182-… QUEUED}
Delivery events and incoming replies
Delivery status and incoming replies arrive as signed webhook events. Verify the signature, then correlate events with your own records via the message_handle returned when you sent.
// "outbound" event → your go endpoint// Verify the SendiMessage-Signature header (t={timestamp},v1=HMAC-SHA256 of// "{timestamp}.{raw body}", keyed with your webhook secret), then use// GET /v2/messages/{message_handle} for authoritative state and match it to// your contact_id in go.
Limitations and honest notes
- iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
- Messages are accepted asynchronously — the API returns status QUEUED and final status arrives via webhook or the message endpoints.
- Official SDKs are published for JavaScript/TypeScript (npm: sendimessage), Python (PyPI: sendimessage), PHP (Composer: sendimessage/sdk), and Go (github.com/sendimessage/sendimessage-go). Every SDK is dependency-free and covers the full public API surface.
Security considerations
- Load the API key pair from the environment — never commit it or embed it in client-side code.
- Verify webhook signatures before processing events.
- Log message handles, not message bodies, in shared logs.
Frequently asked questions
Is there an official Go SDK for SendiMessage?
What does the API return when I send a message?
Can I send iMessage from Go?
Ready to connect Go?
Request a messaging line and a SendiMessage integration specialist will review your Go workflow and guide the setup.