Patreon API

The Patreon API is buggy bullshit, and they will provide no support. Can someone explain to me how to use it properly?

Here are the very simple questions I need to answer:

  • What is the list of currently-paid-up patrons?
  • What are their tiers?

Note that Patreon only charges people once a month. This means that if you sign up on May 8th, they don't run your card until some time after June 1st, and sometimes they take 2 or 3 days before they get around to it. And once that happens, your membership for the month of June is active. This confuses and irritates people, because if they sign up early in the month, it could be a full 4 weeks before they can take advantage of their membership.

So by "currently paid up" I mean "I have their money", not "I might have their money next month".

And by "their tiers" I mean "the tiers that they have been charged for with the money that I have", not "the tiers that they would like in the future".

Problem 1: What tier?

    Here's a pleasant little interaction I had with Patreon last year:

    From: jwz
    Date: Sep 1, 2021, 9:42 AM PDT

    Hi, every now and then a current patron drops off of my list for some unknown reason, and I've finally tracked down an example of it happening with your API.

    Here is my patron [REDACTED] -[REDACTED]

    Patron for 56 months. Status = "Paid". Payment history shows paid on Aug 1, Jul 1, Jun 1, etc.

    However, today, Sep 1, the API output changed to indicate that this patron has no entitled tiers. Specifically, "currently_entitled_amount_cents" changed from 1000 to 0, and "currently_entitled_tiers" was blanked out. It used to be:

    currently_entitled_tiers => { data => [{ type => "tier", id => 1246691 }]}

    Can you explain this? Specifically how can I reliably get a list of my current paid-up patrons and the tiers to which they are entitled? Why is this user showing as not having a tier?

    From: Debbie (Patreon)
    Date: Sep 1, 2021, 1:32 PM PDT

    Thank you for reaching out to Patreon support -- I'm happy to help here.

    Due to resource constraints, we no longer provide Patreon developer support for our API. This doesn't mean the API won't work and developers tap into unmaintained APIs quite frequently, but we want to make sure you make informed decisions based on our plans for the future.

    So after Patreon Support very politely told me to go fuck myself, I changed my code that calls their API to do some heuristic bullshit:

    Their documentation says: "currently_entitled_amount_cents: Amount that the member is entitled to. This includes a current pledge, or payment that covers the current payment period." So it includes money that they haven't yet spent.

    But sometimes "currently_entitled_amount_cents" is 0 even though I see that they were billed two weeks ago. In that case "will_pay_amount_cents" is non-zero. WTF?

    So what I am doing is: regardless of what Patreon says about their pledge value, don't include them on the list if it has been more than a month since we have taken their money (or never). Really, I want to know how much they paid us at the beginning of this cycle, but I don't see any way to find that.

    Also, as noted in the annoying non-support exchange above, sometimes patrons show up with no tiers. Maybe this is because they didn't select a tier, but just pledged an amount? So I add them to the list as if they had selected one of the appropriate price point.

Problem 2: What timeframe?

    I need to know "what has this patron paid for this month". This is confusing because Patreon likes to instead answer the question, "what has the patron requested for the future, which we have not yet charged them for."

    So when do I update my list? You might think that I should just update it daily, but that's no good because it allows this exploit:

    • Jan 29: Sign up at $15.
    • Feb 02: Charged $15.
    • Feb 03: Change pledge to $60.
    • Feb 04: Receive benefits appropriate to $60 tier.
    • Feb 05: Change back to $15.
    • Mar 02: Charged $15.

Problem 3: Declines.

    Here's the latest act of this shitshow. Currently I have a few patrons who are not on the list who should be, because when I retrieved my list on June 3, Patreon told me that these patrons' cards had been declined, and so they were not charged for June. To me that can only mean: membership for June has lapsed.

    But, SURPRISE, then on June SIXTH, apparently Patreon re-ran their cards and charged them for June anyway.

    Patreon hides the log of this activity, or possibly straight-up lies about it.

    When I click on "Payment History" for one of these patrons, it shows payments on Apr 1, May 1, etc., but then a payment on June 6. When I show "see all history", it shows... completely different dates, all on the 31st. It does not list any declines or re-tries.

    Fortunately I kept logs of what Patreon's API was saying at the time, and it shows that on June 3, Patreon had this to say:

      patron_status => "declined_patron",
      last_charge_date => "2022-06-01T21:14:46.000+00:00",
      currently_entitled_amount_cents => 0,
      last_charge_status => "Declined"

    So, this person was not on the list for June because, for the first 6 days of June, including on the 3rd when I updated the month's list, Patreon said they hadn't been charged.

    Then, they went and charged them a quarter of the way through the month anyway.

    So what the absolute fuck am I supposed to do with this???

