HomeBlog › Q.850 Cause Codes

Understanding Q.850 Cause Codes: A Complete Troubleshooting Guide

TroubleshootingApril 10, 202612 min read
TL;DR — Q.850 is the ITU-T standard defining cause values (codes 1–127) that tell you why a call was released. Every ISDN, SS7, and SIP call disconnect carries one. Understanding them is how you distinguish "user didn't answer" (Q.850 19) from "network is down" (Q.850 38) from "route doesn't exist" (Q.850 1). This guide covers all the common codes, their real-world meanings, and how they map to SIP response codes.

What is Q.850?

Q.850 is an ITU-T recommendation titled "Usage of cause and location in the Digital Subscriber Signalling System No. 1 and the Signalling System No. 7 ISDN User Part". In plain English: it's the list of reasons a call can fail or be disconnected, standardized so all telecom equipment speaks the same language. It inherits from Q.931 (ISDN) and ISUP (SS7) and is also carried into SIP via the Reason header (RFC 3326).

Every call release carries two pieces of information: the cause value (the number, e.g. 16 or 41) and the location (where in the network it happened — user, private network, public network, international network). Cause values 1–127 are defined; values are grouped into 5 classes.

The Five Cause Classes

ClassValuesMeaning
Class 0 — Normal1–15Normal, expected outcomes (no route, user busy, etc.)
Class 1 — Normal event16–31User behavior (answered, hung up, rejected)
Class 2 — Resource unavailable32–47Network-side congestion / circuit problems
Class 3 — Service or option unavailable48–63Feature/capability not provisioned
Class 4 — Service or option not implemented64–79Equipment does not support the feature
Class 5 — Invalid message80–95Protocol/format errors
Class 6 — Protocol error96–111Message type or mandatory IE problems
Class 7 — Interworking112–127Generic interworking problems

The 20 Codes You'll Actually See

Out of 127 defined values, about 20 account for 99% of production traffic. Here they are with plain-English explanations and the typical fix.

Class 0/1 — Normal Clearing (not errors)

CodeNameMeaning
16Normal call clearingCall ended normally. This is the success case. Nothing to fix.
17User busyCalled party is on another call. Returns SIP 486 Busy Here.
18No user respondingThe called device didn't respond (phone off, no network). SIP 408 Request Timeout.
19No answer from user (user alerted)Phone rang but wasn't answered. SIP 480 Temporarily Unavailable.
20Subscriber absentMobile subscriber not registered / out of coverage. SIP 480.
21Call rejectedUser actively declined the call. SIP 603 Decline.
22Number changedCalled number has been reassigned. SIP 410 Gone.

Class 0 — No Route / Unreachable

CodeNameFix
1Unallocated (unassigned) numberThe dialed number doesn't exist. Check dial format, country code, routing table. SIP 404 Not Found.
2No route to specified transit networkIntermediate carrier is missing or misconfigured. Check your LCR routes.
3No route to destinationRoute exists but can't reach. Check interconnect status with downstream carrier. SIP 404.
27Destination out of orderRemote equipment is down. Check SBC / gateway at the far end. SIP 502 Bad Gateway.
28Invalid number formatNumber has wrong format (e.g., missing country code, non-digits). Check your normalization rules. SIP 484 Address Incomplete.

Class 2 — Network Congestion / Resource Failures

CodeNameFix
34No circuit/channel availableAll trunks are busy. Add capacity or wait. SIP 503 Service Unavailable.
38Network out of orderCarrier network is down. Nothing you can do locally — failover to backup route. SIP 503.
41Temporary failureTransient carrier issue. Safe to retry after short backoff. SIP 503.
42Switching equipment congestionRemote switch overloaded. Throttle and retry.
44Requested circuit/channel not availableSpecific circuit requested is busy. Rare in VoIP; common in TDM/ISDN.
47Resource unavailable, unspecifiedGeneric resource exhaustion. Check CPU/memory on both ends.

Class 3/4 — Service / Feature Problems

