Loading...
Loading...
Send and receive SMS/MMS, handle opt-outs and delivery webhooks. Use for notifications, 2FA, or messaging apps.
npx skill4agent add team-telnyx/skills telnyx-messaging-javascriptnpm install telnyximport Telnyx from 'telnyx';
const client = new Telnyx({
apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});clienttry {
const response = await client.messages.send({
to: '+18445550001',
from: '+18005550101',
text: 'Hello from Telnyx!',
});
} catch (err) {
if (err instanceof Telnyx.APIConnectionError) {
console.error('Network error — check connectivity and retry');
} else if (err instanceof Telnyx.RateLimitError) {
const retryAfter = err.headers?.['retry-after'] || 1;
await new Promise(r => setTimeout(r, retryAfter * 1000));
} else if (err instanceof Telnyx.APIError) {
console.error(`API error ${err.status}: ${err.message}`);
if (err.status === 422) {
console.error('Validation error — check required fields and formats');
}
}
}401403404422429+13125550001+for await (const item of result) { ... }## Additional Operationsclient.messages.send()POST /messages| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| string (E.164) | Yes | Sending address (+E.164 formatted phone number, alphanumeric... |
| string | Yes | Message body (i.e., content) as a non-empty string. |
| string (UUID) | No | Unique identifier for a messaging profile. |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| ... | +7 optional params in references/api-details.md |
const response = await client.messages.send({
to: '+18445550001',
from: '+18005550101',
text: 'Hello from Telnyx!',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.textresponse.data.sentAtresponse.data.errorsclient.messages.sendWithAlphanumericSender()POST /messages/alphanumeric_sender_id| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | A valid alphanumeric sender ID on the user's account. |
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| string | Yes | The message body. |
| string (UUID) | Yes | The messaging profile ID to use. |
| string (URL) | No | Callback URL for delivery status updates. |
| string (URL) | No | Failover callback URL for delivery status updates. |
| boolean | No | If true, use the messaging profile's webhook settings. |
const response = await client.messages.sendWithAlphanumericSender({
from: 'MyCompany',
messaging_profile_id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
text: 'Hello from Telnyx!',
to: '+13125550001',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.textresponse.data.sentAtresponse.data.errorstelnyx-signature-ed25519telnyx-timestamp// In your webhook handler (e.g., Express — use raw body, not parsed JSON):
app.post('/webhooks', express.raw({ type: 'application/json' }), async (req, res) => {
try {
const event = await client.webhooks.unwrap(req.body.toString(), {
headers: req.headers,
});
// Signature valid — event is the parsed webhook payload
console.log('Received event:', event.data.event_type);
res.status(200).send('OK');
} catch (err) {
console.error('Webhook verification failed:', err.message);
res.status(400).send('Invalid signature');
}
});| Field | Type | Description |
|---|---|---|
| enum: message.sent, message.finalized | The type of event being delivered. |
| uuid | Identifies the type of resource. |
| array[object] | |
| string | Message body (i.e., content) as a non-empty string. |
| date-time | ISO 8601 formatted date indicating when the message was sent. |
| date-time | ISO 8601 formatted date indicating when the message was finalized. |
| object | null | |
| array[object] | These errors may point at addressees when referring to unsuccessful/unconfirm... |
| Field | Type | Description |
|---|---|---|
| enum: message.received | The type of event being delivered. |
| uuid | Identifies the type of resource. |
| enum: inbound | The direction of the message. |
| array[object] | |
| string | Message body (i.e., content) as a non-empty string. |
| enum: SMS, MMS | The type of message. |
| array[object] | |
| enum: event | Identifies the type of the resource. |
client.messages.sendGroupMms()POST /messages/group_mms| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |
| array[object] | Yes | A list of destinations. |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| string (URL) | No | The failover URL where webhooks related to this message will... |
| ... | +3 optional params in references/api-details.md |
const response = await client.messages.sendGroupMms({
from: '+13125551234',
to: ['+18655551234', '+14155551234'],
text: 'Hello from Telnyx!',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.textclient.messages.sendLongCode()POST /messages/long_code| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| string (URL) | No | The failover URL where webhooks related to this message will... |
| ... | +6 optional params in references/api-details.md |
const response = await client.messages.sendLongCode({
from: '+18445550001', to: '+13125550002',
text: 'Hello from Telnyx!',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.textclient.messages.sendNumberPool()POST /messages/number_pool| Parameter | Type | Required | Description |
|---|---|---|---|
| string (UUID) | Yes | Unique identifier for a messaging profile. |
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| string (URL) | No | The failover URL where webhooks related to this message will... |
| ... | +6 optional params in references/api-details.md |
const response = await client.messages.sendNumberPool({
messaging_profile_id: 'abc85f64-5717-4562-b3fc-2c9600000000',
to: '+13125550002',
text: 'Hello from Telnyx!',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.textclient.messages.sendShortCode()POST /messages/short_code| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Phone number, in +E.164 format, used to send the message. |
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| string (URL) | No | The failover URL where webhooks related to this message will... |
| ... | +6 optional params in references/api-details.md |
const response = await client.messages.sendShortCode({
from: '+18445550001', to: '+18445550001',
text: 'Hello from Telnyx!',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.textclient.messages.schedule()POST /messages/schedule| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Receiving address (+E.164 formatted phone number or short co... |
| string (UUID) | No | Unique identifier for a messaging profile. |
| array[string] | No | A list of media URLs. |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
| ... | +8 optional params in references/api-details.md |
const response = await client.messages.schedule({
to: '+18445550001',
from: '+18005550101',
text: 'Appointment reminder',
sendAt: '2025-07-01T15:00:00Z',
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.textclient.messages.sendWhatsapp()POST /messages/whatsapp| Parameter | Type | Required | Description |
|---|---|---|---|
| string (E.164) | Yes | Phone number in +E.164 format associated with Whatsapp accou... |
| string (E.164) | Yes | Phone number in +E.164 format |
| object | Yes | |
| enum (WHATSAPP) | No | Message type - must be set to "WHATSAPP" |
| string (URL) | No | The URL where webhooks related to this message will be sent. |
const response = await client.messages.sendWhatsapp({
from: '+13125551234',
to: '+13125551234',
whatsapp_message: {},
});
console.log(response.data);response.data.idresponse.data.toresponse.data.fromresponse.data.typeresponse.data.directionresponse.data.body| Operation | SDK method | Endpoint | Use when | Required params |
|---|---|---|---|---|
| Retrieve a message | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Cancel a scheduled message | | | Remove, detach, or clean up an existing resource. | |
| List alphanumeric sender IDs | | | Inspect available resources or choose an existing resource before mutating it. | None |
| Create an alphanumeric sender ID | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Retrieve an alphanumeric sender ID | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Delete an alphanumeric sender ID | | | Remove, detach, or clean up an existing resource. | |
| Retrieve group MMS messages | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| List messaging hosted numbers | | | Inspect available resources or choose an existing resource before mutating it. | None |
| Retrieve a messaging hosted number | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update a messaging hosted number | | | Modify an existing resource without recreating it. | |
| List opt-outs | | | Inspect available resources or choose an existing resource before mutating it. | None |
| List high-level messaging profile metrics | | | Inspect available resources or choose an existing resource before mutating it. | None |
| Regenerate messaging profile secret | | | Trigger a follow-up action in an existing workflow rather than creating a new top-level resource. | |
| List alphanumeric sender IDs for a messaging profile | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Get detailed messaging profile metrics | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| List Auto-Response Settings | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Create auto-response setting | | | Create or provision an additional resource when the core tasks do not cover this flow. | |
| Get Auto-Response Setting | | | Fetch the current state before updating, deleting, or making control-flow decisions. | |
| Update Auto-Response Setting | | | Modify an existing resource without recreating it. | |
| Delete Auto-Response Setting | | | Remove, detach, or clean up an existing resource. | |
| Event | | Description |
|---|---|---|
| | Replaced Link Click |