Skip to main content
A number is a phone line your organization owns. Inbound calls to it ring the agent you assign. You can buy a new number from the carrier, or import one you already own, then route it to any agent — all over the API.

The lifecycle

1

Search

GET /numbers/search browses purchasable inventory. Filter by areaCode, locality, administrativeArea (state), numberType (local or toll_free), required features (voice, sms, …), or a vanity contains / endsWith. bestEffort (default true) widens a too-narrow filter; set it false for strict last-four or vanity matching.
2

Reserve (optional)

POST /numbers/reserve holds a number (about 30 minutes) so it can’t be taken while you confirm. This does not charge your wallet. Pass the returned reservation id to purchase.
3

Purchase

POST /numbers/purchase buys the number and debits your prepaid wallet. Include the reservationId from the hold so the order can’t be sniped. Returns the owned number.
4

Assign

POST /numbers/{id}/assign points the number at an agent (sets its default agent). Inbound calls now reach that agent.
Already own a number elsewhere? POST /numbers/import brings a number you hold on your carrier account into Flowyte with no wallet charge — and can assign it to an agent in the same call.

Releasing vs unassigning

Detaching a number has two very different outcomes:
DELETE /numbers/{id} is irreversible — the number goes back to the carrier and may be gone for good. To park a number without losing it, unassign it instead.

Vendor-neutral provider field

Each number carries a provider field. It is an opaque, vendor-neutral label for the carrier behind the line — treat it as an identifier, not a brand to depend on. Cost is reported as monthlyCost (and setupCost on available numbers).

In the API

A purchase needs funds in your prepaid wallet — an empty balance returns 402. A number that was taken between search and purchase returns 409.
The agent must be published to answer live calls on its assigned number.