\section{Response Codes}
\label{sec:response-codes}

The response codes are consistent with, and extend, HTTP/1.1 response
codes.  Not all HTTP/1.1 response codes are appropriate, and only those
that are appropriate are given here.  Other HTTP/1.1 response codes
{\SHOULDNOT} be used.  Also, SIP defines a new class, 6xx. 

\subsection{Provisional 1xx}
\label{sec:response-codes:1xx}

Provisional responses, also known as informational responses, indicate
that the server contacted is performing some further action and
does not yet have a definitive response.  A server sends a 1xx
response if it expects to take more than 200\,ms to obtain a final
response.  \begin{changebar} Note that 1xx responses are not transmitted reliably.  
\end{changebar} They never cause the client to send an {\ACK}.  Provisional (1xx)
responses {\MAY} contain message bodies, including session descriptions. 

\subsubsection{100 Trying}
\label{sec:response-codes:100}

This response indicates that the request has been received by the next-hop
server and that some unspecified action is being taken on behalf of
this call (for example, a database is being consulted).  This response, like
all other provisional responses, stops retransmissions of an {\INVITE}
by a UAC.  The 100 (Trying) response is different from other provisional
responses, in that it is never forwarded upstream by a stateful proxy. 

\subsubsection{180 Ringing}
\label{sec:response-codes:180}

The UA receiving the {\INVITE} is trying to alert the user. This 
response {\MAY} be used to initiate local ringback.

\subsubsection{181 Call Is Being Forwarded}
\label{sec:response-codes:181}

A server {\MAY} use this status code to indicate that the call is
being forwarded to a different set of destinations.  

\subsubsection{182 Queued}
\label{sec:response-codes:182}

The called party is temporarily unavailable, but the server has decided
to queue the call rather than reject it.  When the callee becomes
available, it will return the appropriate final status response.  The
reason phrase {\MAY} give further details about the status of the call,
for example, ``5 calls queued; expected waiting time is 15 minutes''.  The
server {\MAY} issue several 182 (Queued) responses to update the caller
about the status of the queued call.

\subsubsection{183 Session Progress}
\label{sec:response-codes:183}

The 183 (Session Progress) response is used to convey information about
the progress of the call that is not otherwise classified.  The
\header{Reason-Phrase}, header fields, or message body {\MAY} be used to
convey more details about the call progress. 

\subsection{Successful 2xx}
\label{sec:response-codes:2xx}

The request was successful.

\subsubsection{200 OK}
\label{sec:response-codes:200}

The request has succeeded. The information returned with the response
depends on the method used in the request.

\subsection{Redirection 3xx}
\label{sec:response-codes:3xx}

3xx responses give information about the user's new location, or about
alternative services that might be able to satisfy the call. 

\subsubsection{300 Multiple Choices}
\label{sec:response-codes:300}

The address in the request resolved to several choices, each with its
own specific location, and the user (or UA) can select a
preferred communication end point and redirect its request to that
location.

The response {\MAY} include a message body containing a list of resource
characteristics and location(s) from which the user or UA can
choose the one most appropriate, if allowed by the \header{Accept}
request header field.  However, no MIME types have been
defined for this message body.  

The choices {\SHOULD} also be listed as \header{Contact} fields
(Section~\ref{sec:Contact}).  Unlike HTTP, the SIP response {\MAY}
contain several \header{Contact} fields or a list of addresses in a
\header{Contact} field.  UAs {\MAY} use the \header{Contact}
header field value for automatic redirection or {\MAY} ask the user to
confirm a choice.  However, this specification does not define any
standard for such automatic selection.

\motivation{This status response is appropriate if the callee can be
reached at several different locations and the server cannot or prefers
not to proxy the request.}

\subsubsection{301 Moved Permanently}
\label{sec:response-codes:301}

The user can no longer be found at the address in the
\header{Request-URI}, and the requesting client {\SHOULD} retry at the
new address given by the \header{Contact} header field
(Section~\ref{sec:Contact}).   The requestor {\SHOULD}
update any local directories, address books, and user
location caches with this new value and redirect future requests to the
address(es) listed.

