> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firetone.com.au/llms.txt
> Use this file to discover all available pages before exploring further.

# Extensions

> The handsets and softphones that register with FireTone.

An extension is an endpoint that registers: a desk phone, a softphone, or the
browser. An agent signed in to the panel registers as their own extension
automatically — see [the phone in your browser](/agent/the-phone).

<img src="https://mintlify.s3.us-west-1.amazonaws.com/firetone/images/extensions-list.png" alt="Extensions" />

## The SIP password is shown once

When you create an extension its password is displayed exactly once, at that
moment. **The API never returns it again** — not to you, not to an
administrator, not to itself.

<Warning>
  Copy it into the handset before closing the dialog. If it is lost, reset it —
  which issues a new one and requires the handset to be reconfigured.
</Warning>

## Registering a phone

The extension's page shows exactly what to type. It is worth knowing why there
are two different names on it:

| Field              | Value                                                                                         |
| ------------------ | --------------------------------------------------------------------------------------------- |
| Username           | the extension number, e.g. `911001`                                                           |
| Domain / realm     | the organisation's SIP domain, e.g. `abc.firet.one`                                           |
| Server / registrar | shown on the page — the node's name, e.g. `sip.firet.one`, or its address. **Not** the domain |
| Port / transport   | `5060` UDP or TCP; **`5061` TLS** when the page lists it                                      |
| Password           | the SIP password, shown once at creation                                                      |

The **domain** is the name this extension is known by; the **server** is the
machine the phone talks to. They differ on purpose: every organisation has its
own domain and they share the switch. The domain does not need a DNS record —
nothing resolves it, and nothing connects to it.

<Note>
  So an extension's full address is `911001@abc.firet.one`, while the phone is
  still pointed at the node. Putting the domain in the server field is the
  commonest way to end up with a handset that never registers.
</Note>

<Warning>
  Put the **domain** in the phone's domain / realm field, not the server's
  address. A phone that presents the address can only be matched by its
  number, and when that number also exists in another organisation it is
  refused — the sign-in log says the handset gave the server's IP as its
  domain.
</Warning>

### A phone outside the office

Use **TLS on port 5061** when the page lists it. Over 5060 the password exchange
and the call audio travel across the internet unencrypted.

* Server: the **name** shown on the page, not an IP — the phone checks the
  certificate against it. Never type in your website's domain instead: if it
  sits behind Cloudflare, SIP never reaches the switch. If the page shows a
  warning that the name resolves elsewhere, tell your operator.
* SRTP: optional or compulsory.
* On the phone, turn on NAT traversal (rport) with a keep-alive of 20–30
  seconds. On the site's router, turn **SIP ALG off**.

If the page shows no TLS line, the node has no certificate for it; ask your
operator.

## The extension's page

Each extension has a page of its own, opened from its number in the list;
editing is a separate page behind **Edit**. The left column is what the
switch says now and what the extension has done; the right is what an
installer types into a phone, the settings as they stand, and the
registrations that came and went.

**Registered devices and calls**, live from the switch: every device
registered as the extension, with its address and transport, what it calls
itself, whether the switch can reach it and how fast, when its registration
expires, and any call in progress. Above the devices is the **agent** on the
extension and the Desk's status for them, so "who is signed in here" and
"which phones ring for them" are one view.

A mobile app that can be woken by a push notification says so when it
registers, in its Contact: the provider (`fcm` for Android, `apns` or
`apns.dev` for iPhone), its push token and the app's parameter. They are
shown under the device, marked **FCM push** or **APNs push**; a desk phone
shows **no push**. Tokens the app posted instead are listed under **Can be
woken by push**, and every push sent for the extension under **Recent
pushes**, with the provider's answer and whether the device woke in time.
See [Mobile push](/operator/mobile-push) for how the pushing is set up.

**Recent calls** are the extension's last ten, with a link to all of them;
**Conference sessions** are the rooms it sat in, with its role; **Past
registrations** are the devices that signed off or expired since the daemon
started watching.

## Where an extension dials from

A number typed **without** a `+` only means something if you know the country:
`09216217231` is `+919216217231` dialled from India and `+619216217231` from
Australia.

The organisation sets that country. An extension can override it, which is for
tenants whose agents sit in more than one place — leave it blank to inherit.

<Note>
  It restricts nothing else. An organisation may hold numbers and carriers in
  any country; this only decides how a partially-typed number is read.
</Note>

## Recording

**Record calls** on an extension records what that desk makes *and* takes.

Recording is on if **any** level says so — organisation, team, extension,
queue, trunk or process. A level can switch recording on; it cannot switch off
a policy set above it.

## An extension an AI answers

Choose **An AI agent** when creating one, and pick the profile that should
answer. Nothing registers against that extension: dialling it opens a media
stream to the model rather than ringing a device, so it has no handset settings
and no Desk sign-in. See [Virtual agents](/tenant/ai/virtual-agents).

## Several devices, one extension

An extension can be registered by more than one device at once. An inbound call
rings all of them and the first to answer wins; the rest stop ringing.

<Note>
  FireTone keeps one registration per **device**, not one per extension. A
  phone that moves network re-registers rather than displacing a colleague's.
</Note>

## Codecs

Both legs of a call should agree on a codec so the switch relays rather than
transcodes. That difference is near-zero CPU against the most expensive thing
the system does, and the fleet screen draws transcode capacity as its own bar
for exactly that reason.

An extension's **codec profile** is what it may offer, first choice first.
Every profile keeps G.711 behind its first choice, so a phone that cannot do
the first choice still registers and still connects.

| Profile              | Offers                         | For                                                                                     |
| -------------------- | ------------------------------ | --------------------------------------------------------------------------------------- |
| Standard             | Opus 16 kHz, then G.711        | the browser softphone and anything modern                                               |
| Opus 8 / 16 / 32 kHz | Opus at that rate, then G.711  | bandwidth against quality                                                               |
| G.711 µ-law / A-law  | G.711 only                     | a carrier or handset that does nothing else                                             |
| G.729                | G.729, then G.711              | SIP handsets behind a G.729 carrier                                                     |
| **iLBC**             | iLBC, then G.711               | SIP handsets and ATAs on a poor link: 13.3 kbit/s, and built to lose packets gracefully |
| **G.726 32k**        | G.726 at 32 kbit/s, then G.711 | SIP handsets, and DECT bases above all — it is DECT's own codec over the air            |

Under the dropdown, one line says what the chosen profile actually offers. The
**packet size** (ptime) beside it is a choice of 20, 30 or 40 ms — 20 is what
nearly everything expects — and an extension can leave it to the organisation's
default.

G.729, iLBC and G.726 are for **SIP handsets**. No browser speaks any of them,
so a browser softphone on one of these profiles lands on the G.711 fallback —
it works, but narrowband, and without Opus. Leave softphone extensions on
Standard. Choosing one of these
does not make calls cost more by itself: a handset on iLBC calling through a
carrier that also lists iLBC is relayed untouched. It costs transcode capacity
only when the two ends share no codec at all.

### Choosing codecs one by one

A profile fits most phones. It does not fit one whose installer has narrowed
its codec set to something the profile does not name -- G.729 only, say, or
G.722 -- and that phone then shares no codec with what the switch offers it
and every call fails at once with "no common codec", conference rooms
included. For that phone, open the extension and switch **Codec** to
**Choose codecs**: tick what the phone speaks, in the order you want, exactly
as a trunk's codecs are chosen. The list replaces the profile for this
extension and is what the phone is offered on every call. Clear it to go back
to the profile. The daemon says in its log when a call fails for this reason,
naming what the extension allows and what the phone offered.