CodeNameFix
50Requested facility not subscribedCustomer's plan doesn't include the service (e.g., international calling). Check account provisioning. SIP 403 Forbidden.
55Incoming calls barred within CUGClosed User Group blocks inbound. Adjust CUG config.
57Bearer capability not authorizedSubscriber not allowed to use the requested bearer (e.g., video on a voice-only plan). SIP 403.
58Bearer capability not presently availableBearer temporarily unavailable. Retry.
63Service or option not available, unspecifiedGeneric service denied. SIP 501 Not Implemented.
65Bearer capability not implementedEquipment doesn't support this bearer. Downgrade codec.
79Service or option not implemented, unspecifiedRemote doesn't support the feature. SIP 501.

Class 5/6/7 — Protocol Errors

CodeNameFix
95Invalid message, unspecifiedMalformed message. Enable SIP tracing, look for bad headers.
102Recovery on timer expiryA protocol timer timed out (T301/T310/T305). Check network latency.
111Protocol error, unspecifiedGeneric signaling bug. Collect Wireshark and open vendor ticket.
127Interworking, unspecifiedProblem bridging two networks (e.g., SIP↔ISDN). Check your SBC/gateway config.

Q.850 ↔ SIP Response Code Mapping

RFC 3398 defines how SIP responses translate to Q.850 cause codes and vice versa. When a SIP endpoint receives an error from an ISUP gateway, the gateway may include the Q.850 cause in a Reason header:

Reason: Q.850;cause=17;text="User busy"

Common mappings:

SIP ResponseQ.850Meaning
200 OK16Success / normal clearing
404 Not Found1, 3Unassigned / no route
408 Request Timeout18, 102No response / timer expiry
410 Gone22Number changed
480 Temporarily Unavailable19, 20No answer / subscriber absent
484 Address Incomplete28Invalid format
486 Busy Here17User busy
487 Request Terminated16, 31CANCEL received
500 Server Internal Error41Temporary failure
502 Bad Gateway27, 38Upstream out of order
503 Service Unavailable34, 38, 41Network congestion / down
504 Server Timeout102Timer expiry
603 Decline21Call rejected by user

Troubleshooting Workflow

When you see a production call failure, use this flow:

  1. Collect the release cause from both sides — your SBC/softswitch CDRs or a Wireshark capture.
  2. Is it class 0/1? (codes 1–31) Usually a user-side issue. Check dialed number, destination plan, subscriber state.
  3. Is it class 2? (codes 32–47) Network-side congestion or outage. Check interconnect status, monitor CPU/memory on gateways, failover to alternate route.
  4. Is it class 3/4? (codes 48–79) Provisioning/feature issue. Check account subscription, bearer capabilities, codec.
  5. Is it class 5/6/7? (codes 80–127) Protocol/interworking bug. Get Wireshark capture, open vendor ticket.
  6. Check the location field — did the release happen at the user equipment (LPN), private network (PN), or public network (TN)? This localizes where the problem is.

Real-World Examples

Scenario 1: You see lots of cause 41 (Temporary failure) on calls to a specific destination. Meaning: transient carrier issue. Fix: enable failover to secondary carrier for that prefix and open a ticket with the primary.

Scenario 2: Cause 28 (Invalid number format) on all international calls. Meaning: you're probably sending 00 or missing the +. Fix: check your normalization/dial plan.

Scenario 3: Cause 57 (Bearer capability not authorized) only on certain subscribers. Meaning: those subscribers don't have the right plan. Fix: check subscription provisioning in HLR/AAA.

Scenario 4: Cause 34 (No circuit available) during peak hours. Meaning: your trunk group is undersized. Fix: add channels or enable overflow routing.

Key Takeaways

  1. Q.850 cause codes are the universal language for call failures across ISDN, SS7, and SIP networks.
  2. Memorize 20 codes and you can triage 99% of incidents.
  3. Use the class to quickly narrow user-side vs network-side vs protocol problems.
  4. Pair the cause with the location to pinpoint where the problem originated.
  5. In SIP, causes ride in the Reason header and map to response codes per RFC 3398.

For the full code-by-code reference with descriptions, see our Q.850 Cause Codes page.

← Back to Blog