New accounts get up to $100 credit + a free number

SIP response codes explained: complete 1xx to 6xx reference

A SIP response code is a three-digit number a server returns to say what happened to a request. The first digit is the class and carries most of the meaning: 1xx means work is in progress, 2xx means success, 3xx redirects, 4xx means this request failed at this destination, 5xx means this server failed, and 6xx means the answer is no everywhere. The remaining two digits identify the specific condition. All codes are recorded in the IANA Session Initiation Protocol (SIP) Parameters registry, which notes that every code is defined by RFC 3261 unless a later specification is cited against it.

Reading them well is mostly a matter of not over-reading them. A code tells you what one element decided about one request. It does not tell you who generated it, why the element behind it made that choice, or whether the same request would fail on another route.

Quick facts

Question Short answer
Where is the authoritative list? The IANA SIP Parameters registry, Response Codes subregistry
How many classes? Six: 1xx, 2xx, 3xx, 4xx, 5xx, 6xx
Which are final? Everything except 1xx
Which class answers a call? 2xx only
Which class stops a forking proxy? 6xx
Do codes carry PSTN causes? Not directly. Q.850 causes travel in a Reason header, and gateways translate between the two
Are all codes in common use? No. A working carrier deployment sees perhaps fifteen of them regularly
Does the reason phrase matter? No. The number drives behaviour, the text is for humans

The six classes, and what each one obliges the network to do

The class is not a severity label. It is an instruction about what to do next, and getting that instruction right is the whole reason codes are grouped this way. Learn the six behaviours before you look up any individual number.

1xx Provisional. The request arrived and processing continues. Provisional responses do not end the transaction and are not acknowledged. Their practical job is visible in gateway behaviour: RFC 3398 notes that a 100 triggers no telephone-network signalling at all and exists only to stop the sender retransmitting the INVITE.

2xx Success. The request succeeded. For INVITE this means the call has been answered, and the caller acknowledges with ACK.

3xx Redirection. The target moved. The response carries one or more Contact addresses and the caller is expected to try them.

4xx Request failure. This destination will not accept this request as it stands. Some 4xx codes are genuinely about the request, such as a missing credential or an unsupported body. Others describe the state of the called user.

5xx Server failure. This server could not process a request that may be perfectly valid. This is the class that failover logic should react to, because another server may succeed with the identical request.

6xx Global failure. The answer is no for this user, not merely for this address. The consequence is behavioural, not rhetorical: as RFC 8688 restates for the 608 code, a proxy receiving a 6xx should cancel pending transactions and must not create new branches.

Where responses appear in a call

An INVITE can collect any number of provisional responses, but exactly one final response, and every final response is acknowledged with ACK. That is worth stating plainly because it explains a code that confuses people constantly: when a caller gives up before answer, the CANCEL gets its own 200, and the original INVITE still needs one final response and one only.

That final response is 487 Request Terminated. RFC 3398 shows the same sequence at a gateway: on CANCEL, a 200 confirms the CANCEL, a 487 completes the INVITE transaction, and a release message goes to the telephone side with cause 16, normal clearing.

1xx Provisional

Code Name Defined in What it means in practice
100 Trying RFC 3261 Received, working on it. Stops retransmission. Generated hop by hop, so it says nothing about the far end
180 Ringing RFC 3261 The called endpoint is alerting. If no early media arrives, the caller generates ringback locally
181 Call Is Being Forwarded RFC 3261 The request is being diverted
182 Queued RFC 3261 Held rather than rejected, for example in a queue
183 Session Progress RFC 3261 Progress information, usually with SDP so that in-band tones or announcements can be heard before answer
199 Early Dialog Terminated RFC 6228 One early dialog has ended while others may continue. Support is signalled with the 199 option tag

The 180 and 183 distinction matters for billing and for user experience. A gateway sends 180 when the telephone network reports the subscriber is free, and 183 when it needs a media path for an announcement or tone. Treating 183 as ringing produces silent calls; treating it as answer produces charged calls that were never answered.

2xx Success

Code Name Defined in Notes
200 OK RFC 3261 Request succeeded. For INVITE, the call is answered
202 Accepted RFC 6665 Marked deprecated in the registry
204 No Notification RFC 5839 Request succeeded and no notification will follow

3xx Redirection

Code Name Defined in Notes
300 Multiple Choices RFC 3261 Several possible targets are offered
301 Moved Permanently RFC 3261 Update stored routing. Gateways use it for a changed number where the new number is supplied
302 Moved Temporarily RFC 3261 The common redirect, often used for forwarding
305 Use Proxy RFC 3261 Reach the target through the indicated proxy
380 Alternative Service RFC 3261 The call failed, but another service may work

