White Label
Branded portal, zero UI dev. Best for platforms that want a premium phone-system experience without building or maintaining a voice UI.
Your customers log into a DialStack-hosted portal at <yourplatform>.netvoice.io — our dedicated white-label domain. The admin console, call history, voicemail inbox, and device management are all provided — you own the branding. A custom domain like phones.yourplatform.com is also possible (see Custom domain below).
What you ship
- A fully branded phone-system portal at
<yourplatform>.netvoice.io. - Administrative interfaces (e.g., for managing users, numbers, dial plans).
- User features (e.g., call history, voicemail inbox, and device provisioning).
Provisioning flow
Two API calls. That's it.
Provision a new customer
When your signup flow runs, create a DialStack account for the customer:
import { DialStack } from '@dialstack/sdk-server';
const ds = new DialStack(process.env.DIALSTACK_KEY);
const account = await ds.accounts.create({
email: 'contact@joneschiro.com',
});
// → { id: 'acct_01h2xcejqtf2nbrexx3vqjhp41', ... }
Persist account.id against your customer record. All subsequent user / billing / config calls scope to this ID via the DialStack-Account header.
Sync users
Whenever your product creates or deletes a user on that customer's account, mirror it to DialStack:
const user = await ds.users.create(
{ name: 'Dr. Alice Smith', email: 'alice@joneschiro.com' },
{ dialstackAccount: account.id }
);
// later, on offboard:
await ds.users.del(user.id, { dialstackAccount: account.id });
The user now shows up in the portal's admin console and can be assigned a phone number.
Voice users are not portal administrators
POST /v1/users creates a voice user — someone who gets phone service: an extension, devices, a number, a voicemail box. It does not grant access to the portal.
Portal administrators are a separate population. GET /v1/admin/users lists the people who can administer an account in the portal; an administrator need not have phone service, and a voice user is not an administrator by default. That collection is read-only — roles are granted in the admin portal, so there is no API call that creates a portal login.
Portal access
Your customers' portal administrators sign in at https://<yourplatform>.netvoice.io with their own credentials. Administrators are invited, and roles granted, from the portal itself — see the Users guide. A voice-only user has no portal login.
Single sign-on from your own identity provider is supported, so administrators don't face a second login. Like a custom domain, it involves more than a config toggle — we set it up with you per platform. Reach out and we'll walk through it.
There is no API today that hands a signed-in user of your app straight into the portal. If a programmatic handoff would fit your integration — and what it would need to carry — we'd love to hear about it at api@dialstack.ai.
Theming
Your logo and brand colors are configured once in the Platform Admin and applied across the portal and transactional email. No code, no CSS.
Custom domain
By default the portal lives at <yourplatform>.netvoice.io. That's production-ready and branded — no DNS required.
If you want the portal to live under your own domain (e.g., phones.yourplatform.com), that's supported too. It involves more than a simple CNAME — we coordinate DNS, TLS provisioning, and per-tenant routing together. Reach out and we'll walk through it.
What you don't build
- Call-logs list, voicemail inbox, device provisioning
- Admin tools (users, dial plans, number ordering)
- Authentication UX — sign-in, invitations, and password recovery
What you do build
- Account creation on customer signup (
ds.accounts.create) - User sync on user onboard/offboard (
ds.users.create/ds.users.del) - "Open phones" link in your app pointing at
https://<yourplatform>.netvoice.io
When to pick this
- You want voice live in weeks, not months.
- You don't have front-end capacity for a voice surface.
- Your customers are used to logging into vendor portals (payroll, scheduling, DMS tools).
When to pick something else
- If voice has to live inside your app's main workspace with no context switch → Embedded.
- If you're building a bespoke voice workflow (dispatcher console, agent cockpit) → Direct API.
See also
- Quickstart — the
ds.accounts.create/ds.users.createpair, then assigning a number. - Authentication — API keys, scoping requests with
DialStack-Account. - Admin guide — what your customers see and do once they're in the portal.