{
  "schema": "xtalpi-pi-tools.provider-error-contract.v1",
  "requiredCodes": [
    "api_key_missing",
    "config_error",
    "configuration_invalid",
    "http_401",
    "http_403",
    "http_408",
    "http_429",
    "http_5xx",
    "http_error",
    "malformed_response",
    "network_error",
    "non_json_response",
    "request_aborted",
    "request_deadline_exhausted",
    "request_timeout",
    "response_too_large",
    "unknown_error"
  ],
  "allowedCategories": [
    "aborted",
    "authentication",
    "configuration",
    "network",
    "protocol",
    "rate_limit",
    "timeout",
    "upstream"
  ],
  "requiredHttpStatus": {
    "401": "http_401",
    "403": "http_403",
    "408": "http_408",
    "429": "http_429"
  },
  "classificationSamples": {
    "400": "http_error",
    "401": "http_401",
    "403": "http_403",
    "408": "http_408",
    "429": "http_429",
    "451": "http_error",
    "500": "http_5xx",
    "503": "http_5xx",
    "599": "http_5xx"
  },
  "errors": {
    "api_key_missing": {
      "category": "configuration",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "config_error": {
      "category": "configuration",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "configuration_invalid": {
      "category": "configuration",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "http_401": {
      "category": "authentication",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "http_403": {
      "category": "authentication",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "http_408": {
      "category": "timeout",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "http_429": {
      "category": "rate_limit",
      "retryable": true,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "retry_after"
    },
    "http_5xx": {
      "category": "upstream",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "http_error": {
      "category": "upstream",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "malformed_response": {
      "category": "protocol",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "network_error": {
      "category": "network",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "non_json_response": {
      "category": "protocol",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "request_aborted": {
      "category": "aborted",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "request_deadline_exhausted": {
      "category": "timeout",
      "retryable": true,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "request_timeout": {
      "category": "timeout",
      "retryable": true,
      "healthImmediateRetry": true,
      "runtimeRetryPolicy": "backoff"
    },
    "response_too_large": {
      "category": "protocol",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    },
    "unknown_error": {
      "category": "upstream",
      "retryable": false,
      "healthImmediateRetry": false,
      "runtimeRetryPolicy": "never"
    }
  },
  "httpStatus": {
    "401": "http_401",
    "403": "http_403",
    "408": "http_408",
    "429": "http_429"
  },
  "httpStatusRanges": [
    {
      "min": 500,
      "max": 599,
      "code": "http_5xx"
    },
    {
      "min": 400,
      "max": 599,
      "code": "http_error"
    }
  ]
}
