We use optional, privacy-safe analytics to understand which pages help visitors. Nothing optional runs until you choose. Privacy policy

Skip to content
AvailableDirect HTTP API

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.

Request This SetupBook an Integration Review

What this integration enables

Transactional notifications
Order confirmations, payment receipts, and status changes triggered by your backend.
Appointment reminders
Scheduled jobs that message customers before a booking.
Operational alerts
Delivery windows, service updates, and internal notifications.
Two-way conversations
Incoming replies arrive on your webhook endpoint for routing to support or sales.

Architecture

How it fits together: Your application event, then Node.js server code, then SendiMessage API, then Managed messaging line, then Webhook events.
  1. Your application eventAn order ships, a booking nears, a ticket updates
  2. Node.js server codeBuilds the request with credentials from the environment
  3. SendiMessage APIPOST /send-message returns the queued message
  4. Managed messaging lineSMS, or iMessage on supported lines and destinations
  5. Webhook eventsDelivery status and incoming replies post back to your endpoint

Example request

Node.js
// npm install sendimessage
import SendImessage from "sendimessage";
const client = new SendImessage({
apiKey: process.env.SENDIMESSAGE_KEY,
apiSecret: process.env.SENDIMESSAGE_SECRET,
});
// Plain text
const 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 URL
const 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.

webhook event
// "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?
Yes — install it with `npm install sendimessage`. The SDK is dependency-free, covers the full public API (messages, media, lookup, contacts, lines, conversations, webhooks), and ships a webhook signature verification helper.
What does the API return when I send a message?
The API accepts messages asynchronously and responds with status "QUEUED" plus a message_handle and the line_handle it will send from. Track final delivery via GET /status, the message history endpoints, or webhook events.
Can I send iMessage from Node.js?
SendiMessage delivers over iMessage where the destination supports it on your managed line, and falls back to SMS when fallback is configured. iMessage is never guaranteed for every recipient.

Ready to connect Node.js?

Request a messaging line and a SendiMessage integration specialist will review your Node.js workflow and guide the setup.