Phone, SMS & voice

Phone numbers

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
WhatsApp 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.

Note

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/countries
Response (trimmed)
{
  "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.

Warning

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

Endpoint What it does
GET /v1/phone-numbers List phone numbers
GET /v1/phone-numbers/{id} Get phone number
DELETE /v1/phone-numbers/{id} Release phone number
POST /v1/phone-numbers/purchase Purchase phone number
GET /v1/phone-numbers/claims/{claimId} Resolve a number claim
GET /v1/phone-numbers/countries List offerable number countries
GET /v1/phone-numbers/available Search available numbers
GET /v1/phone-numbers/availability Check country availability
GET /v1/phone-numbers/kyc Get KYC form spec
POST /v1/phone-numbers/kyc Submit KYC
GET /v1/phone-numbers/kyc/document/{documentId} View a KYC document on file
POST /v1/phone-numbers/kyc/upload-document Upload a KYC document
POST /v1/phone-numbers/kyc/validate-address Pre-validate KYC address
POST /v1/phone-numbers/kyc/share Create a hosted KYC link (not available yet)
GET /v1/phone-numbers/port-in List port-in orders
POST /v1/phone-numbers/port-in Port numbers in
POST /v1/phone-numbers/port-in/check Check portability
GET /v1/phone-numbers/port-in/claims/{claimId} Resolve a port claim
POST /v1/phone-numbers/port-in/documents Upload a porting document
GET /v1/phone-numbers/port-in/requirements Country porting requirements
GET /v1/phone-numbers/port-in/{id}/requirements A port-in order's pending requirements
DELETE /v1/phone-numbers/port-in/{id} Cancel a port-in
POST /v1/phone-numbers/kyc/review-packet Pre-review a KYC packet
GET /v1/phone-numbers/{id}/remediate Get declined requirements
POST /v1/phone-numbers/{id}/remediate Resubmit a declined number
POST /v1/phone-numbers/{id}/remediate/reply Reply to the regulatory reviewer
POST /v1/phone-numbers/{id}/remediate/respond Respond to the regulatory reviewer (message + corrections)
GET /v1/phone-numbers/stock-watches List stock watches
POST /v1/phone-numbers/stock-watches Watch an out-of-stock country
DELETE /v1/phone-numbers/stock-watches/{id} Stop watching a country
POST /v1/phone-numbers/{id}/whatsapp/request-code Request the WhatsApp verification code for a number

#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.