Telnyx Iot - JavaScript

SkillDev tools

Manage IoT SIM cards, eSIMs, data plans, and wireless connectivity. Use when building IoT/M2M solutions. This skill provides JavaScript SDK examples.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Telnyx Iot - JavaScript skill

What this skill tells your AI

The instructions your AI receives, as published by team-telnyx/ai in skills/telnyx-iot-javascript/SKILL.md and read by ahel’s review.

Installation

npm install telnyx@6.74.2

Setup

import Telnyx from 'telnyx';

const client = new Telnyx({
  apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
});

All examples below assume client is already initialized as shown above.

Error Handling

All API calls can fail with network errors, rate limits (429), validation errors (422), or authentication errors (401). Always handle errors in production code:

try {
  const result = await client.messages.send({ to: '+13125550001', from: '+13125550002', text: 'Hello' });
} catch (err) {
  if (err instanceof Telnyx.APIConnectionError) {
    console.error('Network error — check connectivity and retry');
  } else if (err instanceof Telnyx.RateLimitError) {
    // 429: rate limited — wait and retry with exponential backoff
    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');
    }
  }
}

Common error codes: 401 invalid API key, 403 insufficient permissions, 404 resource not found, 422 validation error (check field formats), 429 rate limited (retry with exponential backoff).

Important Notes

  • Pagination: List methods return an auto-paginating iterator. Use for await (const item of result) { ... } to iterate through all pages automatically.

Purchase eSIMs

Purchases and registers the specified amount of eSIMs to the current user's account. If sim_card_group_id is provided, the eSIMs will be associated with that group. Otherwise, the default group for the current user will be used.

POST /actions/purchase/esims — Required: amount

Optional: product (string), sim_card_group_id (uuid), status (enum: enabled, disabled, standby), tags (array[string]), whitelabel_name (string)

const purchase = await client.actions.purchase.create({ amount: 10 });

console.log(purchase.data);

Returns: actions_in_progress (boolean), authorized_imeis (array | null), created_at (string), current_billing_period_consumed_data (object), data_limit (object), eid (string | null), esim_installation_status (enum: released, disabled), iccid (string), id (uuid), imsi (string), msisdn (string), record_type (string), resources_with_in_progress_actions (array[object]), sim_card_group_id (uuid), status (object), tags (array[string]), type (enum: physical, esim), updated_at (string), version (string), voice_enabled (boolean)

Register SIM cards

Register the SIM cards associated with the provided registration codes to the current user's account. If sim_card_group_id is provided, the SIM cards will be associated with that group. Otherwise, the default group for the current user will be used.

POST /actions/register/sim_cards — Required: registration_codes

Optional: sim_card_group_id (uuid), status (enum: enabled, disabled, standby), tags (array[string])

const register = await client.actions.register.create({
  registration_codes: ['0000000001', '0000000002', '0000000003'],
});

console.log(register.data);

Returns: actions_in_progress (boolean), authorized_imeis (array | null), created_at (string), current_billing_period_consumed_data (object), data_limit (object), eid (string | null), esim_installation_status (enum: released, disabled), iccid (string), id (uuid), imsi (string), msisdn (string), record_type (string), resources_with_in_progress_actions (array[object]), sim_card_group_id (uuid), status (object), tags (array[string]), type (enum: physical, esim), updated_at (string), version (string), voice_enabled (boolean)

List bulk SIM card actions

This API lists a paginated collection of bulk SIM card actions. A bulk SIM card action contains details about a collection of individual SIM card actions.

GET /bulk_sim_card_actions

// Automatically fetches more pages as needed.
for await (const bulkSimCardActionListResponse of client.bulkSimCardActions.list()) {
  console.log(bulkSimCardActionListResponse.id);
}

Returns: action_type (enum: bulk_disable_voice, bulk_enable_voice, bulk_set_public_ips), created_at (string), id (uuid), record_type (string), settings (object), sim_card_actions_summary (array[object]), updated_at (string)

Get bulk SIM card action details

This API fetches information about a bulk SIM card action. A bulk SIM card action contains details about a collection of individual SIM card actions.

GET /bulk_sim_card_actions/{id}

