Skip to content
SIP Mastery

Part 2 · The SIP language / Module 06

Response codes

What every class of response means, which element usually creates each common code, what the caller hears, and how SIP codes map to the cause values of the telephone network.

BasicIntermediateNOC coreDEV coredraft

After this module, you can

  • Name the six response classes and what each means for the request.
  • Explain the provisional responses 100, 180, 181, 182, and 183, and why 100 never travels end to end.
  • For a final response, say who must act next — the caller, the network, or the callee — and which element usually created it.
  • Handle an unknown code correctly.
  • Read Retry-After, Warning, and Reason headers.
  • Translate the common SIP codes to Q.850 cause values and back.

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.

RFC 3261 §7.2 · Responses
“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.

RFC 3261 §21.6.1 · 600 Busy Everywhere
“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
AliceProxy AProxy BBob01INVITE02INVITE03INVITE04486 Busy Here05ACK06486 Busy Here07ACK08486 Busy Here09ACK
  1. INVITE. Alice's phone sends the INVITE.
  2. INVITE. Proxy A forwards the INVITE.
  3. INVITE. Proxy B forwards the INVITE.
  4. 486 Busy Here. Bob's phone creates the 486. The callee's device is busy.
  5. ACK. Proxy B confirms the 486 on its own hop.
  6. 486 Busy Here. Proxy B forwards the 486 toward Alice's phone.
  7. ACK. Proxy A confirms the 486 on its own hop.
  8. 486 Busy Here. Proxy A forwards the 486 toward Alice's phone.
  9. 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.

RFC 3261 §21.1 · Provisional 1xx
“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.
RFC 3261 §21.1.1 · 100 Trying
“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
Alice192.0.2.10Proxy A198.51.100.10Carrier gateway198.51.100.8001INVITE02100 Trying03INVITE04100 Trying05183 Session Progress06183 Session Progress07RTP early media08200 OK09200 OK10ACK11ACK
01/11

Alice's phone calls a phone number in the public telephone network.

All steps as text
  1. Alice → Proxy A: INVITE. Alice's phone calls a phone number in the public telephone network.
  2. Proxy A → Alice: 100 Trying. Proxy A answers 100 Trying on its hop. Alice's phone stops retransmitting.
  3. Proxy A → Carrier gateway: INVITE. Proxy A routes the number to the Carrier gateway.
  4. Carrier gateway → Proxy A: 100 Trying. The gateway answers 100 Trying to Proxy A. Proxy A does not forward it.
  5. Carrier gateway → Proxy A: 183 Session Progress. The far exchange starts to alert the callee. The gateway sends 183 with SDP for early media.
  6. Proxy A → Alice: 183 Session Progress. Proxy A forwards the 183. Alice's phone opens the media path instead of playing its own ringback.
  7. Carrier gateway → Alice: RTP early media. The ringback tone travels as RTP from the far network. Alice hears it before anybody answers.
  8. Carrier gateway → Proxy A: 200 OK. The callee answers. The gateway sends 200 OK.
  9. Proxy A → Alice: 200 OK. Proxy A forwards the 200 OK. The same media stream now carries the conversation.
  10. Alice → Proxy A: ACK. Alice's phone confirms the 200 OK. Proxy A record-routed, so the ACK passes through it.
  11. Proxy A → Carrier gateway: ACK. Proxy A forwards the ACK to the gateway. The call is up.
RFC 3261 §21.1.5 · 183 Session Progress
“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
RFC 3261 §21.4.2 · 401 Unauthorized
“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.

RFC 3261 §21.5.4 · 503 Service Unavailable
“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:

RFC 3261 §16.7 · Response Processing
“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.

RFC 3261 §8.1.3.2 · Unrecognized Responses
“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:

RFC 3261 §8.1.3.2 · Unrecognized Responses
“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.

RFC 3261 §20.33 · Retry-After
“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.

RFC 3261 §20.43 · Warning
“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.

RFC 3326 §2 · The Reason Header Field
“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.