Buy and provision numbers
Buying a number on Orbit is a four-step loop: search → buy → audit the order → wire the number up. This guide walks the whole loop — single purchases, bulk orders of up to 50 DIDs, the pollable order record, and the provisioning steps that turn an owned DID into one that actually answers calls and messages. Reads (available, country-capabilities, orders) need the numbers:read scope; purchases and post-purchase wiring need numbers:write. The full endpoint surface is at Phone Numbers; the API reference is at Numbers. Outbound termination never touches a third-party carrier — buying a DID provisions inbound routing only, and outbound voice and SMS exit through Orbit’s own network.
1. Number basics
A phone number on Orbit is a DID identified in E.164 format — a leading+, country code, then digits, with no spaces or punctuation (+14155550100). Every endpoint in this guide accepts and returns E.164.
Three number types cover different use cases:
Capabilities are per-number flags for the channels the DID supports. The search filter accepts
sms, mms, voice, fax; the purchase-time request accepts sms, voice, whatsapp, rcs. The two enums are deliberately different — a purchase-time OTT registration (whatsapp, rcs) is an add-on requested at provisioning, not something inventory search filters on. Passing a value from the wrong enum returns 422.
2. Search inventory first
Never buy blind. Query live inventory before you construct an order:id you should forward into the purchase call (see below), plus monthly_cost and setup_cost as decimal strings, requires_registration, and expected_activation. A row flagged requires_registration: true lands in a regulatory hold unless you attach an approved compliance profile at purchase time.
Two discovery helpers narrow the search before you run it:
3. Buy a single DID
In the dashboard, go to Numbers → Buy, search, and check out — the wizard runs the same endpoints below. By API:
Pricing is resolved server-side against live inventory — a client-supplied price field is never honoured. The wallet is checked up front; insufficient balance returns
402 with the required and available amounts.
4. Bulk-provision up to 50 numbers
When you already have the exact E.164 list — fromGET /numbers/available or your own selection — submit it in one call instead of fifty:
200even when every row fails. The status code tells you the request was processed, not the outcome — inspectsucceeded.lengthto decide your UI state.- Failed rows are never charged.
total_cost_centssums every requested item;debited_centsis what was actually charged — only forsucceeded. There is no partial-batch debit. compliance_profile_idapplies to every item in the batch — pick one profile per order. The wallet is checked up front against the summed per-number cost, and each item can carry the sameproviderhint enum as the single purchase.- Rate-limited to 2 requests/minute per tenant, because one call fans out to up to 50 upstream carrier calls.
5. Poll and audit the order
Everybuy-bulk response carries an order_id — a stable, pollable record of the batch, persisted so partial fulfillment can be audited long after the request returned.
status is the aggregate across its lines: delivered (all succeeded), partial (some succeeded), or failed (none succeeded). Per line you get the E.164, country, capabilities, monthly cost, and the carrier error for failures — enough to reconcile a bulk provisioning run against finance records without replaying the batch. Orders are org-scoped: an unknown or not-owned id returns 404, not an exists-but-not-yours leak.
6. Wire the number up after purchase
A purchased DID with no route answers with silence. Do these immediately after the buy:Set the voice route
Pick where inbound calls terminate — an AI agent, IVR, queue, ring group, voicemail, SIP forward, or your own webhook — via the inbound-routing surface, keyed by the number in E.164 form:type and SMS routing (webhook, agent, auto_reply, disabled) are configured independently — set both if the number carries both capabilities. The full route-type catalog is in Phone Numbers.
Register the emergency address
If the number’s users can place calls to emergency services, register a validated dispatchable address per number:Set the caller name
Outbound callers see what the carrier CNAM database says. Register your brand per number:PATCH /api/v1/numbers/{id}/auto-renew with { "auto_renew": true }.
7. Trial numbers — and when to upgrade
A new organization can claim one free trial number from the shared pool, leased for 24 hours as a one-time lifetime claim — enough to test inbound calls and SMS before committing:409 if your org already holds an active trial or already owns purchased numbers. Upgrade the moment you need the number to survive past 24 hours, want a specific area code, or need capabilities the shared pool doesn’t guarantee — convert with purchase-trial to keep the exact number, or release it and buy a DID that matches your requirements. The full trial lifecycle is in Number Lifecycle.
8. Troubleshooting
Most post-purchase oddities trace to one of: capability mismatch (bought without the channel you need), a missing inbound route, or a regulatory hold still pending a compliance profile.
See Also
- Phone Numbers — search filters, purchase fields, number types, routing catalog, and bulk reserve.
- Number Lifecycle — auto-renew, scheduled release, reassign, reclaim, and the trial pool.
- Inventory & Export — list and export what you own.
- Regulatory Preview — document requirements before checkout.
- Emergency Address (E911) and CNAM & Caller ID — post-purchase provisioning.
- Send & Receive Messages — the first-message walkthrough once a route is set.