Phone, SMS & voice
Buy or port real phone numbers, then turn on calls, SMS and WhatsApp on the same number with one API.
A Pozy phone number is a real number on the public phone network. You buy it (or port one you already own), and it becomes the anchor for calls, texts and WhatsApp. One number can do all three, or only the one you need.
This section covers getting and running numbers, texting from them, calling from them and showing your brand when you call.
#What a number can do
| Capability | How it works | Where |
|---|---|---|
| Calls | On by default as soon as the number is active. Route inbound calls to a phone, a SIP address or an AI agent. Place outbound calls from the API or a browser. | Every country Pozy sells numbers in |
| SMS and MMS | Turn on per number. US numbers need a carrier registration before they can send, which is not available yet. | SMS-capable countries and numbers only |
| Connect the number to a WhatsApp Business account. Any type except toll-free. | Every country | |
| Branded calling | Not available yet. Show your business name, logo and call reason on the callee's phone. | US numbers calling US mobiles |
There is no separate "WhatsApp number" or "SMS number". Features hang off the number as sub-resources: POST /v1/phone-numbers/{id}/voice, POST /v1/phone-numbers/{id}/sms. Activity lives on its own resources: call history at /v1/calls, texts at /v1/sms/messages.
Phone, SMS and voice need a payment method on file. Without one, a purchase returns 402 with payment_required. Numbers do not carry emergency service (911, 112).
#The lifecycle
#Check what is on offer
GET /v1/phone-numbers/countries lists every country you can buy in, with the monthly price and a flag for each capability. It needs no API key, so you can drive a public country picker from it.
#Get a number
Buy one from live inventory, or port in a number you already own. Regulated countries ask for identity documents first (KYC).
#Turn on what you need
Calls are already on. Enable SMS (and register for 10DLC in the US), or connect WhatsApp.
#Use it
Place and receive calls, send texts and read one call history across every number.
#List the countries
curl https://api.pozy.ai/v1/phone-numbers/countriesconst res = await fetch("https://api.pozy.ai/v1/phone-numbers/countries", {
headers: { Authorization: `Bearer ${process.env.POZY_API_KEY}` },
});
const data = await res.json();
if (!res.ok) throw new Error(data.error);
for (const c of data.countries) {
console.log(c.code, `$${(c.monthlyCents / 100).toFixed(2)}/mo`, {
sms: c.smsAvailable,
whatsapp: c.whatsappAvailable,
kyc: c.needsKyc,
inStock: c.inStock,
});
}import requests
resp = requests.get("https://api.pozy.ai/v1/phone-numbers/countries", timeout=30)
for c in resp.json()["countries"]:
print(c["code"], c["monthlyCents"] / 100, c["smsAvailable"], c["needsKyc"]){
"countries": [
{
"code": "US",
"tier": 1,
"monthlyCents": 300,
"needsKyc": false,
"callsAvailable": true,
"smsAvailable": true,
"whatsappAvailable": true,
"inStock": true,
"preOrderable": false,
"types": [
{ "numberType": "local", "monthlyCents": 300, "smsAvailable": true, "needsKyc": false, "inStock": true, "fulfilment": "instant" },
{ "numberType": "toll_free", "monthlyCents": 300, "smsAvailable": false, "whatsappAvailable": false, "inStock": true, "fulfilment": "instant" }
]
}
]
}The country fields describe its default type, which is the first entry in types. Countries come back cheapest first.
| Field | Meaning |
|---|---|
monthlyCents |
Price per number per month, in US cents |
needsKyc |
The country regulates who can hold a number. You submit identity details before the number is ordered. |
inStock |
A stock snapshot, refreshed every few hours. The purchase checks again. |
preOrderable |
Out of stock, but you can still order it through the KYC form. Sourcing usually takes 2 to 4 weeks. |
fulfilment |
instant provisions in the request. request means the number is sourced to order. |
outboundCallingAvailable |
Business-initiated WhatsApp calls. This is not about regular phone calls. |
For one country in detail (area codes in stock, the address rule for KYC), call GET /v1/phone-numbers/availability?country=GB. See Buy a number.
#Number types
Each number is local, mobile, national or toll_free, depending on what the country stocks. Every country has a default type chosen to work with as many capabilities as possible. Pass numberType to pick another.
Toll-free numbers can never connect WhatsApp. Buy them with connectWhatsapp: false and use them for calls and SMS.
#Pricing
A number costs a flat monthly price set by its country and type. It is charged in full when the number activates and again on the 1st of each month, with no daily proration. The price is stored on the number at purchase (monthlyCents), so it does not change if the rate card does. Minutes and segments are billed on top.
| What | Price |
|---|---|
| Outbound messages (inbox replies, broadcasts, sequences; not X DMs or SMS) | First 10,000 each month free, then $1 per 10,000 |
| Managed ads (running or in review) | First 500 free, then $0.01 per active ad per month |
| X post | $0.015 per post |
| X post containing a link | $0.20 per post |
| X reads (analytics, lookups) | $0.005 per resource |
| X DMs | $0.01 per DM read, $0.015 per DM sent |
| Phone numbers | From $3 per number per month, by country |
| Calls | From $0.01 per minute by destination. Recording $0.004 per minute, transcription $0.03 per minute |
| Branded calling | $0.10 per branded call |
| SMS | From $0.008 per segment by destination |
| US 10DLC registration | $9 one-time brand fee, then $20 per month per campaign ($4 for a sole proprietor) |
| RCS agent | $150 setup, then $160 per month in the US or $75 elsewhere, plus $750 on US carrier approval |
| Creator payouts | 4% of each transfer, minimum $0.50 |
| Support assistant | At cost per answered question, capped at $100 per month |
See Pricing for how usage lands on your invoice.
#Statuses
| Status | Meaning |
|---|---|
pending_payment |
Waiting for a payment method |
pending_regulatory |
In regulatory review (KYC countries) |
regulatory_declined |
The reviewer declined it. You can fix and resubmit. |
provisioning, verifying |
Being set up. Not billed until active. |
active |
Ready to use |
suspended |
Stopped, for example after a failed payment. Recovers to active. |
releasing, released |
Returned to the carrier. released is final. |
#In this section
#Endpoints
#Webhook events
Number status events carry a whatsapp.number. prefix for historical reasons. They fire for every number, whether or not WhatsApp is on it.
| Event | When it fires |
|---|---|
whatsapp.number.activated |
WhatsApp number activated. |
whatsapp.number.declined |
WhatsApp number declined. |
whatsapp.number.action_required |
WhatsApp number action required. |
whatsapp.number.verification_required |
WhatsApp number verification-required. |
whatsapp.number.suspended |
WhatsApp number suspended. |
whatsapp.number.reactivated |
WhatsApp number reactivated. |
whatsapp.number.released |
WhatsApp number released. |
whatsapp.number.kyc_submitted |
WhatsApp number KYC submitted. |
phone_number.stock_available |
Phone-number stock available. |