\subsubsection{302 Moved Temporarily}
\label{sec:response-codes:302}

The requesting client {\SHOULD} retry the request at the new address(es)
given by the \header{Contact} header field (Section~\ref{sec:Contact}). 
The \header{Request-URI} of the new request uses the value of the
\header{Contact} header field in the response.


The duration of the validity of the \header{Contact} URI can be
indicated through an \header{Expires} (Section~\ref{sec:Expires}) header
field or an \header{expires} parameter in the \header{Contact} header
field.  Both proxies and UAs {\MAY} cache this URI for the duration of
the expiration time.  If there is no explicit expiration time, the
address is only valid once for recursing, and {\MUSTNOT} be cached for
future transactions.

If the URI cached from the \header{Contact} header field fails, the
\header{Request-URI} from the redirected request {\MAY} be tried again a
single time.

\motivation{The temporary URI may have become out-of-date sooner than
the expiration time, and a new temporary URI may be available.}


\subsubsection{305 Use Proxy}
\label{sec:response-codes:305}

The requested resource {\MUST} be accessed through the proxy given by
the \header{Contact} field.  The \header{Contact} field gives the URI of
the proxy.  The recipient is expected to repeat this single request via
the proxy.  305 (Use Proxy) responses {\MUST} only be generated by UASs.

\subsubsection{380 Alternative Service}
\label{sec:response-codes:380}

The call was not successful, but alternative services are possible.  The
alternative services are described in the message body of the response. 
Formats for such bodies are not defined here, and may be the subject of
future standardization.

\subsection{Request Failure 4xx}
\label{sec:response-codes:4xx}

4xx responses are definite failure responses from a particular server. 
The client {\SHOULDNOT} retry the same request without modification (for example,
adding appropriate authorization).  However, the same request to a
different server might be successful. 

\subsubsection{400 Bad Request}
\label{sec:response-codes:400}

The request could not be understood due to malformed syntax.  The
\header{Reason-Phrase} {\SHOULD} identify the syntax problem in more
detail, for example, ``Missing Call-ID header field''.

\subsubsection{401 Unauthorized}
\label{sec:response-codes:401}

The request requires user authentication.  This response is issued by
UASs and registrars, while 407 (Proxy Authentication
Required) is used by proxy servers.

\subsubsection{402 Payment Required}
\label{sec:response-codes:402}

Reserved for future use.

\subsubsection{403 Forbidden}
\label{sec:response-codes:403}

The server understood the request, but is refusing to fulfill it. 
Authorization will not help, and the request {\SHOULDNOT} be repeated.

\subsubsection{404 Not Found}
\label{sec:response-codes:404}

The server has definitive information that the user does not exist at
the domain specified in the \header{Request-URI}.  This status is also
returned if the domain in the \header{Request-URI} does not match any of
the domains handled by the recipient of the request.

\subsubsection{405 Method Not Allowed}
\label{sec:response-codes:405}


The method specified in the \header{Request-Line} is understood, but not
allowed for the address identified by the \header{Request-URI}. 

The response {\MUST} include an \header{Allow} header field containing a
list of valid methods for the indicated address.

\subsubsection{406 Not Acceptable}
\label{sec:response-codes:406}

The resource identified by the request is only capable of generating
response entities that have content characteristics not acceptable
according to the \header{Accept} header field sent in the request. 

\subsubsection{407 Proxy Authentication Required}
\label{sec:response-codes:407}

This code is similar to 401 (Unauthorized), but indicates that the
client {\MUST} first authenticate itself with the proxy.  SIP access
authentication is explained in Sections~\ref{sec:security} 
and~\ref{sec:security:auth:p2u}.

This status code can be used for applications where access to the
communication channel (for example, a telephony gateway) rather than the callee
requires authentication.

\subsubsection{408 Request Timeout}
\label{sec:response-codes:408}

The server could not produce a response within a suitable amount of
time, for example, if it could not determine the location of the user in
time.  The client {\MAY} repeat the request without modifications at any
later time.

\subsubsection{410 Gone}
\label{sec:response-codes:410}

