6.1 Six classes
A response starts with a three-digit status code. The first digit says what kind of answer it is; the other two only pick the exact case.
“The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role.”Read the section ↗
| Class | Name | Meaning | Ends the transaction? |
|---|---|---|---|
| 1xx | Provisional | “Working on it.” | No |
| 2xx | Success | “Done.” | Yes |
| 3xx | Redirection | “Try somewhere else.” | Yes |
| 4xx | Client error | “Your request has a problem, here.” | Yes |
| 5xx | Server error | “I failed, not you.” | Yes |
| 6xx | Global failure | “Nobody, anywhere, will accept this.” | Yes |
The difference between 4xx and 6xx matters to a forking proxy. A 486 Busy Here from one phone does not stop the proxy from trying the user’s other phones or voicemail. A 600 Busy Everywhere tells it to stop trying.
“This status response is returned only if the client knows that no other end point (such as a voice mail system) will answer the request. Otherwise, 486 (Busy Here) should be returned.”Read the section ↗
Explore the codes. Filter by class or by who must act, or search for a word. Select a code to see where it comes from, and switch to By element to see which element creates which codes.
Response code atlas
58 codes you meet in real traces
- SIP
- Failure response
1xx Provisional
2xx Success
3xx Redirection
4xx Client error
5xx Server error
6xx Global failure
486 Busy Here
Client error · RFC 3261 §21.4.24 ↗
The callee's device is busy. The user may be reachable elsewhere, for example on voicemail.
- Created by
- Bob's phone, usually
- Next step
- The callee said no
- Caller hears
- Busy tone
- Q.850 causes
- 17 (RFC 3398)
Typical causes
- The callee is in another call
- The callee pressed reject on some phones
- INVITE. Alice's phone sends the INVITE.
- INVITE. Proxy A forwards the INVITE.
- INVITE. Proxy B forwards the INVITE.
- 486 Busy Here. Bob's phone creates the 486. The callee's device is busy.
- ACK. Proxy B confirms the 486 on its own hop.
- 486 Busy Here. Proxy B forwards the 486 toward Alice's phone.
- ACK. Proxy A confirms the 486 on its own hop.
- 486 Busy Here. Proxy A forwards the 486 toward Alice's phone.
- ACK. Alice's phone confirms the 486. The call attempt ends.
6.2 Provisional responses
A 1xx response says that the request is in progress. It never ends the transaction, and it is never confirmed with ACK.
“Note that 1xx responses are not transmitted reliably. They never cause the client to send an ACK.”Read the section ↗
- 100 Trying comes from the next hop: “I received your request.” It stops the sender’s retransmissions over UDP. Each stateful proxy sends its own 100 Trying, and it is never forwarded.
- 180 Ringing: the callee’s phone is alerting. The caller’s phone plays a local ringback tone.
- 181 Call Is Being Forwarded: a server forwards the call somewhere else.
- 182 Queued: the callee cannot take the call yet, so the call waits in a queue.
- 183 Session Progress: progress that no other 1xx describes. In practice, it usually carries SDP for early mediaearly media. Audio sent before the call is answered, such as a ringback tone or an announcement from the far network.: the far network plays the ringback tone or an announcement itself, as RTP.
“The 100 (Trying) response is different from other provisional responses, in that it is never forwarded upstream by a stateful proxy.”Read the section ↗
Step through a call to the telephone network. Proxy A and the gateway each send their own 100 Trying, and the 183 opens a media path before anyone answers.
Call flow · early media
A call to the phone network, with early media
- SIP
- RTP media
Alice's phone calls a phone number in the public telephone network.
All steps as text
- Alice → Proxy A: INVITE. Alice's phone calls a phone number in the public telephone network.
- Proxy A → Alice: 100 Trying. Proxy A answers 100 Trying on its hop. Alice's phone stops retransmitting.
- Proxy A → Carrier gateway: INVITE. Proxy A routes the number to the Carrier gateway.
- Carrier gateway → Proxy A: 100 Trying. The gateway answers 100 Trying to Proxy A. Proxy A does not forward it.
- Carrier gateway → Proxy A: 183 Session Progress. The far exchange starts to alert the callee. The gateway sends 183 with SDP for early media.
- Proxy A → Alice: 183 Session Progress. Proxy A forwards the 183. Alice's phone opens the media path instead of playing its own ringback.
- Carrier gateway → Alice: RTP early media. The ringback tone travels as RTP from the far network. Alice hears it before anybody answers.
- Carrier gateway → Proxy A: 200 OK. The callee answers. The gateway sends 200 OK.
- Proxy A → Alice: 200 OK. Proxy A forwards the 200 OK. The same media stream now carries the conversation.
- Alice → Proxy A: ACK. Alice's phone confirms the 200 OK. Proxy A record-routed, so the ACK passes through it.
- Proxy A → Carrier gateway: ACK. Proxy A forwards the ACK to the gateway. The call is up.
“The 183 (Session Progress) response is used to convey information about the progress of the call that is not otherwise classified.”Read the section ↗
6.3 Final responses: who must act?
For troubleshooting, the most useful question about a failure is: who must change something? The atlas groups the failure codes into three answers.
| Who must act | Typical codes | Example |
|---|---|---|
| The caller fixes the request | 400, 401, 403, 404, 407, 415, 420, 484, 488 | Wrong number, missing credentials, no common codec |
| The network failed | 408, 482, 483, 500, 502, 503, 504 | Server overloaded, no response, routing loop |
| The callee said no | 480, 486, 600, 603, 607 | Busy, declined, not available |
401 or 407?
Both ask for credentials (Module 13), but they come from different places — and the answer goes in a different header.
| 401 Unauthorized | 407 Proxy Authentication Required | |
|---|---|---|
| Sent by | A registrar or a UAS | A proxy |
| Challenge header | WWW-Authenticate |
Proxy-Authenticate |
| Answer header | Authorization |
Proxy-Authorization |
“This response is issued by UASs and registrars, while 407 (Proxy Authentication Required) is used by proxy servers.”Read the section ↗
503 means “this server”, not “this call”
A 503 Service Unavailable tells the client that the server is overloaded or in maintenance. The client tries another server, and may avoid this one for the time in Retry-After.
“A client (proxy or UAC) receiving a 503 (Service Unavailable) SHOULD attempt to forward the request to an alternate server. It SHOULD NOT forward any other requests to that server for the duration specified in the Retry-After header field, if present.”Read the section ↗
Because of this, a proxy does not pass a 503 back to the caller unless every request would fail the same way. Usually it sends 500 instead:
“A proxy which receives a 503 (Service Unavailable) response SHOULD NOT forward it upstream unless it can determine that any subsequent requests it might proxy will also generate a 503.”Read the section ↗
6.4 Unknown codes
New RFCs add new codes, so a phone will meet codes it does not know. The rule is simple: treat an unknown code as the x00 code of its class.
“A UAC MUST treat any final response it does not recognize as being equivalent to the x00 response code of that class, and MUST be able to process the x00 response code for all classes.”Read the section ↗
A phone that does not know 433 Anonymity Disallowed treats it as 400: the call failed, and the request was the problem. An unknown 1xx is treated as 183:
“A UAC MUST treat any provisional response different than 100 that it does not recognize as 183 (Session Progress).”Read the section ↗
6.5 Retry-After, Warning, and Reason
Three headers add detail to a response — or, for Reason, to a request.
SIP/2.0 503 Service Unavailable
Retry-After: 120
Retry-After says how long to wait before trying again: after 503 or 500, how long the server will be unavailable; after 486 or 480, when the callee might be free.
“The Retry-After header field can be used with a 500 (Server Internal Error) or 503 (Service Unavailable) response to indicate how long the service is expected to be unavailable to the requesting client”Read the section ↗
SIP/2.0 488 Not Acceptable Here
Warning: 304 sbc.atlanta.example "Media type not available"
Warning adds a three-digit warning code and a text. Codes 3xx describe problems with the SDP, such as 304 (media type not available) or 305 (incompatible media format) — exactly what you need to explain a 488.
“Warning header field values are sent with responses and contain a three-digit warning code, host name, and warning text.”Read the section ↗
BYE sip:alice@192.0.2.10:5060 SIP/2.0
Reason: Q.850;cause=16;text="Normal call clearing"
CANCEL sip:bob@203.0.113.21:5062 SIP/2.0
Reason: SIP;cause=200;text="Call completed elsewhere"
Reason (RFC 3326) says why a request ends something. In a BYE from a gateway, it carries the Q.850 cause from the telephone network. In a CANCEL from a forking proxy, cause=200 tells the other phones that someone else answered — so they can avoid logging a missed call.
“The Reason header field MAY appear in any request within a dialog, in any CANCEL request and in any response whose status code explicitly allows the presence of this header field.”Read the section ↗
6.6 SIP codes and Q.850 causes
The telephone network ends calls with Q.850Q.850. The ITU-T list of cause values that telephone networks use to say why a call ended, such as 16 (normal clearing) or 17 (user busy). cause values. A gateway between SIP and ISUP must translate them. RFC 3398 defines the usual mapping; Module 24 covers the details.
| Q.850 cause | Meaning | SIP response |
|---|---|---|
| 1 | Unallocated number | 404 Not Found |
| 16 | Normal call clearing | — (a BYE or CANCEL, not a response) |
| 17 | User busy | 486 Busy Here |
| 18 | No user responding | 408 Request Timeout |
| 19 | No answer from the user | 480 Temporarily Unavailable |
| 21 | Call rejected | 403 Forbidden (or 603 Decline) |
| 28 | Address incomplete | 484 Address Incomplete |
| 34 | No circuit available | 503 Service Unavailable |
| 38 | Network out of order | 503 Service Unavailable |
| 41 | Temporary failure | 503 Service Unavailable |
| 102 | Recovery on timer expiry | 504 Server Time-out |
| 127 | Interworking, unspecified | 500 Server Internal Error |
Common mistakes
Mixing up 401 and 407
401 comes from a registrar or the callee, with WWW-Authenticate; the answer goes in Authorization. 407 comes from a proxy, with Proxy-Authenticate; the answer goes in Proxy-Authorization. A phone that answers a 407 with an Authorization header is challenged again and again.
Remember: the answer header mirrors the challenge header. Proxy challenges get Proxy-Authorization.
Reading 183 as “ringing”
A 183 Session Progress does not say that a phone rings. It says “listen to the media I am sending you”. If the phone plays its own ringback on 183, the caller misses announcements such as “the number you have called is not in service”.
Remember: 180 without SDP = play your own ringback. 183 with SDP = play the RTP.
Sending 503 to reject one call
A server that answers 503 to one call that it cannot route says, in SIP, “I am down”. Upstream proxies fail over to another server, and may stop sending this server any calls for the Retry-After time.
Remember: reject one call with a 4xx code that describes it (403, 404, 480, 488). Keep 503 for real overload or maintenance.
Forwarding 100 Trying
100 Trying is hop by hop: each stateful proxy sends its own and never forwards one. If the caller receives a 100 Trying that the far end created, a proxy on the path forwarded it by mistake.
Remember: a 100 Trying only ever crosses one hop.
Failing on an unknown code
A phone that shows “unknown error” — or crashes — on a code such as 433 or 608 breaks a basic rule. Every unknown final response is handled like the x00 of its class.
Remember: unknown 4xx = 400, unknown 5xx = 500, unknown 6xx = 600, unknown 1xx = 183.
Summary
- The first digit is the class: 1xx provisional, 2xx success, 3xx redirection, 4xx client error, 5xx server error, 6xx global failure.
- 100 Trying is hop by hop. 180 means ringing; 183 usually means early media, so the caller should play the RTP it receives.
- For a failure, ask who must act: the caller (4xx), the network (5xx, 408), or the callee (480, 486, 6xx).
- 401 is from a registrar or the callee, 407 from a proxy. 503 means the server is unavailable, not that one call failed.
- An unknown final code is treated as the x00 of its class.
- Retry-After, Warning, and Reason add detail. Reason carries Q.850 causes from the telephone network, and RFC 3398 maps them to SIP codes.