{"record":{"id":"0183ac5defdc3a44","repo":"we-promise/sure","slug":"simplefin-rate-limit-data-refreshes-at-most-once","errorCode":null,"errorMessage":"SimpleFin rate limit: data refreshes at most once every 24 hours. Try again later.","messagePattern":"SimpleFin rate limit: data refreshes at most once every 24 hours\\. Try again later\\.","errorType":"exception","errorClass":"SimplefinItem::Importer::RateLimitedError","httpStatus":null,"severity":"error","filePath":"app/models/simplefin_item/importer.rb","lineNumber":1043,"sourceCode":"      end\n\n      if needs_update\n        Rails.logger.warn(\"SimpleFin: marking item ##{simplefin_item.id} requires_update due to fatal auth error(s): #{error_messages}\")\n        simplefin_item.update!(status: :requires_update)\n      end\n\n      down = error_messages.downcase\n      # Detect and surface rate-limit specifically with a friendlier exception\n      if down.include?(\"make fewer requests\") ||\n         down.include?(\"only refreshed once every 24 hours\") ||\n         down.include?(\"rate limit\")\n        Rails.logger.info(\"SimpleFin: raising RateLimitedError for item ##{simplefin_item.id}: #{error_messages}\")\n        ActiveSupport::Notifications.instrument(\n          \"simplefin.rate_limited\",\n          item_id: simplefin_item.id,\n          message: error_messages\n        )\n        raise RateLimitedError, \"SimpleFin rate limit: data refreshes at most once every 24 hours. Try again later.\"\n      end\n\n      # Fall back to generic SimpleFin error classified as :api_error\n      Rails.logger.error(\"SimpleFin fatal API error for item ##{simplefin_item.id}: #{error_messages}\")\n      ActiveSupport::Notifications.instrument(\n        \"simplefin.fatal_error\",\n        item_id: simplefin_item.id,\n        message: error_messages\n      )\n      raise Provider::Simplefin::SimplefinError.new(\n        \"SimpleFin API errors: #{error_messages}\",\n        :api_error\n      )\n    end\n\n    # Classify exceptions into simple buckets for UI stats\n    def classify_error(e)\n      msg = e.message.to_s.downcase","sourceCodeStart":1025,"sourceCodeEnd":1061,"githubUrl":"https://github.com/we-promise/sure/blob/e69894adb92547273377398c15f45c979cd9416a/app/models/simplefin_item/importer.rb#L1025-L1061","documentation":"Error \"SimpleFin rate limit: data refreshes at most once every 24 hours. Try again later.\" thrown in we-promise/sure.","triggerScenarios":"Thrown at app/models/simplefin_item/importer.rb:1043 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e69894adb92547273377398c15f45c979cd9416a","analyzedAt":"2026-08-21T18:22:41.165Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}