Recently, we’ve been hooking the Patreon API to our blog, so that we can set up a page for our Patrons properly. Along the way, we ran into a snag that has not been properly-documented online. If you’ve found this article, I hope this helps save you some time.
The problem
What we were trying to do is retrieve our Patron list. To do so, we queried the following URL:
https://www.patreon.com/api/oauth2/v2/campaigns/1231234/members?fields[member]=full_name,patron_status
This was supposed to return all of our Patrons. Instead, it only returned our oldest 20 Patrons. To help give us an idea of what’s going on, we dumped the returned data using var_dump()
in PHP:
array(3) { ["data"]=> array(20) { [PATRON DATA REDACTED] } ["links"]=> array(1) { ["next"]=> string(152) "https://www.patreon.com/api/oauth2/v2/campaigns/3080605/members?fields%5Bmember%5D=full_name%2Cpatron_status&page%5Bcursor%5D=01XVLl9422U226PB6AedxoyFlv" } ["meta"]=> array(1) { ["pagination"]=> array(2) { ["cursors"]=> array(1) { ["next"]=> string(26) "01XVLl9422U226PB6AedxoyFlv" } ["total"]=> int(27) } } }
Notice a few things in the returned data above:
- Only 20 Patrons are returned, even though the data tells us that there are 27 Patrons.
- There is a URL returned in
$array['links']['next']
, and a cursor hash returned in$array['meta']['pagination']['cursors']['next']
.
Article continues after the advertisement:
The solution
After looking at the data dump, the solution became obvious. We have to make multiple queries!
Making multiple queries
Basically, instead of making just a single-query to our URL. We have to continue making queries to the URL given in $array['links']['next']
until the Patreon API stops returning URLs to us.
In our case above, making another query to the returned URL above will retrieve the remaining 7 Patrons. Once there is no more data, the data returned will not contain a $array['links']['next']
item. Here is the data dump for our last 7 Patrons.
array(2) { ["data"]=> array(7) { [PATRON DATA REDACTED] } ["meta"]=> array(1) { ["pagination"]=> array(1) { ["total"]=> int(27) } } }
If you prefer to build your own “next” URLs, you can also use the cursor hash returned in $array['meta']['pagination']['cursors']['next']
to form your own query. You just need to add an additional page[cursor]
parameter to your original query:
https://www.patreon.com/api/oauth2/v2/campaigns/1231234/members?fields[member]=full_name,patron_status&page[cursor]=YOUR_NEXT_CURSOR
Increasing the query limit
If you are rushing and want a quick, dirty fix, you can simply just set the number of results to return.
https://www.patreon.com/api/oauth2/v2/campaigns/1231234/members?fields[member]=full_name,patron_status&page[count]=100
This is not a suitable long-term solution though, for obvious reasons.
Conclusion
I hope this short article helped you! If you’ve got any feedback, feel free to leave us a comment right below.