Redirects deserve care in wholesale voice. Following a 3xx sends a new request to an address chosen by someone else, which has cost and fraud implications. Most carrier-facing platforms restrict this by policy rather than following redirects blindly.

4xx Request failure

Code Name Defined in When you see it
400 Bad Request RFC 3261 Malformed request. Usually a header or SDP problem
401 Unauthorized RFC 3261 Authentication demanded by a user agent server
402 Payment Required RFC 3261 Reserved. Occasionally repurposed for balance conditions
403 Forbidden RFC 3261 Understood and refused. The catch-all for policy rejection
404 Not Found RFC 3261 The number or user does not exist in this domain
405 Method Not Allowed RFC 3261 Method understood but not permitted for this target
406 Not Acceptable RFC 3261 Cannot produce a response acceptable to the request
407 Proxy Authentication Required RFC 3261 Same as 401, but demanded by a proxy
408 Request Timeout RFC 3261 No timely response from the far end
410 Gone RFC 3261 The address existed and is no longer valid
412 Conditional Request Failed RFC 3903 A conditional PUBLISH failed
413 Request Entity Too Large RFC 3261 Body too large to process
414 Request-URI Too Long RFC 3261 Request URI exceeds what the server accepts
415 Unsupported Media Type RFC 3261 Body format not supported
416 Unsupported URI Scheme RFC 3261 Scheme in the Request URI not supported
417 Unknown Resource-Priority RFC 4412 Priority namespace not recognised
420 Bad Extension RFC 3261 A required extension is not understood
421 Extension Required RFC 3261 The server needs an extension the caller did not offer
422 Session Interval Too Small RFC 4028 Session timer interval below the minimum
423 Interval Too Brief RFC 3261 Registration or subscription expiry too short
424 Bad Location Information RFC 6442 Location information could not be processed
425 Bad Alert Message RFC 8876 Alert message body rejected
428 Use Identity Header RFC 8224 An Identity header is required. STIR territory
429 Provide Referrer Identity RFC 3892 Referred-By information required
430 Flow Failed RFC 5626 The flow to the registered device failed
433 Anonymity Disallowed RFC 5079 Anonymous calls are refused here
436 Bad Identity Info RFC 8224 The Identity information could not be dereferenced
437 Unsupported Credential RFC 8224 The credential used cannot be validated
438 Invalid Identity Header RFC 8224 The identity signature did not validate
439 First Hop Lacks Outbound Support RFC 5626 The first hop does not support outbound
440 Max-Breadth Exceeded RFC 5393 Parallel forking limit exceeded
469 Bad Info Package RFC 6086 INFO package not acceptable
470 Consent Needed RFC 5360 Consent required before the request can be relayed
480 Temporarily Unavailable RFC 3261 The user exists but is not available now
481 Call/Transaction Does Not Exist RFC 3261 State mismatch. The other side has no record of this dialog
482 Loop Detected RFC 3261 Routing loop
483 Too Many Hops RFC 3261 Max-Forwards exhausted
484 Address Incomplete RFC 3261 Not enough digits
485 Ambiguous RFC 3261 The address matched more than one target
486 Busy Here RFC 3261 Busy at this endpoint. Other endpoints might still answer
487 Request Terminated RFC 3261 The pending INVITE ended, normally after CANCEL
488 Not Acceptable Here RFC 3261 Media negotiation failed at this destination
489 Bad Event RFC 6665 Event package not supported
491 Request Pending RFC 3261 Two re-INVITEs crossed. One side backs off and retries
493 Undecipherable RFC 3261 Encrypted body could not be decrypted
494 Security Agreement Required RFC 3329 Security agreement mechanism required

5xx Server failure

Code Name Defined in When you see it
500 Server Internal Error RFC 3261 The element failed on its own account
501 Not Implemented RFC 3261 The method is not supported at all
502 Bad Gateway RFC 3261 An element received an invalid response from the next hop
503 Service Unavailable RFC 3261 Temporarily unable to handle the request. The failover code
504 Server Time-out RFC 3261 No timely response from another server that was consulted
505 Version Not Supported RFC 3261 SIP version refused
513 Message Too Large RFC 3261 Message length beyond capability
555 Push Notification Service Not Supported RFC 8599 The requested push notification service is not supported
580 Precondition Failure RFC 3312 Preconditions on the session could not be met

6xx Global failure

