Troubleshooting · SIP Codes
SIP 404 Not Found: No Such Number Here
404 is a routing verdict, not a connectivity verdict: your request reached a working system, and that system states that the destination in the request URI does not exist there. The number may exist in the world — it may even be yours — but on this server, trunk or route, it is unknown. Almost every 404 is a mismatch between the digits you sent and the digits some dial plan expected.
Because 'there' is doing heavy lifting, the first question is always: which element answered 404? Your own PBX, your provider, and the far carrier produce identical codes for very different reasons.
The usual mismatches
- Format mismatch: the same number exists in multiple dialects — 10-digit, 1+10, +1 E.164, extension-only. A trunk expecting E.164 404s a 10-digit attempt; a PBX pattern written for 11 digits 404s the 10-digit habit of your users.
- Porting in flight: during LNP transitions, routing databases converge at different speeds; the old carrier's switch may 404 a number that ported away hours ago — and the new carrier may 404 it because provisioning lagged the port.
- Unassigned or deleted target: the extension/DID was removed, never built, or built on a different PBX/site than the route delivers to — multi-site systems 404 internal numbers that live on the other node when a routing rule is missing.
- Wrong route selection: least-cost routing sends the call to a carrier that doesn't serve that destination (a national trunk asked to deliver an international format, or a trunk group missing a rate center).
- A number that genuinely doesn't exist: it happens — disconnected numbers and misdials return honest 404s from the far network; the check is calling from an unrelated phone.
Read the ladder before fixing
In the capture, look at the Request-URI of the INVITE and the identity of the 404 sender. The URI shows the digits as translated by everything upstream — frequently not what the user dialed (your own PBX may have stripped a 9 or a country code). The sender tells you whose database lacks the number. A 404 from your own PBX never left your building; a 404 from the provider's SBC means your format met their dial plan and lost; a 404 after several 1xx progress messages means the call traveled and the far side disowned the destination.
Fix sequence
- Reproduce with the exact failing number and capture the INVITE: record the Request-URI as sent and the element that returned 404.
- Compare formats: dial the same destination in its other dialects (with/without country code, with/without leading 1). A format that succeeds names the translation bug.
- Check your dial plan's translation rules for that pattern (prefix stripping/adding, route selection) — fix the rule, not the user's habit.
- If the number recently ported (either direction), treat it as convergence: gather the port FOC details and open a ticket with the gaining carrier if the number is yours and still 404s after the port window.
- For internal 404s in multi-site systems, verify the destination exists on the node the route delivers to and that inter-node routing tables are synchronized.
- Retest all dialects after the fix — dial plans have a habit of fixing one format by breaking another.
Frequently asked questions
- Why does the same number work from my mobile but 404 from our office?
- Your mobile carrier's routing knows the number; something in your chain (your dial plan translation or your provider's table) doesn't. The number exists — the 404 is local to your path, and the Request-URI comparison will show what your system actually sent.
- A number we own returns 404 to callers.
- Your inbound side is the patient: the DID isn't built/provisioned on the system the carrier delivers to, or the port into your current provider didn't provision completely. This is a provider ticket with the DID, the port date and an example call — and it outranks most faults because callers blame you, not the routing table.
- Can 404 mean the person left and their extension was deleted?
- Yes — the commonest internal 404. The system is honestly reporting the extension doesn't exist. Fix the directory/auto-attendant references that still route callers to it.