Phone numbers are required for sending SMS and WhatsApp messages. You can search for available numbers, purchase them, and manage them through the API.
Search Available Numbers
Find phone numbers available for purchase:
const result = await client.phoneNumbers.searchAvailable({
countryCode: "US",
type: "local",
limit: 10,
});
for (const number of result.items) {
console.log(number.phoneNumber, number.locality, number.region);
console.log("Monthly:", number.pricing.monthlyPrice);
console.log("Free eligible:", number.pricing.isFreeEligible);
}
Search Parameters
const result = await client.phoneNumbers.searchAvailable({
countryCode: "US", // Required: Two-letter country code
type: "local", // Optional: local, mobile, tollFree
contains: "555", // Optional: Pattern to search for
limit: 20, // Optional: Max results (default: 10, max: 50)
});
Purchase a Phone Number
const phoneNumber = await client.phoneNumbers.purchase({
phoneNumber: "+14155551234",
name: "Customer Support",
});
console.log(phoneNumber.id); // pn_abc123
console.log(phoneNumber.phoneNumber); // +14155551234
console.log(phoneNumber.status); // active
Your first US phone number is free. The isFreeEligible field in search results indicates eligible numbers.
List Phone Numbers
const result = await client.phoneNumbers.list({});
for (const number of result.items) {
console.log(number.id, number.phoneNumber, number.name);
console.log("Status:", number.status);
console.log("Assigned to:", number.senderId);
}
// With filters
const result = await client.phoneNumbers.list({
status: "active",
limit: 50,
cursor: "cursor_xxx",
});
Get Phone Number
const number = await client.phoneNumbers.get({
phoneNumberId: "pn_abc123",
});
console.log(number.phoneNumber);
console.log(number.name);
console.log(number.capabilities);
console.log(number.pricing.monthlyPrice);
console.log(number.nextRenewalDate);
Update Phone Number
Update the name or sender assignment:
// Update name
const number = await client.phoneNumbers.update({
phoneNumberId: "pn_abc123",
name: "Marketing Line",
});
// Assign to a sender
const number = await client.phoneNumbers.update({
phoneNumberId: "pn_abc123",
senderId: "snd_xyz789",
});
// Unassign from sender
const number = await client.phoneNumbers.update({
phoneNumberId: "pn_abc123",
senderId: null,
});
Release Phone Number
Release a phone number you no longer need:
await client.phoneNumbers.release({
phoneNumberId: "pn_abc123",
});
You cannot release a phone number assigned to a sender. Unassign it first.
Response Types
Phone Number Object
interface PhoneNumber {
id: string;
phoneNumber: string;
name?: string;
capabilities: string[]; // ["sms", "voice", "mms"]
status: "active" | "suspended" | "pending";
senderId?: string;
pricing: {
monthlyPrice: number;
upfrontCost: number;
monthlyCost: number;
isFreeNumber: boolean;
};
nextRenewalDate?: string;
createdAt: string;
updatedAt?: string;
}
Available Phone Number Object
interface AvailablePhoneNumber {
phoneNumber: string;
friendlyName?: string;
locality?: string;
region?: string;
capabilities: {
sms: boolean;
voice: boolean;
mms: boolean;
};
pricing: {
monthlyPrice: number;
upfrontPrice: number;
isFreeEligible: boolean;
};
}
Error Handling
try {
const number = await client.phoneNumbers.purchase({
phoneNumber: "+14155551234",
});
} catch (error) {
if (error.code === "insufficient_balance") {
console.log("Add funds to your account");
} else if (error.code === "not_found") {
console.log("Phone number is no longer available");
}
}