The requested resource is no longer available at the server and no
forwarding address is known.  This condition is expected to be
considered permanent.  If the server does not know, or has no facility
to determine, whether or not the condition is permanent, the status code
404 (Not Found) {\SHOULD} be used instead.

\subsubsection{413 Request Entity Too Large}
\label{sec:response-codes:413}

The server is refusing to process a request because the request
entity-body is larger than the server is willing or able to process. 
The server {\MAY} close the connection to prevent the client from
continuing the request.

If the condition is temporary, the server {\SHOULD} include a
\header{Retry-After} header field to indicate that it is temporary and
after what time the client {\MAY} try again.

\subsubsection{414 Request-URI Too Long}
\label{sec:response-codes:414}

The server is refusing to service the request because the
\header{Request-URI} is longer than the server is willing to interpret.

\subsubsection{415 Unsupported Media Type}
\label{sec:response-codes:415}

The server is refusing to service the request because the message body
of the request is in a format not supported by the server for the
requested method.  The server\begin{changebar} {\MUST} return a list of acceptable
formats using the \header{Accept}, \header{Accept-Encoding} or
\header{Accept-Language} header field, depending on the specific problem with 
the content. \end{changebar} UAC processing of this
response is described in Section~\ref{sec:general:resp-proc:4xx}.

\subsubsection{416 Unsupported URI Scheme}
\label{sec:response-codes:416}

The server cannot process the request because the scheme of the URI in
the \header{Request-URI} is unknown to the server.  Client processing of
this response is described in Section~\ref{sec:general:resp-proc:4xx}.

\subsubsection{420 Bad Extension}
\label{sec:response-codes:420}

The server did not understand the protocol extension specified in a
\header{Proxy-Require} (Section~\ref{sec:Proxy-Require}) or
\header{Require} (Section~\ref{sec:Require}) header field.  The server
{\SHOULD} include a list of the unsupported extensions in an
\header{Unsupported} header field in the response.  UAC processing of this
response is described in Section~\ref{sec:general:resp-proc:4xx}.

\subsubsection{421 Extension Required}
\label{sec:response-codes:421}

The UAS needs a particular extension to process the request, but this
extension is not listed in a \header{Supported} header field in the request. 
Responses with this status code {\MUST} contain a \header{Require}
header field listing the required extensions.

A UAS {\SHOULDNOT} use this response unless it truly cannot provide any
useful service to the client.  Instead, if a desirable extension is not
listed in the \header{Supported} header field, servers {\SHOULD} process
the request using baseline SIP capabilities and any extensions supported
by the client.

\begin{changebar}
\subsubsection{423 Interval Too Brief}
\label{sec:response-codes:423}

The server is rejecting the request because 
the expiration time of the resource refreshed by the request is too short.
This response can be used by a registrar to reject a registration whose
\header{Contact} header field expiration time was too small.  The use of
this response and the related \header{Min-Expires} header field are
described in Sections~\ref{sec:reg:const:error},
\ref{sec:reg:processing}, and~\ref{sec:Min-Expires}.
\end{changebar}

\subsubsection{480 Temporarily Unavailable}
\label{sec:response-codes:480}

The callee's end system was contacted successfully but the callee is
currently unavailable (for example, is not logged in, logged in but
in a state that 
precludes communication with the callee, or has activated the
``do not disturb'' feature).  The response {\MAY} indicate a better time
to call in the \header{Retry-After} header field.  The user could also be
available elsewhere (unbeknownst to this server).  The reason phrase
{\SHOULD} indicate a more precise cause as to why the callee is
unavailable.  This value {\SHOULD} be settable by the UA.  Status
486 (Busy Here) {\MAY} be used to more precisely indicate a particular
reason for the call failure.

This status is also returned by a redirect or proxy server that
recognizes the user identified by the \header{Request-URI}, but does not
currently have a valid forwarding location for that user.

\subsubsection{481 Call/Transaction Does Not Exist}
\label{sec:response-codes:481}

This status indicates that the UAS received a request that does not
match any existing dialog or transaction.

\subsubsection{482 Loop Detected}
\label{sec:response-codes:482}

