+91) for now. renting needs a business KYC — once, per
account — and is paid from your wallet: the monthly rent up front and the
carrier’s per-minute cost of every call, on top of the agent’s own charge.
1. see what renting needs
GET /v1/phone-numbers/requirements says whether the account may rent, which
documents the KYC needs, and whether a verified KYC is already on file.
curl
object
eligible and, when false, a reason. mandateRequired is true for a
pay-as-you-go account: renting needs an auto-pay mandate, set up in the
dashboard’s billing page, so rent and call charges can always be covered.object[]
the KYC form. every listed type is required — for an Indian business
that is a registration certificate and the GST certificate — each with the
requiredFields to fill in alongside the file.object | null
set once the carrier accepted a KYC for this account. further numbers reuse
it: skip step 3’s documents and send a plain JSON body.
object
the auto-pay amount a pay-as-you-go account needs: rent plus a reserve, in
nanos of the wallet’s currency.
2. pick a number
GET /v1/phone-numbers/available searches the live inventory. filter by a
digit pattern (an area prefix like 8046) or a city; page with limit
(max 20) and offset.
curl
236250000000
nanos INR is ₹236.25 a month. voiceRateNanos is the inbound per-minute
carrier rate, outboundRateNanos the outbound one, billed per
outboundUnitSeconds.
3. rent it
POST /v1/phone-numbers. two shapes, depending on whether the account’s KYC
is already verified.
- first number (with documents)
- kyc already verified
multipart/form-data: a data field holding the JSON below, and the
document files in files, one per entry of documents, in the same order
(pdf, jpeg or png, up to 5 MB each).data
curl
documentTypeId values and the dataFields each needs come from step 1.
searchFilters is the search the number came from, so a matching
substitute can be bought if the number is taken meanwhile.201 with the rental. the first month’s rent is taken from the
wallet right away, then the documents go to the carrier:
4. wait for it
verification takes the carrier a while. pollGET /v1/phone-numbers/{id}
(every few seconds is fine) and watch status and timeline:
a rejected KYC is fixed with
POST /v1/phone-numbers/{id}/resubmit —
multipart again, with endUser, documents and every file, since the
carrier replaces them wholesale.
5. connect it to an agent
POST /v1/phone-numbers/{id}/agent with the agent’s UUID or handle. from then
on callers who dial the number get that agent, and
POST /v1/calls for that agent dials from it.
curl
409 agent_not_deployed). an
agent answers one number and a number one agent: connecting moves the number
off its previous agent. "agentId": null detaches. the agent’s
inboundPhoneNumber shows the connection.
renewals and charges
rent is charged again before each renewal (nextRenewalAt). a pay-as-you-go
account’s auto-pay mandate tops the wallet up when it is short; if it cannot,
the number goes past_due and, past the renewal, telephony is switched off —
every number released and pending rentals withdrawn with their prepaid rent
refunded. the dashboard’s usage page lists every rent, renewal and per-call
carrier charge.
release
POST /v1/phone-numbers/{id}/release gives the number up. it is irreversible,
so the body must spell the number:
curl
active is withdrawn instead and its prepaid
rent returned to the wallet.
list
GET /v1/phone-numbers returns every rental on the account, released ones
included, with the same fields.
next: sip trunks.