If you know someone who works at Patreon who understands how this crap works, I would really appreciate it if you could put me in touch with them.

Update: I'm flailing around in the dark here, but maybe the right thing to do is to ignore the 'currently_' and 'last_' fields and instead get the 'pledge_history' of each patron, find the date and amount of the last pledge, and just go by that: they are a member at level N if they were actually charged that within the last 5 weeks (a week of slack being necessary since Patreon takes its time charging people). This is assuming that 'pledge_history' isn't also full of lies...

Update 2: Today, June 15, I saw a missing patron re-appear on the list.

The "Payment History" tab says:
  • Paid: Apr 2
  • Paid: May 1
  • Paid: Jun 15
The "See all payment history" popup says:
  • Join: Mar 18
  • Paid: Mar 31
  • Paid: Apr 30
  • Paid: May 31
The API says:
  • last_charge_date: Jun 15
Get your shit together, Patreon!
Tags: , ,

31 Responses:

  1. cmt says:

    From what I noticed on the other side ("patron", not "artist"): when an artists removes a tier I'm on, my status but not my payment gets dropped to the next lowest tier; and if the artist re-creates the deleted tier, I stay at the lower status with the payment still unchanged. Of course, I got no notification whatsoever of any of this (no, it wasn't your patreon). Selecting the re-created level got me back to the status at no additional cost. Maybe that explains the patrons at the wrong level/with no level (if dropped below the lowest status)?

  2. Carlos says:

    My two absolute "favourites" for web services are "APIs that do not actually do what they are documented (ha!) to do (or those that are simply designed to be unusable, and fulfill **that** contract...)" and "ensure it is completely impossible for users to find any contact information for the service".

    Patreon seems to have decided to pull a Reese's you-got-your-fuckup-in-my-dipshittery, no you-got-your-dipshittery-in-my-fuckup combo pack here.

    jwz, I think you and I share a trait: with any system I interact with, whether that is a technical system or a bureaucracy or whatever, I will, with no effort, find new, exciting, and infuriating ways to break that system, and for which I will be unable to obtain assistance.  My wife thinks I am cursed.  I instead consider myself a living corner-case.


      • Dim says:

        That film was both dated and way ahead of its time. If anything, they tried to hit too many satirical targets.

        • CSL3 says:

          Oh, I go on a whole thing about how the 007 series is like SNL; especially how neither has been relevant in decades.

          Anyway, the villain for this one, Elliot Carver (Jonathan Pryce) was meant to be stand-in for Gates (hence the software, et. al), but Gates was always more publicly subdued - that's why <i>The Simpsons</i>' "Buy 'em out, boys!" scene works so well.

          The fact that they made Carver flamboyant didn't work for Gates, but hindsight allows us to see his "de-stabalise-Western-democracy-as-I-become-the-world's-richest-man" scheme as having future shades of Musk Oil... or even Bezos, the real-life Bond villian who actually now owns the franchise.

          • k3ninho says:

            Bill Gates and not father-to-the-alleged-Reddit-moderator-and-human-trafficker-Ghislaine-Maxwell, publisher Robert Maxwell? I think the 'making the news' and 'death on his yacht by suspected nation-state agents' are tags people have been using for both.


          • Dim says:

            I think they were also going for Steve Jobs (hence the glasses and Nehru suits, which resemble Jobs's polo shirts), Murdoch and perhaps Larry Ellison, plus, several decades too late, William Randolph Hearst.

            I did not realise that about Bezos! "Do you expect me to talk?" "No Mr Bond, I expect you to spend all your money on junk."

            • CSL3 says:

              I doubt Jobs was an influence, conniving bastard though he was. One of the movie's writers says the character was specifically based on media baron Robert Maxwell, though many viewers interpreted it as being Rupert Murdoch.

              Besides, although Jobs was known in tech, he didn't have the mainstream recognition he would the year after the film's release with the release of the original bondi-blue iMac. Plus, he hadn't adopted his signature look yet.

    • Elusis says:

      I call this my Cassandra Complex. I can literally call to mind at least four open support requests I have right now of the sort "why can I not unsubscribe from this newsletter when I am clearly choosing to uncheck the box for this newsletter at your 'manage subscriptions' page?" and "why, when I am in an individual Network page, does it only offer me the option to go to My Communities, not My Networks? And setting aside the question about how and why these things are different, why can I not unsubscribe from any of the Communities via the Communities Settings page, or from within any individual Community, or at all apparently?"  I swear I should be in UX because it seems I'm exceedingly good at breaking things just from normal use.

      (This also occurs re: non-software.  Me: [gets hired.]  Me: [asks a couple of questions about "why does X policy/process exist in this form?"]  Me: "Doesn't X policy/process directly contradict Y stated mission? Perhaps we should Z."  Me: [gets hauled up on a long list of spurious complaints for "performance."])

      • Carlos says:

        You can break a web form and fail to be unsubscribed?  Here, hold ma' beer...

        I have repeatedly crashed multiple companies' automated phone systems so badly that they take more than a day to be brought back online.  And at least twice, I have promptly crashed them again.

        When I sign up for a service - online or real-world, like a utility company - I will choose perfectly pedestrian options for the service, but the person setting up the account will be completely unable to complete the process.  There will be a lot of "Huh, that's weird" and "It won't let me do that" and "I set it up that way, but now it says the account doesn't exist" and things like that.  I will make, on average, four trips to the place (or four long phone calls) before the account and service is correctly set up, and it will require escalation at least twice to get there.  Gas, phone, water, sewer, internet, garbage collection, electricity, everything.

        With virtually any service I use (online or off), my account will spontaneously mutate into an incompatible or unserviceable state.  For my first three support requests/calls, they will tell me emphatically that everything looks fine from their end, and the problem must be with something I did.  I will spend two or more days investigating and thoroughly documenting the process of tracing the problem to their systems, and provide them this information in my next request.  They will then look and say "Huh, that's funny..." and admit that there is something weird with my account, but they have no idea why it's like that, or how to fix it.  Two levels of escalation later, I get someone who knows how to flip the necessary flag on my account to make it work again.

        I have taken my car in to have the same issue fixed three times, at two different places.  Each time they have done something ineffectual like "we cleaned the sensor" or even just "we reset the OBD code" but swear that this will fix the issue.  Of course it doesn't, and the check-engine light goes back on on the drive home.  For one of them I have a signed report saying the mechanic did both these things, then took an extended test drive and it's all fine -- but my dashcam shows it wasn't driven at all, except to back it out of the garage into the parking lot.

        It goes on and on like this.  "I broke a website/application" happens so often that it's not even notable to me.

        It does mean I file an awful lot of bugs against projects or commercial apps that end up being closed with "can't reproduce" after a lot of head-scratching.


        • Elusis says:

          I know I have "I broke this thing by minimally interacting with it" stories, but you are obviously very very good and I bow before your superpowers.

          I'll confine my future comments to my ability to walk into an organizational system and inadvertently identify its obvious (to me) failure points while still getting oriented.

  3. 7

    Given that I was locked out of Patreon for a while because their system thinks that "I don't want to receive emails from you" includes emails to reset forgotten passwords, I'm not sure anyone there knows how anything works.

  4. Glaurung says:

    When I support someone's patreon, I always get charged immediately, and then again on the 1st of the next month, even if that's only a couple days later (I always pay with Paypal, IDK how they handle credit cards). It may be that your patreon is using old settings and the ones I have supported recently are using a new setting?  

    • jwz says:

      They recently (within the last year) added the ability to charge people immediately, but since I don't intend to be in the business of printing and mailing membership cards every damned morning, I have not turned that setting on, and left it at "monthly".

      They also added the ability to charge people for a whole year up front, which is also irrelevant.

      • Elusis says:

        Makes sense. I just subscribed to an org that produces events, that clearly says "we issue membership numbers once a week on Tuesdays, so if you're buying a membership to do a thing in the next few days, you'll need to print out your confirmation and bring it with you."  Any chance something like that would work for you, and allow you to mail cards biweekly or something?

        • jwz says:

          Only if I managed to train someone else to operate the card printer instead of me, and.... did I mention that it's a printer? Try to imagine how awful it is, then double that, then keep doubling that.

          • Elusis says:

            I believe you.

            Still, is it more awful than dealing with Patreon's API?

            • jwz says:

              Printing cards more often doesn't make the need to deal with Patreon's API go away.

              • Elusis says:

                Ah, true - I was thinking "well it would solve trying to figure out whether people have paid you money or not."

                I suppose you could still mail once a month - it's on brand.

                Or not, obviously.

          • Ronald P says:

            I feel that one, it's been more than twenty years, and I still have nightmares about Zebra thermal transfer clean room printers.

  5. What the hell are you supposed to do as opposed to use the API? Download a spreadsheet? How do they expect to grow if they hobble you guys like this?

  6. frymaster says:

    To add to the confusion, the last patreon I subscribed to did not work as you described with regards to payment (which I think is a setting that can be changed by the artist).  I got access - and was charged - immediately.  The artist reached out to me about that actually because me and another person had signed up about 2 days before the normal payment date, at which point I got charged again, and she wanted to apologise about it.

  7. haltiamreptar says:

    For the re-charging thing, I think that happened to me when I had to update my credit card details. I got an email saying that my card had been declined, and I got charged out of band when I put the new one in.