We use `Instagram::Client.new(options)` as our primary interface for creating a new client, and yes we use *many* clients with *many* access tokens in our application, avoiding the `Instagram.options` defaults entirely. This enables us to use each client separately, concurrently in a threadsafe manner.

---------------------

In this case, you're already changing the API a bit by adding the non-optional `ratelimit_hash` param, so it's a good time to really take a look at it, to make sure that the changes we're introducing now make potential future changes simple to do without breaking interface.

Since the response object is only ever created by a client request, its API isn't as critical as the public object-creators. In this case, I'd consider this as a possible new interface:

```ruby
# @param client [Instagram::Client]
# @param response_hash
# @param extra_params [Hash<Symbol,#to_hash>]
# @options extra_params [#to_hash] :ratelimit (Hashie::new)
def self.create(client, response_hash, extra_params = {})
  # ...
end
```

Also, why `Instagram::Response` is a module and not a class, especially since they bake in class-ish stuff on top of it with this `::create` method is beyond me.