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
| Parameter | Type | Default | Description |
|---|
format | csv | json | csv | Output format. |
status | string | all | Filter by status. Defaults to all so released/parked rows (still billable until parked) are included; pass active to narrow. |
country_code | ISO 3166-1 alpha-2 | — | Restrict to one country (e.g. US). |
search | string | — | Free-text match on the number / label. |
| Header | Description |
|---|
Content-Disposition | attachment; filename="phone-numbers-export-YYYY-MM-DD.csv" (or .json). |
X-Row-Count | Number of rows in the export. |
X-Truncated | true when the export hit the 50,000-row cap. |
X-Truncated-At | The 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.