Skip to main content
Nixflex uses a bring-your-own-carrier (BYO) model. You buy and own phone numbers in your own Twilio or Telnyx account. Nixflex points those numbers at the engine — but the numbers, and the carrier billing, stay with you. You never pick the carrier with a setting. It is inferred from the credentials you send when you import, and every feature below works the same either way.

Why BYO

You own the numbers

Numbers stay in your own carrier account. If you ever leave Nixflex, you keep them.

No platform markup

You pay your carrier’s wholesale prices directly. Nixflex doesn’t mark up call or SMS costs.

Multi-tenant ready

One Nixflex agent can serve unlimited phone numbers — one per end-customer if you resell.

Skip A2P 10DLC blocks

For US SMS, your A2P registration applies. We don’t get in the way.

Importing a number

A Twilio number needs your Account SID and Auth Token:
What this does, behind the scenes:
  1. Validates the phone format and Twilio SID format
  2. Verifies the number exists in your Twilio account using the credentials you sent
  3. Confirms the agent belongs to your Nixflex account
  4. Overwrites Twilio’s webhooks on that number (voice, SMS, status callbacks) to point at Nixflex
  5. Inserts a phone_numbers row linking number → agent → API key
A Telnyx number needs an API key and the ID of a TeXML Application you created in your Telnyx portal. The difference matters: on Twilio the webhook lives on the number, on Telnyx it lives on the application and numbers are assigned to it. See Import phone number for the full setup.
After this, calls to that number land on the agent automatically.
Telnyx numbers now do almost everything Twilio numbers do - inbound and outbound calls, recording in both directions, cold and warm transfer, booking, custom functions, analysis, webhooks, keypad input, carrier voicemail detection, and inbound SMS with auto-reply.SMS campaigns, single sends, and delivery receipts all work on Telnyx numbers too, so there is no feature reason to prefer one carrier over the other. See Import phone number for the full support table.
Importing a number overwrites any existing webhooks on that number. On Twilio the number’s own webhooks are replaced; on Telnyx the number is reassigned to the TeXML application you nominated. If you have other systems using the number, they will stop receiving calls.

Multi-number, single-agent pattern

A single agent can be attached to many numbers. This is how reseller apps work:
Each number can carry its own custom_prompt (a business profile - see below), so the same agent template answers as a different business per number. On top of that, per-customer context also comes from:
  • Which phone number was dialled (engine looks up the row)
  • What is on file about the caller, kept separately for each of your numbers (see Caller context)
This pattern is how Ringback runs 200 dental clinics on one agent template.

Per-number prompt (business profile)

Each phone_numbers row can hold a custom_prompt - a business profile for that specific number. It layers on top of the agent’s prompt:
  • Agent prompt = the shared template (how to behave - e.g. “a friendly receptionist”). Set by you, the developer.
  • Per-number prompt = the specific business identity (name, address, hours, services) for that number. Different per end-customer.
When a call or SMS arrives, the engine appends the number’s custom_prompt as a BUSINESS PROFILE section. If it conflicts with the general agent prompt, the number’s details win. If a number has no custom_prompt, the agent prompt is used alone - so direct single-business agents are unaffected. This applies to both inbound calls and inbound SMS replies, so a reseller’s end-customer answers consistently across voice and text.
Set custom_prompt in the body when importing a number, or update it anytime with PATCH /v1/phone-numbers/:phoneNumber and body { "custom_prompt": "..." } (send null or an empty string to clear it - the number then falls back to the agent prompt alone). Maximum 8000 characters. Outbound calls use the per-call prompt instead (see Create outbound call).

Other per-number settings

The per-number model goes well beyond the business profile. Most of what an agent controls can be overridden on a single number, so every end-customer on a shared agent can behave differently. The rule: not set means inherit. Leave a setting empty on the number and it follows the agent. Set it and the number wins for its own calls. That is what null means everywhere in the phone-numbers API - “no opinion”, not “off”. Set any of them when importing, or later with PATCH /v1/phone-numbers/:number. Send null to clear one and go back to inheriting. These have their own endpoints rather than a field on the number:
Voicemail works differently, and how you imported the number decides it.
  • Added in the dashboard: the agent’s voicemail message is used. A message set on the number is ignored.
  • Added through the API: only the number’s own message is used. The agent’s is never borrowed.
There is no fallback in either direction - the import route is the choice. One agent can serve hundreds of separate businesses, so a developer’s own voicemail wording must never speak on a customer’s number. An empty message means no voicemail is left, whatever the toggle says.

Can one agent answer for different businesses?

Yes - that is the normal way to use Nixflex. Give each business its own phone number on the same agent, then set that number’s business profile, voice, calendar and webhook. Callers reach what feels like a separate company each time, while you maintain one set of instructions.

Can each phone number have its own voice and settings?

Yes. Voice, speaking speed, recording, keypad input, booking calendar, webhook and text instructions can all be set per number, using the tables above. Anything you leave unset follows the agent. The engine resolves all of this from the number involved in the call - the number dialled for inbound, the from_number for outbound. A number with nothing set simply uses the agent’s defaults.

Listing numbers

Returns numbers sorted by creation date, newest first.

Removing a number

For a Twilio number this clears the webhooks; for a Telnyx number it unassigns the number from your TeXML application. Either way calls stop routing to Nixflex and the row is removed from our database. If the carrier call fails, the number is still removed here and the response tells you to clear it manually.
Deleting a number from Nixflex does not release it from your carrier. The number stays in your Twilio or Telnyx account and continues to bill until you release it there. This is intentional — releasing is a permanent billing decision and stays with you.

Using multiple carrier accounts

Each phone number stores its own credentials. A single Nixflex account can serve numbers from multiple Twilio accounts, multiple Telnyx accounts, or a mix of both — for example:
  • A UK Twilio account for +44 numbers
  • A US Twilio account for +1 numbers
  • A separate Twilio subaccount per client (recommended for agencies)
When a call comes in or goes out, Nixflex automatically uses the right carrier and the right credentials, based on the phone number involved. No configuration needed.
Best practice: use a Twilio Subaccount per client rather than your master account. This limits the blast radius if credentials are ever exposed and gives you per-client billing on Twilio.

Constraints

  • One number, one agent. A phone number can be attached to only one agent at a time. To move a number to a different agent, delete the existing record first then re-import.
  • Strict number matching. Carrier number search uses prefix matching; Nixflex performs a strict equality check after lookup to prevent accidental imports.
  • Account scope. You can only see and manage numbers belonging to your API key. Cross-account access is blocked.

Errors

See the Import phone number API reference for the full list of error codes (invalid_phone_format, agent_not_owned, number_already_imported, etc.).