Beeminder Forum

Detecting auto-retroratchet in the API?


I just started using the “max safe days” feature on a goal or two and it looks like it doesn’t leave much of a trace when it fiddles with the yellow brick road. I was hoping to use the API to detect when the auto-retrotratchet happens, but I can’t seem to find a way. Any ideas?

Retroratchet trigger and action in IFTTT or Zapier?
Giving me a reward to motivate me to Retroratchet!

We might need @bee’s help here but it’s a great question and the right answer may be for us to do autoratcheting differently, because I think we’re doing it in a terrible way right now.

Could we also hear what you’re working on API-wise?


I think you’ll need to locally cache the roadall data then look for differences in that yourself.
autoratchets will look like segments with infinite rate.

I have a road parser that could maybe be adapted to do this if you’re interested.
What language are you using?


What I am trying to do is creating something like I had on HabitRPG where there’s several Dailies with minimums set really low (per want-can-will) with a single Habit for exceeding the minimum on any/all of the Dailies.

Beeminder’s default behavior is that over-achieving on a goal lets you slack off on that goal tomorrow. I am hoping to build some “daily” goals which are eep days every day combined with a “over-achieve” goal which gets +1 whenever one of the dailies needs retroratcheting to make it an eep day.

The more I look at this, the more I think I may need to implement it entirely myself using the API. Here are the problems I see:

  1. The auto-retroratchet feature looks like it doesn’t honor the “max safe days” setting if you enter 0 or 1.
  2. Having to cache on my side to infer when auto-retroratcheting happened is gross. If I do it myself my scripts can stay stateless.
  3. I actually need most of these dailies need to be weekdays only which I think is difficult/impossible with auto-retroratchet because it will gobble up flat road sections on weekends.
  4. Auto-retroratchet takes place once per day, meaning that my over-achiever goal would always have a day of skew between when I enter the data on a daily goal and it gets retroratcheted. If I script it myself I can do it hourly which would be better. (I’m not suggesting that instant auto-retroratchet would be better, though, because data entry errors do happen.)

If I actually end up writing any of this myself it would be in python, but I’d be interested in looking at your road parser @insti no matter what language it’s in…er,well, not if it’s in Haskell. :slight_smile:


This seems like a good case for callbacks.

Each habit goal calls back your controller script with it’s datapoints.
Then the controller does something like.

for goal, if (daily_score > daily_rate ) add_overacheive_point()

I don’t think you’ll be able to get beeminder to do with without some outside help through the API. If you don’t mind storing your current goal rates in a config file, and can send emails to submit new datapoints you can probably do it without using the API at all.

The API is easy to use though, so I’d just do that.


Hmmm, I don’t see much documentation about the API’s callbacks, but I was hoping to avoid running a server that needs to be up all the time. Unless the API is willing to batch and retry callbacks when my side is unavailable?

Oh, and yes, I could totally do this manually today without any of the subscriber features or API.