Learn how errors are communicated

This section provides info about types of errors you can encounter when making requests to the GoodData.CN API including description of error response payload format you can use for better understanding of problem or during building robust error handling in your API integration.

Error types

When you encounter error during calling GoodData.CN API it can be typically categorized to either error on caller side - client error, on called side - server error or somewhere in between - on network level.

Client error

Errors caused by client are always returned with HTTP response status code of 4xx. Client-side errors are signalized by specific status coded - like 401 for invalid authentication or 404 for accessing non-existing resource. Generic errors (400) often contains detailed description giving guidance what went wrong - you can find it in the response payload under “description” key.

Input Validation errors

There are various types of validations on the API - if resource exists, if it supports specific HTTP method, if it’s able to consume or produce specific media type and of course if contains valid payload.

Most complex output in details section of error response payload can be produced in case if invalid request payload. Note that in order to investigate the problem in some complex hierarchies of OpenAPI schemas (which are used for validation) it’s recommended to use API reference.

Server error

Errors caused by problem on server are always returned with HTTP response status code of 5xx. This type of error cannot be fixed on client side and client have to wait until GoodData.CN API will be in operational state again. In case of server errors no specific details are provided to client but (same as in case of client errors) the traceId key always appear in response payload. Please use it for further investigation or when you ask for help in community because it’s always uniquely bounded to the problematic request (in the application logs).

Network error

Errors caused by problem during transport on network layer. Typical example of network errors are connection or timeout errors. The best way how to deal with these type of errors is to retry the request.

Error response payload

Errors details are always communicated in single format specified by RFC 7807. This means that on client side you can be always sure how to the problem response can be deserialized.

RFC 7807 is used as a standard format for returning problem details from HTTP APIs. It specifies the following:

  • Error responses MUST use standard HTTP status codes in the 400 or 500 range to detail the general category of error.

  • Error responses will be of the Content-Type application/problem+json

  • Error responses will have each of the following keys:

    • type, a unique URI for the error type, pointing to human-readable documentation of that given type. When this member is not present, its value is assumed to be “about:blank”.
    • detail, a human-readable description of the specific error.
    • title, a short, human-readable title for the general error type; the title should not change for given types.
    • status, carrying the HTTP status code
    • traceId, used for problem reporting or investigation (logged along the request, can be used for error investigation), always returned

Example of error response body:

  "title": "Invalid format for metric.",
  "detail": "Metric format '#,x1' is invalid, please try different one.",
  "status": 400,
  "traceId": "d6as1n21N21w1"