SIP 480
SIP 480 Temporarily Unavailable in Asterisk
A 480 says the destination exists but could not be reached right now. It is a statement about availability, not about the number being wrong, and that distinction is what separates it from a 404.
What it looks like in the log
[2026-08-17 14:47:15] VERBOSE[15024][C-00001b3e] res_pjsip_logger.c: <--- Received SIP response (688 bytes) --->
SIP/2.0 480 Temporarily Unavailable
CSeq: 102 INVITE
[2026-08-17 14:47:15] VERBOSE[15024][C-00001b3e] app_dial.c: Everyone is busy/congested at this time (1:0/0/1)
What it means
In Asterisk, a 480 most often means the registrar has no current contact for the endpoint you tried to dial. The endpoint is configured, the dialplan found it, and there is simply nowhere to send the INVITE because the device has not registered or its registration has expired. On FreePBX, this is the extension that shows as Unavail in pjsip show endpoints or under Reports → Asterisk Info.
It also appears when a device is registered but unreachable: the contact URI points at an address that no longer accepts traffic, typically because a NAT binding closed between registrations. Asterisk qualifies the contact, finds it dead, and returns a 480 rather than sending an INVITE into a black hole.
Most common causes
-
01The endpoint was not registered at the time of the call
The device was off, rebooting, or its registration had lapsed. Registration state at the moment of the call is what matters, not what
pjsip show endpointsreports now, which is the trap in diagnosing this after the fact. -
02A NAT binding expired between registrations
The device registered with a one-hour expiry but the router dropped the UDP mapping after two minutes of silence. Asterisk still holds a contact, sends to it, and gets nothing back. Frequent 480s on remote extensions and none on local ones is the signature.
-
03qualify_frequency marked the contact unreachable
If OPTIONS pings are failing, Asterisk takes the contact out of service and returns 480 to anything dialling it, even though the device may believe it is registered.
-
04A provider returning 480 for an out-of-service number
On inbound-to-carrier calls, some networks use 480 where others use 404 for a number that is provisioned but not currently in service. The response tells you about the far end's state, not your dial string.
-
05Do Not Disturb implemented as unavailable
Some devices and some dialplan logic express DND as a 480 rather than a 486, which makes an intentional rejection look like an infrastructure problem.
How to tell which one it is
The useful question is what registrations existed at the timestamp on the 480, and the log answers it. Look backwards from the failed call for the last successful REGISTER from that endpoint and check whether its expiry had already passed by the time the INVITE went out.
If you find registrations arriving far more often than the configured expiry, the device is already fighting a NAT timeout, which is a strong indicator that the same timeout is what killed this call.
How to fix it
-
Shorten the registration expiry on remote endpoints
Set
max_expirylow enough that the device re-registers before a typical NAT binding closes. Sixty to one hundred and twenty seconds is the usual landing point for devices behind consumer routers. -
Turn on qualify so dead contacts are detected
Setting
qualify_frequencyon the endpoint makes Asterisk ping the contact and remove it when it stops answering, which turns a slow timeout into an immediate, readable failure. -
Check NAT settings on the endpoint
For remote devices, confirm
rewrite_contact=yesso Asterisk uses the address the packet actually came from rather than the private address the device advertised. -
Distinguish a real DND from a real outage
If a specific user's calls 480 consistently while their phone is plainly online, check the device for a DND setting before touching any network configuration.