Skip to main content

Number Porting (LNP)

Bring numbers from another carrier onto Orbit. A port-in request moves through carrier review, a Letter of Authorization (LOA), and a Firm Order Commitment (FOC) date before the number lands on your account — this guide covers the full self-serve flow: submitting a request, attaching and signing the LOA, reading the structured status timeline, reacting to webhooks, and migrating a large DID estate in one CSV upload. Read operations (list, get, timeline, the check / pre-validate preflight lints) are available to any role on the organization. Writes (create, LOA upload/sign/submit, supplement, cancel) require the numbers:write scope and an owner, admin, or developer role.

Submit a Port-In Request

numbers accepts a single E.164 string or an array for a multi-line port under one account. Omit country to store the request without dispatching to a carrier — useful when your team wants to attach documents before Orbit forwards it. Before submitting, run a portability preflight to catch a non-portable number early:
pre-validate and check/bulk are rate-limited to 5 requests per minute per auth context.

Upload and Sign the LOA

The Letter of Authorization proves you’re authorized to move the number. Orbit exposes a dedicated upload → sign → submit lifecycle instead of accepting a bare file URL:
Each step transitions loaSignatureStatus: upload sets it to draft, signing moves it to signed, and submit forwards it to the carrier. The state machine is one-directional — once a LOA is signed or submitted, re-uploading a replacement is refused; cancel the porting request and resubmit instead if the wrong document went out. Signing twice returns 422, not a silent merge. If the losing carrier kicks back a supplement request (a minor data correction — usually an address line or suite number), respond within the 7-day amend window so the FOC clock doesn’t restart:

Track the Status Timeline

GET /porting/:id/timeline expands the flat porting status into a structured, per-stage view — submitted → validating_loa → carrier_review → foc_assigned → foc_scheduled → completed — so you can show operators exactly where a port is stuck without calling the losing carrier.
focDate is echoed on the timeline once the losing carrier assigns one. If the port is rejected, the response includes a rejection object that translates the carrier’s opaque reject code (Telnyx/DIDWW/Bandwidth vocabularies, including numeric NIIF codes) into a plain-English summary and recommendedAction, tagged with a severity of operator_fixable, needs_carrier, or fatal so you know whether to fix your own data or escalate. Unknown codes fall through with the raw carrier text preserved rather than being hidden. Poll for a fresh carrier decision with POST /porting/:id/refresh, or cancel outright with DELETE /porting/:id.

React to Porting Webhooks

Subscribe to these events instead of polling timeline on a loop — see Webhook Events for the full catalog and Webhook Security for signature verification:

Bulk CSV Port-In (Enterprise Migration)

Migrating 50-500 DIDs from another carrier as a single handoff doesn’t fit the one-number-at-a-time form. Upload a CSV instead:
The CSV must have a header row with exactly these columns (order doesn’t matter, matching is case-insensitive):
Each valid row becomes its own porting request (status: submitted, stored for manual carrier dispatch) so your team can attach the LOA and country code per-row afterwards through the normal dashboard flow — bulk import does not attempt 50-500 sequential carrier calls inside one request. The response reports both sides of the batch:
Caps: 2MB file size (roughly 12k rows), 1000 rows per request, and a 30-second processing budget. The endpoint is rate-limited to 2 requests per minute per organization — split a larger ledger into multiple uploads rather than retrying a timed-out one.

Set Up a Ported Number

Once the port completes, provision the number’s regulated identity from the number’s detail page or API before you route traffic to it:
  • Emergency Address (E911) — register and validate the per-number dispatchable emergency address when the ported number carries voice.
  • CNAM & Caller ID — register the branded caller name recipients see, dip the carrier’s CNAM database for the currently registered name, and remediate “Spam Likely” or “Scam Likely” labels.

See Also

  • Number Lifecycle — what happens to porting-completed numbers afterward (auto-renew, release, reassignment).
  • Numbers API Reference — full request/response schemas for every porting endpoint, including toll-free RespOrg porting and hosted messaging (no-port SMS enablement).
  • Webhook Events — the complete Number / Porting event catalog.