Loading...
Loading...
Search, purchase, and manage phone numbers with regulatory compliance and sender assignment.
npx skill4agent add zavudev/zavu-skills phone-numbersconst result = await zavu.phoneNumbers.available.list({
countryCode: "US",
type: "local",
contains: "555",
limit: 10,
});
for (const number of result.items) {
console.log(number.phoneNumber); // +15551234567
console.log(number.friendlyName); // (555) 123-4567
console.log(number.locality); // San Francisco
console.log(number.capabilities); // { sms: true, voice: true, mms: true }
console.log(number.pricing.monthlyPrice); // 1.25
console.log(number.pricing.isFreeEligible); // true (first US number is free)
}result = zavu.phone_numbers.available.list(
country_code="US",
type="local",
contains="555",
limit=10,
)
for number in result.items:
print(number.phone_number, number.pricing.monthly_price)result, err := client.PhoneNumbers.SearchAvailable(context.TODO(), zavudev.PhoneNumberSearchParams{
CountryCode: zavudev.String("US"),
Type: zavudev.String("local"),
Contains: zavudev.String("555"),
Limit: zavudev.Int(10),
})
for _, number := range result.Items {
fmt.Println(number.PhoneNumber, number.Pricing.MonthlyPrice)
}result = client.phone_numbers.search_available(country_code: "US", type: "local", contains: "555", limit: 10)
result.items.each { |number| puts "#{number.phone_number} #{number.pricing.monthly_price}" }$result = $client->phoneNumbers->searchAvailable([
'countryCode' => 'US', 'type' => 'local', 'contains' => '555', 'limit' => 10,
]);
foreach ($result->items as $number) {
echo $number->phoneNumber . ' ' . $number->pricing->monthlyPrice . "\n";
}const result = await zavu.phoneNumbers.create({
phoneNumber: "+15551234567",
name: "Primary Line",
});
console.log(result.phoneNumber.id); // pn_abc123
console.log(result.phoneNumber.status); // "active"| Type | Description |
|---|---|
| Local phone number |
| Mobile number |
| Toll-free number |
// List owned numbers
const numbers = await zavu.phoneNumbers.list({ status: "active" });
for (const pn of numbers.items) {
console.log(pn.id, pn.phoneNumber, pn.status);
}
// Get details
const pn = await zavu.phoneNumbers.get({ phoneNumberId: "pn_abc123" });
// Rename
await zavu.phoneNumbers.update({
phoneNumberId: "pn_abc123",
name: "Support Line",
});
// Assign to sender
await zavu.phoneNumbers.update({
phoneNumberId: "pn_abc123",
senderId: "snd_abc123",
});
// Unassign from sender
await zavu.phoneNumbers.update({
phoneNumberId: "pn_abc123",
senderId: null,
});
// Release number (must not be assigned to a sender)
await zavu.phoneNumbers.delete({ phoneNumberId: "pn_abc123" });// Check requirements for a country
const requirements = await zavu.phoneNumbers.requirements.list({
countryCode: "DE",
type: "local",
});
for (const req of requirements.items) {
console.log(req.countryCode, req.phoneNumberType, req.action);
for (const rt of req.requirementTypes) {
console.log(` ${rt.name}: ${rt.type} - ${rt.description}`);
}
}| Type | Description |
|---|---|
| Text field (name, business name) |
| Physical address |
| Identity document (passport, ID, etc.) |
| Action to perform |
const address = await zavu.addresses.create({
firstName: "John",
lastName: "Doe",
streetAddress: "123 Main St",
locality: "Berlin",
postalCode: "10115",
countryCode: "DE",
});
console.log(address.address.status); // "pending" -> "verified"// 1. Get upload URL
const upload = await zavu.documents.uploadUrl();
// 2. Upload file to the presigned URL (use fetch/axios)
await fetch(upload.uploadUrl, {
method: "PUT",
body: fileBuffer,
headers: { "Content-Type": "image/jpeg" },
});
// 3. Create document record
const doc = await zavu.documents.create({
name: "Passport Scan",
documentType: "passport",
storageId: "kg2abc123...",
mimeType: "image/jpeg",
fileSize: 102400,
});
console.log(doc.document.status); // "pending" -> "verified"| Type | Description |
|---|---|
| Passport |
| National ID card |
| Driver's license |
| Utility bill |
| Tax ID document |
| Business registration |
| Proof of address |
| Other document |
USDEBR