[
  {
    "code": "error.400.bad_request",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Bad request"
  },
  {
    "code": "error.400.captcha_invalid",
    "status": 400,
    "params": [],
    "remediation": "retry",
    "en": "Captcha verification failed. Please try again."
  },
  {
    "code": "error.400.captcha_required",
    "status": 400,
    "params": [],
    "remediation": "retry",
    "en": "Captcha token is required."
  },
  {
    "code": "error.400.categories_config_required",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "A config object is required"
  },
  {
    "code": "error.400.categories_database_error",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Database error while applying changes"
  },
  {
    "code": "error.400.categories_duplicate_slug",
    "status": 400,
    "params": [
      "slug"
    ],
    "remediation": "fix_input",
    "en": "A feature with slug '{slug}' already exists"
  },
  {
    "code": "error.400.categories_expected_list",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Expected a list of objects"
  },
  {
    "code": "error.400.categories_feature_editor_invalid",
    "status": 400,
    "params": [
      "reason"
    ],
    "remediation": "fix_input",
    "en": "Invalid feature editor request: {reason}"
  },
  {
    "code": "error.400.categories_invalid_conversion",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Invalid type conversion (only select<->string is supported)"
  },
  {
    "code": "error.400.categories_not_deleted",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Category is not deleted"
  },
  {
    "code": "error.400.description_too_long",
    "status": 400,
    "params": [
      "max_length"
    ],
    "remediation": "fix_input",
    "en": "Description must be at most {max_length} characters"
  },
  {
    "code": "error.400.description_too_short",
    "status": 400,
    "params": [
      "min_length"
    ],
    "remediation": "fix_input",
    "en": "Description must be at least {min_length} characters"
  },
  {
    "code": "error.400.expected_list",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Expected a list of items"
  },
  {
    "code": "error.400.feature_above_maximum",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Value is above maximum for {feature}"
  },
  {
    "code": "error.400.feature_below_minimum",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Value is below minimum for {feature}"
  },
  {
    "code": "error.400.feature_invalid_config",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Invalid config for {feature}"
  },
  {
    "code": "error.400.feature_invalid_format",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Invalid format for {feature}"
  },
  {
    "code": "error.400.feature_invalid_rules",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Invalid rules for {feature}"
  },
  {
    "code": "error.400.feature_invalid_type",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Invalid type for {feature}"
  },
  {
    "code": "error.400.feature_mandatory_missing",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Mandatory feature {feature} is required"
  },
  {
    "code": "error.400.feature_not_allowed",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Feature {feature} is not allowed here"
  },
  {
    "code": "error.400.feature_not_in_options",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Value is not in allowed options for {feature}"
  },
  {
    "code": "error.400.feature_unknown",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Unknown feature {feature}"
  },
  {
    "code": "error.400.feature_unknown_type",
    "status": 400,
    "params": [
      "feature"
    ],
    "remediation": "fix_input",
    "en": "Unknown feature type for {feature}"
  },
  {
    "code": "error.400.field.blank",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} may not be blank"
  },
  {
    "code": "error.400.field.does_not_exist",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} does not exist"
  },
  {
    "code": "error.400.field.invalid",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} is invalid"
  },
  {
    "code": "error.400.field.invalid_choice",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} is not a valid choice"
  },
  {
    "code": "error.400.field.max_length",
    "status": 400,
    "params": [
      "field",
      "max_length"
    ],
    "remediation": "fix_input",
    "en": "{field} must be at most {max_length} characters"
  },
  {
    "code": "error.400.field.max_value",
    "status": 400,
    "params": [
      "field",
      "max_value"
    ],
    "remediation": "fix_input",
    "en": "{field} must be at most {max_value}"
  },
  {
    "code": "error.400.field.min_length",
    "status": 400,
    "params": [
      "field",
      "min_length"
    ],
    "remediation": "fix_input",
    "en": "{field} must be at least {min_length} characters"
  },
  {
    "code": "error.400.field.min_value",
    "status": 400,
    "params": [
      "field",
      "min_value"
    ],
    "remediation": "fix_input",
    "en": "{field} must be at least {min_value}"
  },
  {
    "code": "error.400.field.null",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} may not be null"
  },
  {
    "code": "error.400.field.required",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} is required"
  },
  {
    "code": "error.400.field.unique",
    "status": 400,
    "params": [
      "field"
    ],
    "remediation": "fix_input",
    "en": "{field} must be unique"
  },
  {
    "code": "error.400.invalid_ad_id",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Invalid advertisement ID"
  },
  {
    "code": "error.400.validation_error",
    "status": 400,
    "params": [],
    "remediation": "fix_input",
    "en": "Validation error"
  },
  {
    "code": "error.400.verification_failed",
    "status": 400,
    "params": [],
    "remediation": "verify",
    "en": "Verification failed"
  },
  {
    "code": "error.400.verification_invalid_factor",
    "status": 400,
    "params": [],
    "remediation": "verify",
    "en": "This verification factor is not available"
  },
  {
    "code": "error.401.unauthorized",
    "status": 401,
    "params": [],
    "remediation": "reauthenticate",
    "en": "Authentication required"
  },
  {
    "code": "error.402.payment_required",
    "status": 402,
    "params": [],
    "remediation": "retry",
    "en": "Payment required"
  },
  {
    "code": "error.403.forbidden",
    "status": 403,
    "params": [],
    "remediation": "retry",
    "en": "You do not have permission to perform this action"
  },
  {
    "code": "error.403.network_blocked",
    "status": 403,
    "params": [],
    "remediation": "contact_support",
    "en": "Requests from this network are not allowed"
  },
  {
    "code": "error.403.verification_enrollment_required",
    "status": 403,
    "params": [],
    "remediation": "verify",
    "en": "Verification factor enrollment required"
  },
  {
    "code": "error.403.verification_required",
    "status": 403,
    "params": [],
    "remediation": "verify",
    "en": "Additional verification required"
  },
  {
    "code": "error.404.ad_not_found",
    "status": 404,
    "params": [],
    "remediation": "retry",
    "en": "Listing not found"
  },
  {
    "code": "error.404.categories_slug_not_found",
    "status": 404,
    "params": [
      "slug"
    ],
    "remediation": "retry",
    "en": "No category with slug '{slug}'"
  },
  {
    "code": "error.404.not_found",
    "status": 404,
    "params": [],
    "remediation": "retry",
    "en": "Requested resource not found"
  },
  {
    "code": "error.404.verification_challenge_not_found",
    "status": 404,
    "params": [],
    "remediation": "verify",
    "en": "Verification challenge not found or expired"
  },
  {
    "code": "error.405.method_not_allowed",
    "status": 405,
    "params": [],
    "remediation": "retry",
    "en": "Method not allowed"
  },
  {
    "code": "error.406.not_acceptable",
    "status": 406,
    "params": [],
    "remediation": "retry",
    "en": "Not acceptable"
  },
  {
    "code": "error.408.request_timeout",
    "status": 408,
    "params": [],
    "remediation": "retry",
    "en": "Request timeout"
  },
  {
    "code": "error.409.categories_feature_editor_conflict",
    "status": 409,
    "params": [
      "expected",
      "actual"
    ],
    "remediation": "fix_input",
    "en": "Category was modified by another editor (expected revision {expected}, now {actual}); reload and retry"
  },
  {
    "code": "error.409.conflict",
    "status": 409,
    "params": [],
    "remediation": "fix_input",
    "en": "Resource already exists"
  },
  {
    "code": "error.410.gone",
    "status": 410,
    "params": [],
    "remediation": "retry",
    "en": "Resource has been permanently removed"
  },
  {
    "code": "error.413.payload_too_large",
    "status": 413,
    "params": [],
    "remediation": "retry",
    "en": "Request body is too large"
  },
  {
    "code": "error.415.unsupported_media_type",
    "status": 415,
    "params": [],
    "remediation": "retry",
    "en": "Unsupported media type"
  },
  {
    "code": "error.422.unprocessable_entity",
    "status": 422,
    "params": [],
    "remediation": "wait_and_retry",
    "en": "Unprocessable entity"
  },
  {
    "code": "error.423.locked",
    "status": 423,
    "params": [],
    "remediation": "wait_and_retry",
    "en": "Resource is locked"
  },
  {
    "code": "error.423.verification_locked",
    "status": 423,
    "params": [],
    "remediation": "wait_and_retry",
    "en": "Too many failed attempts — verification locked"
  },
  {
    "code": "error.429.rate_limit",
    "status": 429,
    "params": [
      "retry_after_minutes"
    ],
    "remediation": "wait_and_retry",
    "en": "Too many attempts. Try again in {retry_after_minutes} minutes."
  },
  {
    "code": "error.429.too_many_requests",
    "status": 429,
    "params": [],
    "remediation": "wait_and_retry",
    "en": "Too many requests. Please try again later."
  },
  {
    "code": "error.500.internal",
    "status": 500,
    "params": [],
    "remediation": "contact_support",
    "en": "Something went wrong"
  },
  {
    "code": "error.503.mandate_unavailable",
    "status": 503,
    "params": [],
    "remediation": "retry",
    "en": "Cannot verify workspace mandate right now"
  }
]