Code Name Defined in Meaning
600 Busy Everywhere RFC 3261 Busy on all known endpoints
603 Decline RFC 3261 Declined, without any claim about other endpoints
604 Does Not Exist Anywhere RFC 3261 This user exists nowhere
606 Not Acceptable RFC 3261 The session as described is unacceptable to the user
607 Unwanted RFC 8197 The called party marked the call as unwanted
608 Rejected RFC 8688 An intermediary rejected the call attempt

The 607 and 608 pair is worth understanding properly, because it is the only part of the code space designed around call blocking. RFC 8688 defines 608 for the case where an intermediary such as an analytics engine rejects the call, and draws an explicit contrast with 607, where a human at the called endpoint indicated the call was unwanted. The specification notes that in some jurisdictions this distinction matters, since a machine’s statistical judgement should not be recorded downstream as a person’s decision.

RFC 8688 also builds in a redress path. A 608 from a conforming intermediary carries a Call-Info header with the purpose parameter set to jwscard, pointing to a signed jCard that tells the blocked caller how to contact whoever blocked them. The signature is not decoration: the specification requires it so that a spoofed 608 cannot send callers to an address of an attacker’s choosing.

One more detail in that document is directly useful to anyone running legitimate outbound campaigns. It records that some call-blocking services return 604 Does Not Exist Anywhere as a blocking strategy, warns that other network elements may read that literally as the user not existing, and observes that in many jurisdictions such false signalling is illegal. If your outbound reporting counts 604 as invalid numbers, some of those numbers are fine and you are quietly discarding them.

The codes that get confused

Pair Difference that matters
480 vs 486 480 means the user exists but is not available now. 486 means busy at this endpoint, and another endpoint may still answer
486 vs 600 486 is local to one endpoint. 600 claims busy everywhere and stops other branches
403 vs 603 403 is a refusal by a network element. 603 is a decline attributed to the user. RFC 3398 reflects this: an ISUP call rejected with the cause location set to the user can be given the 6xx form instead of the 4xx form
404 vs 604 404 is not found in this domain. 604 asserts the user exists nowhere, which is a much stronger claim and is sometimes abused
408 vs 480 408 is silence from the far end. 480 is an explicit statement of unavailability
401 vs 407 401 comes from a user agent server, 407 from a proxy. Different challenge headers, same idea
484 vs 404 484 means not enough digits, typically overlap dialling. 404 means the digits were complete and matched nothing
488 vs 606 488 is media negotiation failure at this destination. 606 rejects the session everywhere. Both may carry a Warning header explaining which media parameter failed
500 vs 503 500 is a fault. 503 asserts a temporary condition and is the code that alternate routing should act on
502 vs 504 502 means the next hop returned something invalid. 504 means it returned nothing in time

SIP codes and Q.850 causes

Most calls that matter commercially cross between SIP and the telephone network at least once, and at that boundary a gateway translates between SIP response codes and Q.850 cause values. RFC 3398 specifies the recommended mapping in both directions.

Coming from the telephone network, the recommended translations include:

Q.850 cause SIP response
1 unallocated number 404 Not Found
2 no route to network, 3 no route to destination 404 Not Found
17 user busy 486 Busy Here
18 no user responding 408 Request Timeout
19 no answer from the user 480 Temporarily Unavailable
20 subscriber absent 480 Temporarily Unavailable
21 call rejected 403 Forbidden, or the 6xx form when the cause location is the user
22 number changed 410 Gone, or 301 Moved Permanently when a diagnostic supplies the new number
27 destination out of order 502 Bad Gateway
28 address incomplete 484 Address Incomplete
34, 38, 41, 42, 47 congestion and temporary failures 503 Service Unavailable
65, 70 bearer capability problems 488 Not Acceptable Here
102 recovery on timer expiry 504 Server Time-out
111 protocol error, 127 interworking 500 Server Internal Error

Going the other way:

SIP response Q.850 cause
404 Not Found, 485 Ambiguous 1 unallocated number
486 Busy Here 17 user busy
480 Temporarily Unavailable 18 no user responding
408 Request Timeout 102 recovery on timer expiry
401, 402, 403, 407 21 call rejected
410 Gone 22 number changed
482, 483 25 exchange routing error
500, 503, 400, 481 41 temporary failure
502 Bad Gateway 38 network out of order
603 Decline 21 call rejected
604 Does Not Exist Anywhere 1 unallocated number

Four details in that specification save a lot of argument later.

The tables are not symmetric. Cause 19 maps to 480, and 480 maps back to cause 18. A call that crosses two gateways can therefore arrive with a different cause than it left with. Reporting built only on the final value will disagree between hops, and neither side is wrong.

Defaults absorb everything unmapped. An unlisted cause becomes 500, and an unlisted SIP code becomes cause 31, normal unspecified. A large bucket of cause 31 in a report usually means codes are being flattened somewhere, not that many calls ended normally but unspecified.

