Send messages from Node.js with the SendiMessage API
Node.js 18+ runs the official sendimessage SDK with zero additional dependencies — it uses the built-in fetch under the hood. Reading credentials from process.env and sending a message is four lines.
The SDK also covers the media flow: upload a photo, video, audio file, or PDF (up to 50 MiB) and send the returned URL. The example below drops straight into an Express route, a queue worker, or a scheduled job.
What this integration enables
Architecture
- Your application eventAn order ships, a booking nears, a ticket updates
- Node.js 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
// npm install sendimessageimport SendImessage from "sendimessage";const client = new SendImessage({apiKey: process.env.SENDIMESSAGE_KEY,apiSecret: process.env.SENDIMESSAGE_SECRET,});// Plain textconst msg = await client.sendMessage({number: "+15555550123",content: "Hello from SendiMessage",});console.log(msg.message_handle, msg.status); // "4e828182-…" "QUEUED"// Media: upload first, then send the returned URLconst url = await client.uploadMedia("./receipt.pdf");await client.sendMessage({number: "+15555550123",content: "Your receipt is attached.",mediaUrl: url,});
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 nodejs 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 nodejs.
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 Node.js SDK for SendiMessage?
What does the API return when I send a message?
Can I send iMessage from Node.js?
Related integrations
Ready to connect Node.js?
Request a messaging line and a SendiMessage integration specialist will review your Node.js workflow and guide the setup.