> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Number status map: from purchase to release

> The six states a phone number moves through (active, pending_compliance, inactive, released, parked, suspended), who sets each, and what the list endpoints and the Active tab filter on.

# Number status map

Every phone number in Orbit carries a `status` value. The vocabulary is
a closed set of six states, and every Numbers page and list endpoint you
touch reads one of them. This page defines what each state means, who
moves a number into it, and which transitions are reversible. The
lifecycle operations (auto-renew, release, reassign, reclaim) that move a
number through these states are documented step by step in [Number
lifecycle](/numbers/lifecycle) — this page is the anchor for the status
vocabulary those operations depend on.

## The six states

The lifecycle is a closed enum. A number is always in exactly one of:

* **`active`** — held and fully usable. Works for sending, receiving,
  and billing.
* **`pending_compliance`** — purchased into a regulated country and the
  carrier-approved compliance bundle is still being verified. Not yet a
  usable number.
* **`inactive`** — never provisioned or deliberately disabled. Shows in
  listings but is not usable.
* **`released`** — let go. The carrier `DELETE` completed, and this is a
  terminal state — the only path back in is a fresh purchase.
* **`parked`** — mid-release grace window. Holding the number against
  upstream release so you can reclaim it during a bounded window.
* **`suspended`** — soft pause on a NaaS DID (for an overdue balance or
  a manual suspend). It stops sending and receiving until reactivated.

## How the common transitions look

There are five paths a number traverses from purchase:

```
purchase (unregulated)          → active
purchase (regulated country)    → pending_compliance → active
compliance attach (pending)     → pending_compliance → active
graceful release (park → wait)  → active → parked → released
reclaim within grace window     → active → parked → active
suspend / reactivate (NaaS DID) → active → suspended → active
```

Every regulated-country purchase routes through
`pending_compliance` before it is `active`, because the carrier only
approves the compliance bundle after Orbit attaches it.

## What each state means, and who sets it

* **`active`** — set at purchase when the country has no regulatory
  bundle, and set from `pending_compliance` once the carrier accepts
  the attached compliance profile. The dashboard and list endpoints
  default to `active` when no status filter is supplied.
* **`pending_compliance`** — set at purchase into a regulated country.
  Orbit auto-releases it after its grace window unless you attach a
  compliance profile first ([Attach a compliance
  profile](/numbers/lifecycle#attach-a-compliance-profile)).
* **`inactive`** — set manually or when provisioning never succeeded.
  You can still see it with a status filter on the list endpoint.
* **`released`** — set after the graceful-release parking window closes
  and the carrier `DELETE` completes. Terminal; recover by purchasing
  again.
* **`parked`** — set when you schedule a release. The parking-expiry
  scheduler is the only actor that moves the row from `parked` to
  `released`. During the window, `POST /:id/reclaim` moves it back to
  `active` without re-purchasing.
* **`suspended`** — set for an overdue balance or a manual suspend on a
  NaaS DID. It is an explicit soft pause; reactivation flips it back to
  `active` with the configuration intact. Only an `active` number can
  be suspended, so `pending_compliance`, `parked`, and `released` rows
  are rejected with `409`.

## Filtering by status on the list endpoint

`GET /numbers` accepts a `status` query. Omit it and the list returns
`active` rows only. Pass one value (`suspended`, `released`, …) and you
get that subset. Pass `status=all` to see every state at once, and pass
a comma-separated list to union several states in one call.

The dashboard **Active** tab deliberately queries the union
`active,pending_compliance` so a newly-purchased regulated-country DID
shows up alongside your usable numbers instead of disappearing from the
list until its compliance clears.

## Suspended is not released

Use `suspended` when you want the number to come back under you (an
overdue balance, a manual pause). Use `released` only for a verified
teardown. `parked` sits between them: the number was handed to a release
schedule but the grace window is still open, so it is reclaimable until
the scheduler closes it.

## Timeline examples

* **Fresh purchase, unregulated country** — purchase completes and the
  number lands at `active` immediately.
* **Fresh purchase, regulated country** — purchase lands at
  `pending_compliance`. Attach the approved compliance profile
  (`POST /:id/attach-compliance-profile`); the carrier webhook flips the
  row to `active`. If the grace window lapses first, Orbit auto-releases
  it to `released`.
* **Trial-pool number** — claimed from the shared pool as `active`.
  Purchasing flips your claim to permanent ownership, releasing returns
  it to the pool.
* **Scheduled release** — you schedule it; the number moves to
  `parked`. The parking-expiry scheduler moves it to `released` when the
  window ends, unless you reclaim it first.
* **Reclaim during the grace window** — a `parked` number moves back to
  `active` via `POST /:id/reclaim` without another purchase.

## Cross-links

* [Number lifecycle](/numbers/lifecycle) — the operations (auto-renew,
  release, reassign, retry-release, reclaim, repair-provisioning,
  attach-compliance-profile, trial pool) that move a number through
  these states.
* [Numbers overview](/numbers/overview) — the Numbers pillar surface.