Some causes have no SIP equivalent at all. RFC 3398 gives cause 44, requested circuit or channel not available, as the example: the correct behaviour is for the originating switch to try another circuit, not to fail the call, so nothing is sent to the SIP side.

Cause location changes the answer. The same rejection can surface as 403 or 603 depending on whether the network or the user is recorded as the origin.

Cause values can also travel alongside the SIP code rather than being replaced by it. The IANA registry lists Q.850 as a registered Reason protocol, with the cause value carried in decimal, which is how a gateway can send 503 while still telling you the underlying cause was congestion.

One curiosity for anyone reading the specification closely: the SIP to cause table lists 504 twice, once for Server Time-out mapping to cause 102, and once against the Version Not Supported label, which is code 505.

Reading a code in a multi-hop call

A response code arrives without a return address. In a call that passes through a session border controller and two carriers, the code you see was generated by whichever element decided to stop, and that is often not the destination network.

Three habits make diagnosis faster.

Check who generated it before deciding what it means. The Via headers show the path the response travelled. A 503 from your first hop and a 503 relayed from four hops away call for entirely different responses.

Read Reason and Warning headers, not just the code. A Q.850 Reason value tells you what the telephone side actually said. A Warning header on a 488 or 606 tells you which media parameter was unacceptable, which is exactly what the code omits.

Correlate with the media path. A clean 200 followed by silence is not a signalling problem. Codes describe signalling decisions and say nothing about whether audio flowed.

Practical triage

What you observe Most likely area First thing to check
403 on a subset of destinations Policy or permissions Destination permissions, caller ID authorisation, credit or prefix rules
404 on numbers you believe are valid Number formatting or routing E.164 formatting, dialling prefixes, whether the range is reachable on that route
488 at answer time Media negotiation Codec offer, SDP direction, transcoding and encryption settings
Rising 503 in a time window Capacity or congestion Channel limits, upstream congestion, Retry-After hints, alternate routes
408 with no far-end response Reachability Firewall and NAT behaviour, transport, whether requests reach the far end at all
Frequent 487 Caller behaviour Ring timers, abandonment rules on the origination side. These are cancelled calls, not network failures
481 mid-call Dialog state mismatch Re-INVITE and record-route handling, whether an element lost dialog state
607 or 608 Call blocking Caller identity treatment, complaint history, redress contact in the Call-Info jCard

Where didlogic fits

Response codes are the shared vocabulary between a customer platform and the carriers behind it, and they are where support conversations in wholesale voice usually start. didlogic provides the SIP trunking and international voice termination layer that sits between a platform and the destination networks, so the codes a customer receives are a mixture of decisions made locally, decisions made in transit, and causes translated from telephone networks at the far end.

That mixture is the reason a code alone rarely settles a question. Useful diagnosis pairs the code with the direction, the destination, the route and the timestamp, which is the same information a carrier needs in order to look at the other side of the same call. For outbound programmes running at volume, such as dialler traffic, tracking the distribution of codes per destination over time is more informative than any single failed call, because it separates a genuine routing fault from normal rejection behaviour on a given network.

FAQs

Are SIP response codes the same as HTTP status codes?
They share the class structure and several numbers, but they are separate registries with separate meanings. SIP adds a sixth class, 6xx, that HTTP does not have, and codes such as 486 or 480 exist only in SIP.

Which SIP codes mean the call was answered?
Only 2xx. A 183 with media can sound like a connected call, but the call is not answered until a 2xx arrives and is acknowledged.

Why do I get 480 from one carrier and 486 from another for the same number?
Because each is translating a telephone-network cause using its own rules, and because different networks release calls with different causes for similar situations. The RFC 3398 mappings are recommendations, not obligations.

What does 487 mean if nobody cancelled the call?
Something upstream cancelled it. A caller hanging up, an origination-side ring timer, or a forking proxy abandoning one branch will all produce a 487 on the branch that was terminated.

Is 503 always congestion?
No. It signals a temporary inability to handle the request, which covers congestion, maintenance and some policy conditions. Check whether a Retry-After or a Q.850 Reason value accompanies it.

Can I add my own response codes?
Not usefully. The Response Codes subregistry requires an RFC, and receiving elements will treat any unrecognised code according to its class digit.

Which codes should trigger failover to another route?
5xx conditions are the natural candidates because the request may succeed elsewhere. 6xx explicitly should not, since the answer is meant to apply to the user everywhere. Treatment of 4xx depends on the code: 403 and 404 usually indicate that retrying the same request will fail again.

Continue learning

Create account