def json mtd, path, _form = []
      form = Hash[_form]
      response = JSON.load resp_with_token mtd, path, form.merge({api_type: "json"})
      if response.is_a?(Hash) && response["json"] && # for example, flairlist.json and {"error": 403} do not have it
         !response["json"]["errors"].empty?
        Module.nesting[1].logger.error "ERROR OCCURED on #{[mtd, path]}"
        fail "unknown how to handle multiple errors" if 1 < response["json"]["errors"].size
        Module.nesting[1].logger.error "error: #{response["json"]["errors"]}"
        error, description = response["json"]["errors"].first
          case error
          when "ALREADY_SUB" ; Module.nesting[1].logger.warn "was rejected by moderator if you didn't see in dups"
          # when "BAD_CAPTCHA" ; update_captcha
          #   json mtd, path, form.merger( {
          #     iden: @iden_and_captcha[0],
          #     captcha: @iden_and_captcha[1],
          #   } ) unless @ignore_captcha
          when "RATELIMIT"
            fail error unless description[/\Ayou are doing that too much\. try again in (\d) minutes\.\z/]
            Module.nesting[1].logger.info "retrying in #{$1.to_i + 1} minutes"
            sleep ($1.to_i + 1) * 60
            return json mtd, path, _form
          else ; fail error
          end
      end
      response
    end
def json mtd, path, _form = []
      form = Hash[_form]
      response = JSON.load resp_with_token mtd, path, form.merge({api_type: "json"})
      if response.is_a?(Hash) && response["json"] && # for example, flairlist.json and {"error": 403} do not have it
         !response["json"]["errors"].empty?
        Module.nesting[1].logger.error "ERROR OCCURED on #{[mtd, path]}"
        fail "unknown how to handle multiple errors" if 1 < response["json"]["errors"].size
        Module.nesting[1].logger.error "error: #{response["json"]["errors"]}"
        error, description = response["json"]["errors"].first
          case error
          when "ALREADY_SUB" ; Module.nesting[1].logger.warn "was rejected by moderator if you didn't see in dups"
          # when "BAD_CAPTCHA" ; update_captcha
          #   json mtd, path, form.merger( {
          #     iden: @iden_and_captcha[0],
          #     captcha: @iden_and_captcha[1],
          #   } ) unless @ignore_captcha
          when "RATELIMIT"
            fail error unless description[/\Ayou are doing that too much\. try again in (\d) minutes\.\z/]
            Module.nesting[1].logger.info "retrying in #{$1.to_i + 1} minutes"
            sleep ($1.to_i + 1) * 60
            return json mtd, path, _form
          else ; fail error
          end
      end
      response
    end
[secrets] +Hash+ with keys :client_id, :client_secret, :password: and :login
 [kwargs] keyword params may include :subreddit for clever methods
 [mtd] +Symbol+ :get or :post
 [path] +String+ an API method
 [_form] +Array+ or +Hash+ API method params