The lifecycle
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.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.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.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:| You want to… | Call | Result |
|---|---|---|
| Keep owning it, just free it from the agent | DELETE /numbers/{id}/assign | Moves to your pool (status: available); reassign any time |
| Stop owning and paying for it | DELETE /numbers/{id} | Permanently released to the carrier |
Vendor-neutral provider field
Each number carries aprovider 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
| Action | Endpoint | Scope |
|---|---|---|
| List owned numbers | GET /numbers | numbers:read |
| Search available numbers | GET /numbers/search | numbers:read |
| Re-check one number’s price | GET /numbers/available/{e164} | numbers:read |
| Reserve a hold | POST /numbers/reserve | numbers:write |
| Release a hold | DELETE /numbers/reserve/{id} | numbers:write |
| Purchase | POST /numbers/purchase | numbers:write |
| Import an owned number | POST /numbers/import | numbers:write |
| Assign to an agent | POST /numbers/{id}/assign | numbers:write |
| Unassign (keep, move to pool) | DELETE /numbers/{id}/assign | numbers:write |
| Release to carrier | DELETE /numbers/{id} | numbers:write |
A purchase needs funds in your prepaid wallet — an empty balance returns
402. A number that was
taken between search and purchase returns 409.