Numbers

Phone numbers,
finally as objects.

A scoped, searchable inventory of DIDs. Find a line by NPA, NXX, or local calling area. Hold it, attach a policy, hand it to an agent — all in the same audited path.

At a glance

Inventory that behaves like data, not a spreadsheet.

Search
NPA · NXX · LCA
Real BulkVS filters, real availability, real holds.
Hold
Atomic
Reserve a DID before you assign it, so it doesn't disappear.
Bind
Agent or human
Every line points to a real subject with a real scope.
Port
Documented
Port in or out without lock-in. Carriers swap at the adapter.

Search

Find a line
by what it does.

Search by area code, exchange, local calling area, type, or carrier. Every search runs against a scoped session and writes a usage event. The same query works from the dashboard, the CLI, and any MCP-aware agent.

  • NPA, NXX, LCA filters
  • Toll-free and local
  • Per-call usage event
  • Mock by default
HTTP
GET /api/numbers/search
  ?areaCode=512
  &exchangeCode=555
  &localCallingArea=true
  &limit=25
CLI
dials numbers search \
  --area-code 512 \
  --exchange-code 555 \
  --local-calling-area \
  --limit 25
MCP
{
  "tool": "dials.numbers.search",
  "arguments": {
    "areaCode": "512",
    "exchangeCode": "555",
    "localCallingArea": true,
    "limit": 25
  }
}

Hold and bind

Reserved.
Routed. Recorded.

Numbers in Dials carry a scope, a route, and a recording policy. Bind a DID to a seat and you've defined how it rings, who answers, and what the ledger sees.

  • Reservation atomicity
  • Scope-bound assignment
  • Per-DID recording policy
  • Per-action audit
dials · numbers
+1 (512) 555 0100Reception
+1 (415) 555 0144Sales
+1 (646) 555 0188Voicemail
+1 (312) 555 0142Outbound
+1 (213) 555 0177Held

Pick up a line.

Search the mock inventory, hold a number, and bind it to an agent seat — all without spending a cent on a real DID.