Skip to main content

Inventory & Export

Every number you own lives in your tenant inventory. List it page-by-page, export the whole set for finance reconciliation, and monitor low-stock buckets so you never run dry mid-campaign. All routes are tenant-scoped — you only ever see your own organization’s numbers.

List Numbers

curl "https://api.orbit.devotel.io/api/v1/numbers" \
  -H "X-API-Key: dv_live_sk_..."
The list endpoint is cursor-paginated (50 rows per page by default). For anything over ~100 numbers, use the bulk export below instead of paging.

Export Inventory

Download your entire number inventory in a single request — ideal for reconciling the monthly DID line on your invoice against the active set, or syncing your CMDB.
curl "https://api.orbit.devotel.io/api/v1/numbers/export?format=csv" \
  -H "X-API-Key: dv_live_sk_..." \
  -o phone-numbers-export.csv

Query parameters

ParameterTypeDefaultDescription
formatcsv | jsoncsvOutput format.
statusstringallFilter by status. Defaults to all so released/parked rows (still billable until parked) are included; pass active to narrow.
country_codeISO 3166-1 alpha-2Restrict to one country (e.g. US).
searchstringFree-text match on the number / label.

Response headers

HeaderDescription
Content-Dispositionattachment; filename="phone-numbers-export-YYYY-MM-DD.csv" (or .json).
X-Row-CountNumber of rows in the export.
X-Truncatedtrue when the export hit the 50,000-row cap.
X-Truncated-AtThe cap value (50000) when truncated.

CSV columns

Columns are emitted in this exact order (load-bearing for downstream billing tooling — new columns are only ever appended):
e164, country_code, area_code, status, number_type, capabilities,
label, tags, forwarding_number, assigned_to, compliance_profile_id,
tfv_status, monthly_cost, provider, created_at, assigned_at, next_billing_at

JSON example

curl "https://api.orbit.devotel.io/api/v1/numbers/export?format=json&status=active" \
  -H "X-API-Key: dv_live_sk_..."
[
  {
    "e164": "+14155550100",
    "country_code": "US",
    "area_code": "415",
    "status": "active",
    "number_type": "local",
    "capabilities": ["sms", "voice"],
    "label": "Main Support Line",
    "monthly_cost": "1.50",
    "provider": "telnyx",
    "created_at": "2026-01-04T12:00:00.000Z",
    "next_billing_at": "2026-07-04T12:00:00.000Z"
  }
]
Export is a pure read of your local inventory table — no carrier call is made, and it never touches an outbound voice/SMS path. Any dashboard user with read access can export their own organization’s inventory.

Low-Stock Inventory Alerts

When you provision numbers from a pool (rotation, sticky-sender, campaign overflow), Orbit tracks how many active DIDs remain per (country, area-code prefix) bucket and flags any bucket below your threshold.
curl "https://api.orbit.devotel.io/api/v1/numbers/inventory-alerts" \
  -H "X-API-Key: dv_live_sk_..."

Response

{
  "data": {
    "alerts": [
      {
        "country_code": "US",
        "area_code_prefix": "415",
        "available_count": 2,
        "threshold": 3
      }
    ],
    "threshold": 3,
    "default_threshold": 3
  }
}
The threshold defaults to 3 and can be overridden per-tenant via organizations.settings.numbers.tn_low_stock_threshold. A daily scheduler emits the same bucket payload through the number.inventory.low webhook event so your integration can auto-reprovision without polling.