DID Numbers & Phone Number Provisioning
DID numbers are the phone numbers callers dial to reach you. On SIP.IO you provision local and toll-free DIDs via API or dashboard, point each one at a route target (a flow, a user, a queue, a PBX, or more), and control per-number concurrency, fax handling, business hours, and anonymous-call policy, all without a physical line per number. See what a DID is for the underlying concept.
What you can do
- Provision a number via API. Get a local or toll-free DID in E.164 form and route it in the same call.
- Route to anything. Point a DID at a call flow, a user’s devices, a ring group, an ACD queue, voicemail, a conference, an external forward, or receive-on-PBX.
- Cap concurrency per number. Set
max_channelsso one DID can’t consume the account’s whole capacity. - Attach business hours to the number. Separate closed and holiday destinations, evaluated before the normal route.
- Control fax mode.
voice,t38, orpassthroughper DID. - Decide how to handle anonymous callers.
allow_anonymousaccepts or rejects calls with no or blocked caller-ID. - Get normalized caller-ID inbound. The caller’s number is normalized and exposed to the flow as
caller_cidfor branching, lookups, or agent screen-pop.
Capability table
| Capability | Docs |
|---|---|
| DID object, fields, route targets | Numbers & Extensions |
Full dest_kind routing-target table | Numbers & Extensions |
| Business hours on a number | Numbers & Extensions |
Per-DID concurrency (max_channels) | Concurrency Control |
| Inbound caller-ID normalization | Numbers & Extensions |
| Branching, menus, time conditions on a number | Call Flows |
How a number routes a call
Every DID resolves to a route target: a dest_kind (the typed kind of destination), a dest_id (which one), and an optional dest_xform (variables passed into the flow). Point a number directly at a queue, ring_group, or voicemail for simple cases, the platform synthesizes a one-node flow for you. Use dest_kind: "flow" when you need branching such as menus, conditions, or HTTP lookups. Numbers can also point at a trunk for receive-on-PBX, delivering the call straight to a customer’s PBX instead of terminating on SIP.IO; that path, plus bringing your own carrier, lives on the SIP trunking page. When numbers route to users or extensions inside an organization, that’s the UCaaS side of the platform.
When an inbound call arrives, the routing brain matches the DID, applies concurrency control and any attached business hours, then hands the call to the route target.
Business hours, fail-open by design
A schedule attached to a DID overrides the normal destination when the account is closed or on a holiday: closed_dest_* for outside-hours, holiday_dest_* for holidays (falling back to the closed destination if a holiday one isn’t set). If there’s no schedule, or a config error, the number fails open to its normal destination, a call is never stranded on a mistake.
FAQ
How do I provision a phone number on SIP.IO?
Provision a DID via the API or dashboard, then point it at a route target (dest_kind/dest_id): a call flow, a user, a ring group, a queue, voicemail, a conference, an external forward, or a customer PBX trunk. The number is live as soon as the route target is set.
Can I set business hours on a single phone number? Yes. Any DID can have a schedule attached directly, with separate closed and holiday destinations. If there is no schedule, or a config error, the number fails open to its normal destination so a call is never stranded.
Does SIP.IO support fax and per-number concurrency limits?
Yes. Each DID has a fax_mode (voice, T.38, or passthrough) and a max_channels cap that limits concurrent calls to that specific number, enforced alongside account- and user-level concurrency control.
Start free · Numbers & Extensions docs · Platform overview · Pricing