Troubleshoot port-out rejections
A port-out that never reaches the carrier — or reaches it and gets refused back — surfaces one of three codes. Work the branch that matches your code; all three are rejected before anything irreversible happens, so the number stays in your account in every case.This page covers the losing-side (port-OUT) rejections. Port-in failures — a
rejected LOA or carrier review on a number you are bringing INTO Orbit — are part
of the porting flow. Purchase-step failures are on
Troubleshoot number purchase failures.
Port-out lifecycle recap
A port-out runs three stages; the ownership model behind them is Port-out lifecycle and ownership model:- Submitted — your request passes the status, PIN, and concurrency gates and
the number flips to
port_out_pending. - Carrier cycle — the gaining carrier validates and schedules a Firm Order Commitment (FOC) date. The cancel window closes when the carrier locks the order.
- Released / failed — the carrier completes the cutover (number gone) or the order fails / is cancelled (number back at its prior status).
Decision table
Check which rejection you actually received before you retry: a PIN mismatch retried
with the same wrong PIN re-rejects, and a 502 retried with unchanged account data
re-runs the same carrier rejection.
Recover a PIN-blocked port-out
When protection is enabled, only the PIN holder can dispatch — that is the control working. The PIN is scrypt-hashed at rest and never returned by any read, so a lost PIN cannot be recovered. Rotate a fresh one withPOST /api/v1/numbers/:id/port-out-protection:
DELETE the same endpoint to disable protection.
Example: submit with the PIN in the envelope
A correct submission carries the PIN in the request body alongside the carrier account proof and the gaining carrier’s OCN:POST /api/v1/numbers/porting/out), one port_out_pin covers
the batch — if any protected number is in the batch and the PIN does not match every
protected number, the entire request rejects before any wireless dispatch.
Recover a carrier-rejected port-out
A502 CARRIER_PORT_OUT_FAILED means the request reached the carrier and the
carrier said no. Before you retry:
- Validate the gaining carrier’s OCN. A wrong
target_carrier_ocnroutes the order to a carrier that does not hold the gaining account, or the gaining carrier itself rejected an account detail that did not match its records. Confirm the OCN and the account details with the gaining carrier’s portal before re-submitting. - Check the carrier’s message. The
error.messageusually names the carrier rejection reason — an unpaid balance on the losing carrier account, a mismatched account holder, or a carrier-side freeze. Fix that field, then retry. - Confirm the rollback. After a 502 the number’s status rolled back to its
prior portable state, so the next attempt claims it cleanly. If a subsequent
submit returns
409 CONFLICT, an earlier attempt is still in flight — listGET /api/v1/numbers/porting/outand cancel the stale order first.
Suspicious-port-out protocol: freeze, vet, release
If a rejection (or thenumber.port_out.requested webhook) points at a port-out
you did not authorize, work the freeze-first order:
- Freeze. Set (or rotate) a PIN on the number before anything else. From that
point every unauthorized submission fails at the PIN gate with
401 PORT_OUT_PIN_MISMATCHand never reaches the carrier. - Vet. Confirm the request genuinely came from the subscriber — signed authorization matching your account records, and the gaining carrier’s OCN checked against the carrier before you release anything.
- Release. Present the correct PIN only once the authorization checks out. The gate holds until then.
When to escalate
Open a support ticket when:- The code is
422 PORT_OUT_NOT_SUPPORTED— support dispatches the port-out through the carrier portal for numbers on a carrier with no self-serve adapter. - A
502recurs with corrected account details and a validated OCN — the carrier rejection needs operator attention. - A
401 PORT_OUT_PIN_MISMATCHappears and you never set a PIN — an unexpected PIN gate on a number you control means someone with write access enabled protection; treat it as a compromised-credential event and rotate your API keys.
meta.request_id of one failed call, the number in E.164 form,
and the error code.
See also
- Port numbers out safely — the full port-out runbook: pre-flight, PIN protection, single and batch submit, tracking, and cancellation.
- Port-out lifecycle and ownership model — the state machine, the concurrency guards, and the PIN gate this page works through.
- Numbers overview and Porting — the endpoint-level reference for both directions.
- Error codes reference — the full code catalogue.