The server has detected a loop 
(Section~\ref{sec:proxy-request-validation} Item~\ref{sec:loop-detection}).

\subsubsection{483 Too Many Hops}
\label{sec:response-codes:483}

The server received a request that contains a \header{Max-Forwards}
(Section~\ref{sec:Max-Forwards}) header field with the value zero.

\subsubsection{484 Address Incomplete}
\label{sec:response-codes:484}

The server received a request with a \header{Request-URI} that was
incomplete.  Additional information {\SHOULD} be provided in the reason
phrase.

\motivation{This status code allows overlapped dialing.  With overlapped
dialing, the client does not know the length of the dialing string.  It
sends strings of increasing lengths, prompting the user for more input,
until it no longer receives a 484 (Address Incomplete) status response.}

\subsubsection{485 Ambiguous}
\label{sec:response-codes:485}

The \header{Request-URI} was ambiguous.  The response {\MAY} contain a
listing of possible unambiguous addresses in \header{Contact} header
fields.  Revealing alternatives can infringe on privacy of the user or
the organization.  It {\MUST} be possible to configure a server to
respond with status 404 (Not Found) or to suppress the listing of
possible choices for ambiguous \header{Request-URI}s.

Example response to a request with the \header{Request-URI} {\tt
sip:lee@example.com}:
\begin{verbatim}
SIP/2.0 485 Ambiguous
Contact: Carol Lee <sip:carol.lee@example.com>
Contact: Ping Lee <sip:p.lee@example.com>
Contact: Lee M. Foote <sips:lee.foote@example.com>
\end{verbatim}

\motivation{Some email and voice mail systems provide this
functionality. A status code separate from 3xx is used since the
semantics are different: for 300, it is assumed that the same person or
service will be reached by the choices provided. While an automated
choice or sequential search makes sense for a 3xx response, user
intervention is required for a 485 (Ambiguous) response.}

\subsubsection{486 Busy Here}
\label{sec:response-codes:486}

The callee's end system was contacted successfully, but the callee is
currently not willing or able to take additional calls at this end
system.  The response {\MAY} indicate a better time to call in the
\header{Retry-After} header field.  The user could also be available
elsewhere, such as through a voice mail service.  Status 600 (Busy
Everywhere) {\SHOULD} be used if the client knows that no other end
system will be able to accept this call.

\subsubsection{487 Request Terminated}
\label{sec:response-codes:487}

The request was terminated by a {\BYE} or {\CANCEL} request.  This
response is never returned for a {\CANCEL} request itself. 

\subsubsection{488 Not Acceptable Here}
\label{sec:response-codes:488}

The response has the same meaning as 606 (Not Acceptable), but only
applies to the specific resource addressed by the \header{Request-URI}
and the request may succeed elsewhere. 

A message body containing a description of media capabilities {\MAY} be
present in the response, which is formatted according to the
\header{Accept} header field in the {\INVITE} (or
\header{application/sdp} if not present), the same as a message body in
a 200 (OK) response to an {\OPTIONS} request.

\subsubsection{491 Request Pending}
\label{sec:response-codes:491}

The request was received by a UAS that had a pending request within the
same dialog.  Section~\ref{sec:modifyuas} describes how such ``glare''
situations are resolved.

\subsubsection{493 Undecipherable}
\label{sec:response-codes:493}

The request was received by a UAS that contained an encrypted MIME body
for which the recipient does not possess or will not provide an
appropriate decryption key.  This response {\MAY} have a single body
containing an appropriate public key that should be used to encrypt MIME
bodies sent to this UA.  Details of the usage of this response
code can be found in Section~\ref{sec:security:smime:exchange}. 

\subsection{Server Failure 5xx}
\label{sec:response-codes:5xx}

5xx responses are failure responses given when a server itself has
erred.  

\subsubsection{500 Server Internal Error}
\label{sec:response-codes:500}

The server encountered an unexpected condition that prevented it from
fulfilling the request.  The client {\MAY} display the specific error
condition and {\MAY} retry the request after several seconds.

If the condition is temporary, the server {\MAY} indicate when the
client may retry the request using the \header{Retry-After} header field.

