patreon-ruby

Interact with the Patreon API via OAuth.

Get the gem from RubyGems

Step 1. Get your client_id and client_secret

Visit the OAuth Documentation Page while logged in as a Patreon creator to register your client.

This will provide you with a client_id and a client_secret.

Step 2. Use this library

e.g., in a Rails route

require 'patreon'

class OAuthController < ApplicationController
  def redirect
    oauth_client = Patreon::OAuth.new(client_id, client_secret)
    tokens = oauth_client.get_tokens(params[:code], redirect_uri)
    access_token = tokens['access_token']

    api_client = Patreon::API.new(access_token)
    user_response = api_client.fetch_user()
    # user_response uses [json-api-vanilla](https://github.com/trainline/json-api-vanilla) for easy usage
    @user = user_response.data
    # you can list all attributes and relationships with (@user.methods - Object.methods)
    @pledge = @user.pledges[0]
    # just like with @user, you can list all pledge attributes and relationships with (@pledge.methods - Object.methods)
    @pledge_amount = @pledge.amount_cents
  end
end

Step 3. (Optional) Customize your usage

Patreon::API instances have four methods:

  • fetch_user(includes=nil, fields=nil)
  • fetch_campaign(includes=nil, fields=nil)
  • fetch_campaign_and_patrons(includes=nil, fields=nil)
  • fetch_page_of_pledges(campaign_id, page_size, cursor=nil, includes=nil, fields=nil)

The includes and fields arguments to these methods specify the related resources and the resource attributes you want returned by our API, as per the JSON:API specification. The lists of valid includes and fields arguments are provided on Patreon::Schemas. For instance, if you wanted to request the total amount a patron has ever paid to your campaign, which is not included by default, you could do:

api_client = Patreon::API.new(patron_access_token)
patron_response = api_client.fetch_user(nil, {
  'pledge': Patreon::Schemas::Pledge.default_attributes + [Patreon::Schemas::Pledge::Attributes::TOTAL_HISTORICAL_AMOUNT_CENTS]
})