const bulkSimCardAction = await client.bulkSimCardActions.retrieve(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(bulkSimCardAction.data);

Returns: action_type (enum: bulk_disable_voice, bulk_enable_voice, bulk_set_public_ips), created_at (string), id (uuid), record_type (string), settings (object), sim_card_actions_summary (array[object]), updated_at (string)

List OTA updates

GET /ota_updates

// Automatically fetches more pages as needed.
for await (const otaUpdateListResponse of client.otaUpdates.list()) {
  console.log(otaUpdateListResponse.id);
}

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), status (enum: in-progress, completed, failed), type (enum: sim_card_network_preferences), updated_at (string)

Get OTA update

This API returns the details of an Over the Air (OTA) update.

GET /ota_updates/{id}

const otaUpdate = await client.otaUpdates.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(otaUpdate.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_id (uuid), status (enum: in-progress, completed, failed), type (enum: sim_card_network_preferences), updated_at (string)

List SIM card actions

This API lists a paginated collection of SIM card actions. It enables exploring a collection of existing asynchronous operations using specific filters.

GET /sim_card_actions

// Automatically fetches more pages as needed.
for await (const simCardAction of client.simCards.actions.list()) {
  console.log(simCardAction.id);
}

Returns: action_type (enum: enable, enable_standby_sim_card, disable, set_standby), created_at (string), id (uuid), record_type (string), settings (object | null), sim_card_id (uuid), status (object), updated_at (string)

Get SIM card action details

This API fetches detailed information about a SIM card action to follow-up on an existing asynchronous operation.

GET /sim_card_actions/{id}

const action = await client.simCards.actions.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(action.data);

Returns: action_type (enum: enable, enable_standby_sim_card, disable, set_standby), created_at (string), id (uuid), record_type (string), settings (object | null), sim_card_id (uuid), status (object), updated_at (string)

List SIM card data usage notifications

Lists a paginated collection of SIM card data usage notifications. It enables exploring the collection using specific filters.

GET /sim_card_data_usage_notifications

// Automatically fetches more pages as needed.
for await (const simCardDataUsageNotification of client.simCardDataUsageNotifications.list()) {
  console.log(simCardDataUsageNotification.id);
}

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

Create a new SIM card data usage notification

Creates a new SIM card data usage notification.

POST /sim_card_data_usage_notifications — Required: sim_card_id, threshold

const simCardDataUsageNotification = await client.simCardDataUsageNotifications.create({
  sim_card_id: '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
  threshold: {},
});

console.log(simCardDataUsageNotification.data);

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

Get a single SIM card data usage notification

Get a single SIM Card Data Usage Notification.

GET /sim_card_data_usage_notifications/{id}

const simCardDataUsageNotification = await client.simCardDataUsageNotifications.retrieve(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(simCardDataUsageNotification.data);

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

Updates information for a SIM Card Data Usage Notification

Updates information for a SIM Card Data Usage Notification.

PATCH /sim_card_data_usage_notifications/{id}

Optional: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

const simCardDataUsageNotification = await client.simCardDataUsageNotifications.update(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(simCardDataUsageNotification.data);

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

Delete SIM card data usage notifications

Delete the SIM Card Data Usage Notification.

DELETE /sim_card_data_usage_notifications/{id}

const simCardDataUsageNotification = await client.simCardDataUsageNotifications.delete(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(simCardDataUsageNotification.data);

Returns: created_at (string), id (uuid), record_type (string), sim_card_id (uuid), threshold (object), updated_at (string)

List SIM card group actions

This API allows listing a paginated collection a SIM card group actions. It allows to explore a collection of existing asynchronous operation using specific filters.

GET /sim_card_group_actions

// Automatically fetches more pages as needed.
for await (const simCardGroupAction of client.simCardGroups.actions.list()) {
  console.log(simCardGroupAction.id);
}

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Get SIM card group action details

This API allows fetching detailed information about a SIM card group action resource to make follow-ups in an existing asynchronous operation.

GET /sim_card_group_actions/{id}

const action = await client.simCardGroups.actions.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(action.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Get all SIM card groups

Get all SIM card groups belonging to the user that match the given filters.

GET /sim_card_groups

// Automatically fetches more pages as needed.
for await (const simCardGroupListResponse of client.simCardGroups.list()) {
  console.log(simCardGroupListResponse.id);
}

Returns: consumed_data (object), created_at (string), data_limit (object), default (boolean), id (uuid), name (string), private_wireless_gateway_id (uuid), record_type (string), sim_card_count (integer), updated_at (string), wireless_blocklist_id (uuid)

Create a SIM card group

Creates a new SIM card group object

POST /sim_card_groups — Required: name

Optional: data_limit (object)

const simCardGroup = await client.simCardGroups.create({ name: 'My Test Group' });

console.log(simCardGroup.data);

Returns: consumed_data (object), created_at (string), data_limit (object), default (boolean), id (uuid), name (string), private_wireless_gateway_id (uuid), record_type (string), updated_at (string), wireless_blocklist_id (uuid)

Get SIM card group

Returns the details regarding a specific SIM card group

GET /sim_card_groups/{id}

const simCardGroup = await client.simCardGroups.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(simCardGroup.data);

Returns: consumed_data (object), created_at (string), data_limit (object), default (boolean), id (uuid), name (string), private_wireless_gateway_id (uuid), record_type (string), updated_at (string), wireless_blocklist_id (uuid)

Update a SIM card group

Updates a SIM card group

PATCH /sim_card_groups/{id}

Optional: data_limit (object), name (string)

const simCardGroup = await client.simCardGroups.update('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(simCardGroup.data);

Returns: consumed_data (object), created_at (string), data_limit (object), default (boolean), id (uuid), name (string), private_wireless_gateway_id (uuid), record_type (string), updated_at (string), wireless_blocklist_id (uuid)

Delete a SIM card group

Permanently deletes a SIM card group

DELETE /sim_card_groups/{id}

const simCardGroup = await client.simCardGroups.delete('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(simCardGroup.data);

Returns: consumed_data (object), created_at (string), data_limit (object), default (boolean), id (uuid), name (string), private_wireless_gateway_id (uuid), record_type (string), updated_at (string), wireless_blocklist_id (uuid)

Request Private Wireless Gateway removal from SIM card group

This action will asynchronously remove an existing Private Wireless Gateway definition from a SIM card group. Completing this operation defines that all SIM cards in the SIM card group will get their traffic handled by Telnyx's default mobile network configuration.

POST /sim_card_groups/{id}/actions/remove_private_wireless_gateway

const response = await client.simCardGroups.actions.removePrivateWirelessGateway(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(response.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Request Wireless Blocklist removal from SIM card group

This action will asynchronously remove an existing Wireless Blocklist to all the SIMs in the SIM card group.

POST /sim_card_groups/{id}/actions/remove_wireless_blocklist

const response = await client.simCardGroups.actions.removeWirelessBlocklist(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
);

console.log(response.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Request Private Wireless Gateway assignment for SIM card group

This action will asynchronously assign a provisioned Private Wireless Gateway to the SIM card group. Completing this operation defines that all SIM cards in the SIM card group will get their traffic controlled by the associated Private Wireless Gateway. This operation will also imply that new SIM cards assigned to a group will inherit its network definitions.

POST /sim_card_groups/{id}/actions/set_private_wireless_gateway — Required: private_wireless_gateway_id

const response = await client.simCardGroups.actions.setPrivateWirelessGateway(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
  { private_wireless_gateway_id: '6a09cdc3-8948-47f0-aa62-74ac943d6c58' },
);

console.log(response.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Request Wireless Blocklist assignment for SIM card group

This action will asynchronously assign a Wireless Blocklist to all the SIMs in the SIM card group.

POST /sim_card_groups/{id}/actions/set_wireless_blocklist — Required: wireless_blocklist_id

const response = await client.simCardGroups.actions.setWirelessBlocklist(
  '6a09cdc3-8948-47f0-aa62-74ac943d6c58',
  { wireless_blocklist_id: '6a09cdc3-8948-47f0-aa62-74ac943d6c58' },
);

console.log(response.data);

Returns: created_at (string), id (uuid), record_type (string), settings (object), sim_card_group_id (uuid), status (enum: in-progress, completed, failed), type (enum: set_private_wireless_gateway, remove_private_wireless_gateway, set_wireless_blocklist, remove_wireless_blocklist), updated_at (string)

Preview SIM card orders

Preview SIM card order purchases.

POST /sim_card_order_preview — Required: quantity, address_id

const response = await client.simCardOrderPreview.preview({
  address_id: '1293384261075731499',
  quantity: 21,
});

console.log(response.data);

Returns: quantity (integer), record_type (string), shipping_cost (object), sim_cards_cost (object), total_cost (object)

Get all SIM card orders

Get all SIM card orders according to filters.

GET /sim_card_orders

// Automatically fetches more pages as needed.
for await (const simCardOrder of client.simCardOrders.list()) {
  console.log(simCardOrder.id);
}

Returns: cost (object), created_at (string), id (uuid), order_address (object), quantity (integer), record_type (string), status (enum: pending, processing, ready_to_ship, shipped, delivered, canceled), tracking_url (uri), updated_at (string)

Create a SIM card order

Creates a new order for SIM cards.

POST /sim_card_orders — Required: address_id, quantity

const simCardOrder = await client.simCardOrders.create({
  address_id: '1293384261075731499',
  quantity: 23,
    sim_card_group_id: '550e8400-e29b-41d4-a716-446655440000',
});

console.log(simCardOrder.data);

Returns: cost (object), created_at (string), id (uuid), order_address (object), quantity (integer), record_type (string), status (enum: pending, processing, ready_to_ship, shipped, delivered, canceled), tracking_url (uri), updated_at (string)

Get a single SIM card order

Get a single SIM card order by its ID.

GET /sim_card_orders/{id}

const simCardOrder = await client.simCardOrders.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(simCardOrder.data);

Returns: cost (object), created_at (string), id (uuid), order_address (object), quantity (integer), record_type (string), status (enum: pending, processing, ready_to_ship, shipped, delivered, canceled), tracking_url (uri), updated_at (string)

Get all SIM cards

Get all SIM cards belonging to the user that match the given filters.

GET /sim_cards

// Automatically fetches more pages as needed.
for await (const simpleSimCard of client.simCards.list()) {
  console.log(simpleSimCard.id);
}

Returns: actions_in_progress (boolean), authorized_imeis (array | null), created_at (string), current_billing_period_consumed_data (object), data_limit (object), eid (string | null), esim_installation_status (enum: released, disabled), iccid (string), id (uuid), imsi (string), msisdn (string), record_type (string), resources_with_in_progress_actions (array[object]), sim_card_group_id (uuid), status (object), tags (array[string]), type (enum: physical, esim), updated_at (string), version (string), voice_enabled (boolean)

Request bulk disabling voice on SIM cards.

This API triggers an asynchronous operation to disable voice on SIM cards belonging to a specified SIM Card Group. For each SIM Card a SIM Card Action will be generated.

POST /sim_cards/actions/bulk_disable_voice — Required: sim_card_group_id

const response = await client.simCards.actions.bulkDisableVoice({
  sim_card_group_id: '6b14e151-8493-4fa1-8664-1cc4e6d14158',
});

console.log(response.data);

Returns: action_type (enum: bulk_disable_voice, bulk_enable_voice, bulk_set_public_ips), created_at (string), id (uuid), record_type (string), settings (object), updated_at (string)

Request bulk enabling voice on SIM cards.

This API triggers an asynchronous operation to enable voice on SIM cards belonging to a specified SIM Card Group. For each SIM Card a SIM Card Action will be generated.

POST /sim_cards/actions/bulk_enable_voice — Required: sim_card_group_id

const response = await client.simCards.actions.bulkEnableVoice({
  sim_card_group_id: '6b14e151-8493-4fa1-8664-1cc4e6d14158',
});

console.log(response.data);

Returns: action_type (enum: bulk_disable_voice, bulk_enable_voice, bulk_set_public_ips), created_at (string), id (uuid), record_type (string), settings (object), updated_at (string)

Request bulk setting SIM card public IPs.

This API triggers an asynchronous operation to set a public IP for each of the specified SIM cards. For each SIM Card a SIM Card Action will be generated. The status of the SIM Card Action can be followed through the List SIM Card Action API.

POST /sim_cards/actions/bulk_set_public_ips — Required: sim_card_ids

const response = await client.simCards.actions.bulkSetPublicIPs({
  sim_card_ids: ['6b14e151-8493-4fa1-8664-1cc4e6d14158'],
});

console.log(response.data);

Returns: action_type (enum: bulk_disable_voice, bulk_enable_voice, bulk_set_public_ips), created_at (string), id (uuid), record_type (string), settings (object), updated_at (string)

Validate SIM cards registration codes

It validates whether SIM card registration codes are valid or not.

POST /sim_cards/actions/validate_registration_codes

Optional: registration_codes (array[string])

const response = await client.simCards.actions.validateRegistrationCodes();

console.log(response.data);

Returns: invalid_detail (string | null), record_type (string), registration_code (string), valid (boolean)

Get SIM card

Returns the details regarding a specific SIM card.

GET /sim_cards/{id}

const simCard = await client.simCards.retrieve('6a09cdc3-8948-47f0-aa62-74ac943d6c58');

console.log(simCard.data);

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
214
Forks
21
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
telnyx-iot-javascript
Source
github.com/team-telnyx/ai