\subsubsection{501 Not Implemented}
\label{sec:response-codes:501}

The server does not support the functionality required to fulfill the
request.  This is the appropriate response when a UAS does not
recognize the request method and is not capable of supporting it for
any user. (Proxies forward all requests regardless of method.)

Note that a 405 (Method Not Allowed) is sent when the server recognizes
the request method, but that method is not allowed or supported.

\subsubsection{502 Bad Gateway}
\label{sec:response-codes:502}

The server, while acting as a gateway or proxy, received an invalid
response from the downstream server it accessed in attempting to fulfill
the request.

\subsubsection{503 Service Unavailable}
\label{sec:response-codes:503}

The server is temporarily unable to process the request due to a
temporary overloading or maintenance of the server.  The server {\MAY}
indicate when the client should retry the request in a
\header{Retry-After} header field.  If no \header{Retry-After} is given,
the client {\MUST} act as if it had received a 500 (Server Internal
Error) response.

A client (proxy or UAC) receiving a 503 (Service Unavailable) {\SHOULD}
attempt to forward the request to an alternate server.  It {\SHOULDNOT}
forward any other requests to that server for the duration specified in
the \header{Retry-After} header field, if present. 

Servers {\MAY} refuse the connection or drop the request instead of
responding with 503 (Service Unavailable).

\subsubsection{504 Server Time-out}
\label{sec:response-codes:504}

The server did not receive a timely response from an external server it
accessed in attempting to process the request.  408 (Request Timeout)
should be used instead if there was no response within the period
specified in the \header{Expires} header field from the upstream server.

\subsubsection{505 Version Not Supported}
\label{sec:response-codes:505}

The server does not support, or refuses to support, the SIP protocol
version that was used in the request.  The server is indicating that it
is unable or unwilling to complete the request using the same major
version as the client, other than with this error message.

\subsubsection{513 Message Too Large}
\label{sec:response-codes:513}

The server was unable to process the request since the message length
exceeded its capabilities.

\subsection{Global Failures 6xx}
\label{sec:response-codes:6xx}

6xx responses indicate that a server has definitive information about a
particular user, not just the particular instance indicated in the
\header{Request-URI}.

\subsubsection{600 Busy Everywhere}
\label{sec:response-codes:600}

The callee's end system was contacted successfully but the callee is
busy and does not wish to take the call at this time.  The response
{\MAY} indicate a better time to call in the \header{Retry-After}
header field.  If the callee does not wish to reveal the reason for declining
the call, the callee uses status code 603 (Decline) instead.  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.

\subsubsection{603 Decline}
\label{sec:response-codes:603}

The callee's machine was successfully contacted but the user explicitly
does not wish to or cannot participate.  The response {\MAY} indicate a
better time to call in the \header{Retry-After} header field.  This status
response is returned only if the client knows that no other end point
will answer the request. 

\subsubsection{604 Does Not Exist Anywhere}
\label{sec:response-codes:604}

The server has authoritative information that the user indicated in the
\header{Request-URI} does not exist anywhere. 

\subsubsection{606 Not Acceptable}
\label{sec:response-codes:606}

The user's agent was contacted successfully but some aspects of the
session description such as the requested media, bandwidth, or
addressing style were not acceptable.

A 606 (Not Acceptable) response means that the user wishes to
communicate, but cannot adequately support the session described.  The
606 (Not Acceptable) response {\MAY} contain a list of reasons in a
\header{Warning} header field describing why the session described
cannot be supported.  \begin{changebar} Warning reason codes are listed
in Section~\ref{sec:Warning}.\end{changebar}

A message body containing a description of media capabilities {\MAY} be
present in the response, which is formatted according to the
\header{Accept} header field in the {\INVITE} (or
\header{application/sdp} if not present), the same as a message body in
a 200 (OK) response to an {\OPTIONS} request.

It is hoped that
negotiation will not frequently be needed, and when a new user is being
invited to join an already existing conference, negotiation may not be
possible.  It is up to the invitation initiator to decide whether or not
to act on a 606 (Not Acceptable) response.

This status response is returned only if the client knows that no other
end point will answer the request. 

