Send personalized SMS messages, schedule campaigns, and track delivery in real time.
POST /v1/messages
Send an SMS to a single recipient.
torequiredbodyrequiredfromrequiredsend_atshorten_urlsconst message = await client.messages.create({
to: "+15551234567",
body: "Your exclusive offer: 30% off today only! š",
from: "MyBrand",
// Optional: shorten and track links
shortenUrls: true,
});
// message.sid ā "msg_01jxxxx"
// message.status ā "queued" | "sent" | "delivered" | "failed"Use the send_at parameter to schedule messages for future delivery. Minimum 15 minutes in advance.
const message = await client.messages.create({
to: "+15551234567",
body: "Black Friday starts NOW! 50% off everything šļø",
from: "MyBrand",
// Schedule for Black Friday at 9 AM UTC
sendAt: "2025-11-28T09:00:00Z",
});Textmodo sends webhooks when message status changes. Configure your endpoint in the dashboard.
message.queuedmessage.sentmessage.deliveredmessage.failedmessage.clicked{
"event": "message.delivered",
"sid": "msg_01jxxxx",
"to": "+15551234567",
"status": "delivered",
"delivered_at": "2025-01-01T12:00:05Z"
}const crypto = require("crypto");
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}