The REST API basics
#Response codes
All the responses you can get when requesting via the REST API
#Client errors
There are several types of errors when requesting via the REST API.
#400 error
Sending malformed data results in a 400 Bad Request response.
#Example
HTTP/1.1 400 Bad Request
    
    {
        "code": 400,
        "message": "Invalid json message received"
    }
    As JSON format is expected in all POST and PATCH requests, you will get this error response when your JSON body is malformed. For example, these are malformed JSON.
A comma is missing.
{
        "code": "myproduct"
        "family": "myfamily"
    }
    There are missing quotes for the code property.
{
        code: "myproduct",
        "family": "myfamily"
    }
    Below is the good format. Just perfect. Don't move a single comma. 😉
{
        "code": "myproduct",
        "family": "myfamily"
    }
    #401 error
Trying to access to the REST API without authentication results in a 401 Unauthorized response.
#Example
HTTP/1.1 401 Unauthorized
    
    {
        "code": 401,
        "message": "Authentication is required"
    }
    #Classical mistakes
The authorization header with the authentication token is missing.
curl https://demo.akeneo.com/api/rest/v1/categories
    Try Bearer instead of Basic as a keyword before your authentication token.
curl https://demo.akeneo.com/api/rest/v1/categories \
        -H "Authorization: Basic NzFiYTM4ZTEwMjcwZTcyZWIzZTA0NmY3NjE3MTIyMjM1Y2NlMmNlNWEyMTAzY2UzYmY0YWIxYmUzNTkyMDcyNQ"
    You are experiencing this kind of error and the examples given here did not help you?
    Take a look at the authentication documentation. This might save your day!
#403 error
Trying to perform an action without having the corresponding ACL results in a 403 Forbidden response.
#Example
HTTP/1.1 403 Forbidden
    
    {
        "code": 403,
        "message": "Access forbidden. You are not allowed to administrate categories."
    }
    You are experiencing this kind of error and you do not know how to solve it?
    Take a look at the permissions documentation. This might save your day!
#404 error
Trying to access to a non-existing resource results in a 404 Not Found response.
#Example
HTTP/1.1 404 Not Found
    
    {
        "code": 404, 
        "message": "Category 'master' does not exist."
    }
    #405 error
Trying to use a method on a route for which it is not implemented results in a 405 Method Not Allowed response.
#Example
HTTP/1.1 405 Method Not Allowed
    
    {
        "code": 405, 
        "message": "No route found for 'POST /api/rest/v1/products-uuid/f62190e8-8314-4360-8ff8-7dbdb4af6312': Method Not Allowed (Allow: GET, PATCH, DELETE)"
    }
    #406 error
Trying to give the Accept header a value different from application/json when getting data, results in a 406 Not Acceptable response.
#Example
HTTP/1.1 406 Not Acceptable
    
    {
        "code": 406, 
        "message": "‘xxx’ in ‘Accept‘ header is not valid. Only ‘application/json‘ is allowed."
    }
    #409 error
When a request could not be processed because of conflict, it results in a 409 Conflict error.
#Example
HTTP/1.1 409 Conflict
    #415 error
Trying to give the Content-type header a value different from application/json when posting or patching data, results in a 415 Unsupported Media Type response.
#Example
HTTP/1.1 415 Unsupported Media Type
    
    {
      "code": 415,
      "message": "‘xxx’ in ‘Content-type’ header is not valid.  Only ‘application/json’ is allowed."
    }
    Forgetting to give the Content-type header when posting or patching data, also results in a 415 Unsupported Media Type response.
#Example
HTTP/1.1 415 Unsupported Media Type
    
    {
      "code": 415,
      "message":"The ‘Content-type’ header is missing. ‘application/json’ has to specified as value."
    }
    #422 error
Sending invalid data results in a 422 Unprocessable Entity response.
#Example
HTTP/1.1 422 Unprocessable Entity
    
    {
        "code": 422,
        "message": "Validation failed.",
        "errors": [
            {
                "property": "values",
                "message": "The tommh value is not in the brand attribute option list.",
                "attribute": "brand",
                "locale": null,
                "scope": null
            }
        ]
    }
    Sending unrecognized properties as well.
#Example
HTTP/1.1 422 Unprocessable Entity
    
    {
        "code": 422,
        "message": "Property 'extra_property' does not exist. Check the standard format documentation.",
        "_links": {
            "documentation": {
                "href": "https://docs.akeneo.com/master/reference/standard_format/other_entities.html#category"
            }
        }
    }
    Or, sending unknown data.
#Example
HTTP/1.1 422 Unprocessable Entity
    
    {
        "code": 422,
        "message": "The sunglasses category does not exist in your PIM. Check the expected format on the API documentation.",
        "_links": {
            "documentation": {
                "href": "http://api.akeneo.com/api-reference.html#post_products_uuid"
            }
        }
    }
    #429 error
Abusing the API will result in 429 Too Many Requests response.
    A Retry-After header is added to the response indicating the time to wait in seconds before retrying.
#Example
HTTP/1.1 429 Too Many Requests
    Retry-After: 15
    When the REST API answers that something does not exist, it could also mean that the related user hasn't the permission to access it.
#Success
There are 3 types of client success when requesting via the REST API.
#200 success
Getting a resource or a collection resources results in a 200 OK response.
#Example
HTTP/1.1 200 OK
    #201 success
Creating a resource results in a 201 Created response. In the Location header, you will find the route to access the newly created resource.
#Example
HTTP/1.1 201 Created
    Location: https://demo.akeneo.com/api/rest/v1/categories/winter
    #204 success
Updating or deleting a resource results in a 204 No Content response. In the Location header, you will find the route to access the updated resource.
#Example
HTTP/1.1 204 No Content
    Location: https://demo.akeneo.com/api/rest/v1/categories/summer