Errors

From Rackspace Email & Apps API
Jump to: navigation, search

Errors

When there is an error processing a request, the API will return an HTTP error response code denoting the type of error. The system will also return additional information in the body of the response. Errors can be formatted in JSON or XML, depending on the Accept header of the request.

This page documents the behavior of synchronous errors returned by the API.

Fault Element Error Codes Custom Fields
appsFault 500, 400, 409 and other codes
itemNotFound 404 resourceType - What resource in the request that was not found (Domain, Mailbox, etc.)
unauthorized 403
badRequest 400

Scenarios

Here are scenarios that demonstrate the various errors that the API might return. Each scenario includes a request and response. The request shows the HTTP verb and URL, and the response shows the response code, followed by the response body.

400 Bad Request

The following HTTP request and response demonstrates an HTTP 400 / badRequestFault.

The response is an error because the request does not include a required field.

request:
POST https://api.emailsrvr.com/v1/customers/me/domains/example.com/rs/mailboxes/user.1

Response:
400 Bad Request
{
    "badRequestFault": {
        "message": "Missing required field: password",
        "details": "4/11/2014 3:03:24 PM",
        "code": 400,
    }
}

403 Unauthorized

The following HTTP request and response demonstrates an HTTP 403 / unauthorizedFault.

The response is an error because the request does not include valid authentication information.

Request:
GET https://api.emailsrvr.com/v1/customers/me/domains/example.com/rs/mailboxes/user.1

Response:
403 Unauthorized
{
    "unauthorizedFault": {
        "message": "Authentication failed.",
        "details": "4/11/2014 3:06:57 PM",
        "code": 403
}
Throttling

The same request as before might also return an error if the user has made too many requests and is throttled. The request and response would look like this:

403 Unauthorized
{
    "unauthorizedFault": {
        "message": "Exceeded request limits",
        "details": "4/11/2014 3:09:30 PM",
        "code": 403
    }
}

404 Not Found

The following HTTP request and response demonstrates an HTTP 404 / itemNotFoundFault.

This response is an error because the domain specified in the request does not exist.

Request:
GET https://api.emailsrvr.com/v1/domains/idontexist.com/rs/mailboxes/

Response:
404 Not Found
{
    "itemNotFoundFault": {
        "resourceType": "Domain",
        "message": "idontexist.com not found",
        "details": "4/11/2014 2:59:51 PM",
        "code": 404
    }
}

409 Conflict

The following HTTP request and response demonstrates an HTTP 409 / appsFault

This response in an error because the Distribution List is currently updating.

request:
PUT https://api.emailsrvr.com/v1/customers/me/domains/example.com/ex/distributionLists/list.1
{
  "DisplayName": "Distribution List!"
}

response:
409 Conflict
{
    "appsFault": {
        "message": "Distribution List is currently Updating please try again soon",
        "details": "4/14/2014 4:39:17 PM",
        "code": 409,
    }
}

500 Internal Server Error

The following HTTP request and response demonstrates an HTTP 500 / appsFault.

This response is an error because of an internal server error

Request:
GET https://api.emailsrvr.com/v1/domains/idontexist.com/rs/mailboxes/

Response:
404 Not Found
{
    "appsFault": {
        "message": "Internal Server Error",
        "details": ""4/11/2014 3:19:57 PM",
        "code": 500
    }
}


XML

<?xml version="1.0" encoding="utf-8"?>
<itemNotFoundFault 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" code="404" 
    xmlns="http://api.emailsrvr.com/v0/Schemas">
    <message>exchange2013.davsdfsdf not found</message>
    <details>4/14/2014 4:09:08 PM</details>
    <resourceType>Domain</resourceType>
</itemNotFoundFault>

The error code is returned in the body of the response for convenience. The message section returns a human-readable message that is appropriate for display to the end user. The details section is optional and may contain information—for example, a stack trace—to assist in tracking down an error. The detail section may or may not be appropriate for display to an end user. The root element of the fault (e.g. appsFault) may change depending on the type of error. The following is a list of possible common root elements along with their associated error codes. More specific faults may be may exist for different resources and will be documented with those resources.

From an XML schema perspective, all API faults are extensions of the base fault type AppsAPIFault. When working with a system that binds XML to actual classes (such as JAXB), one should be capable of using AppsAPIFault as a “catch-all” if there's no interest in distinguishing between individual fault types.


Legacy Header

Prior to faults in the body of HTTP responses, the only information returned to users was the HTTP status code and an HTTP header x-error-message with the error message. This functionality has been kept for backwards compatibility but retrieving fault information in the HTTP body is the recommended approach for new applications.