{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/ErrorMessage",
  "title": "Error message",
  "type": "object",
  "x-internal": true,
  "properties": {
    "statusCode": {
      "type": "integer",
      "description": "The HTTP status code returned by the error."
    },
    "service": {
      "type": "string",
      "description": "Codat's service the returned the error."
    },
    "error": {
      "type": "string",
      "description": "A brief description of the error."
    },
    "correlationId": {
      "type": "string",
      "description": "Unique identifier used to propagate to all downstream services and determine the source of the error."
    },
    "validation": {
      "$ref": "#/components/schemas/ErrorMessage/definitions/errorValidation"
    },
    "canBeRetried": {
      "type": "string",
      "description": "`True` if the error occurred transiently and can be retried."
    },
    "detailedErrorCode": {
      "type": "integer",
      "description": "Machine readable error code used to automate processes based on the code returned."
    }
  },
  "definitions": {
    "errorValidation": {
      "title": "Validation error",
      "type": "object",
      "nullable": true,
      "description": "A human-readable object describing validation decisions Codat has made. If an operation has failed because of validation errors, they will be detailed here.",
      "properties": {
        "errors": {
          "type": "array",
          "nullable": true,
          "items": {
            "$ref": "#/components/schemas/ErrorMessage/definitions/errorValidationItem"
          }
        },
        "warnings": {
          "type": "array",
          "nullable": true,
          "items": {
            "$ref": "#/components/schemas/ErrorMessage/definitions/errorValidationItem"
          }
        }
      }
    },
    "errorValidationItem": {
      "title": "Validation error item",
      "type": "object",
      "properties": {
        "itemId": {
          "type": "string",
          "nullable": true,
          "description": "Unique identifier for a validation item."
        },
        "message": {
          "type": "string",
          "nullable": true,
          "description": "A message outlining validation item's issue."
        },
        "validatorName": {
          "type": "string",
          "nullable": true,
          "description": "Name of validator."
        }
      }
    }
  }
}